From e3de56f8b0067f314596341582f8b8c30c0f73f4 Mon Sep 17 00:00:00 2001
From: Walmes Zeviani <walmes@ufpr.br>
Date: Mon, 30 Nov 2015 15:07:15 -0200
Subject: [PATCH] Adiciona mais detalhes sobre o arquivo YAML.

---
 cap05.Rmd | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 79 insertions(+), 7 deletions(-)

diff --git a/cap05.Rmd b/cap05.Rmd
index a46f8c3..7cc9ecc 100644
--- a/cap05.Rmd
+++ b/cap05.Rmd
@@ -794,8 +794,7 @@ O fluxo de trabalho de um repositório com IC é basicamente assim:
      como corrigir a falha ou anunciar o sucesso;
   9) O serviço aguarda por mais modificações;
   
-**GitHub**
-
+## GitHub ##
 
 http://www.codeaffine.com/2014/09/01/travis-continuous-integration-for-github-projects/
 
@@ -844,7 +843,7 @@ compilação de um documento Latex:
 exibir build status no README
 fazer *webhook* com Slack
 
-**GitLab**
+## GitLab ##
 
 A Integração Contínua passou fazer parte do GitLab CE na [versão 8.0],
 lançada em setembro de 2015. Diferente do GitHub, essa versão do GitLab
@@ -871,7 +870,7 @@ As especificação são feitas em um arquivo `.gitlab-ci.yml` na home do
 projeto.
 
 O [GitLab do LEG] tem o CI embutido pois é a versão mais recente do
-serviço. Essa servidora é na realidade um desktop com Ubuntu Server. É
+serviço. Essa servidora é na realidade um *desktop* com Ubuntu Server. É
 patrimônio da UFPR de responsabilidade do LEG mas tem uso compartilhado
 com o PET Estatística e colaboradores do Laboratório. Desde a
 disponibilização do GitLab, em julho de 2015, mantemos artigos,
@@ -886,6 +885,73 @@ tipo de comando ou programa disponível no servidor em questão, um Ubuntu
 Server 14.04. Até então, os repositórios com IC são só dois: [legTools]
 e [mcglm], dois pacotes R.
 
+### O arquivo `.gitlab-ci.yml` ###
+
+A documentação oficial sobre como usar o arquivo `.gitlab-ci.yml`
+encontra-se em: <http://doc.gitlab.com/ce/ci/yaml/README.html>.
+
+O arquivo `.gitlab-ci.yml` fica na raíz do projeto. Seu conteúdo define
+todo o processo de verificação do seu repositório a partir de uma série
+de instruções, como execução de comandos diretos ou execução de
+scripts. Abaixo tem-se um exemplo simples de `.gitlab-ci.yml`.
+
+```
+job1:
+  script: "teste_instalacao.sh"
+
+job2:
+  script:
+    - pwd
+    - ls -a
+```
+
+Neste exemplo existem dois *jobs* (tarefas). Cada um deles corre
+independente e podem ser executados simultâneamente. O primeiro executa
+um *script* shell e o segundo comandos *shell* em uma lista. Porém, tais
+arquivos podem ser bem mais complexos com campos além do `script:`.
+
+Todos são opcionais:
+
+  * `image`: para usar uma imagem *docker*. O tutorial de [Alan Monger]
+    considera esse campo.
+  * `services`: também refere ao *docker*. Documentação oficial sobre
+    isso encontra-se em
+    <http://doc.gitlab.com/ce/ci/docker/README.html>.
+  * `before_script`: define comandos/scripts a serem executados antes
+    dos principais. É como se fosse o estágio zero, usado para
+    preparação, do qual não se espera falhas pode não deve depender do
+    projeto.
+  * `stages`: define os estágios de excecução do *jobs* para haver uma
+    exceussão condicional. Jobs de mesmo estágio são executados
+    paralelamente mas àqueles à frente só são executados se houver
+    sucesso dos predecessores.
+  * `variables`: serve para criar variables de ambiente que podem ser
+    usados por todos os comandos e scripts.
+  * `cache`: indica os diretórios e arquivos que serão mantidos entre os
+    jobs (builds).
+
+Exceto os nomes listados acima, um job pode ter um nome qualquer.
+Dentro de um job tem-se uma lista de campos disponíveis também:
+
+  * `script`: é o campo para especificar um arquivo de script *shell* ou
+    uma lista de comandos a serem executadas pelo *runner*.
+  * `only` e `except`: restringem para ou excluem uma lista de
+    referências git (*branches* ou tags*) a aplicação do job. Esse campo
+    entende expressões regulares.
+  * `tags`: são usadas para selecionar os runners na lista de runners
+    disponíveis. Os runners possuem tags.
+  * `allow_failure`:
+  * `when`: é um comando que dispara exceussões condicionais
+    * `on_failure`: são instruções executadas quando algum o job do
+      estágio anterior falhou.
+    * `on_success`: são instruções executadas quando todos os jobs do
+      estágio anterior foram bem sucedidos.
+    * `always`: excutados sempre.
+  * `artifacs`:
+  * `cache`: especifa arquivos e diretório mantidos entre um build e outro.
+
+inilimatos jobs ao mesmo tempo.
+
 No caso do pacote LegTools, o arquivo `.gitlab-ci.yml` do repositório
 tem o seguinte conteúdo:
 
@@ -895,7 +961,9 @@ job_R:
     - echo $HOME
     - Rscript -e 'getwd(); .libPaths(); sessionInfo()'
     - Rscript -e 'library(devtools); check()'
-    - Rscript -e 'library(devtools); .libPaths(new = path.expand("~/R-tests/legTools")); install(local = FALSE)'
+    - Rscript -e 'library(devtools);\
+                  .libPaths(new = path.expand("~/R-tests/legTools"));\
+                  install(local = FALSE)'
 ```
 
 Estas são instruções em *shell* que chamam o R com expressões passadas
@@ -913,8 +981,12 @@ colocar
 
 Caso queira a estampa para outros ramos, é só acrescentá-los.
 
-A documentação oficial sobre como usar o arquivo `.gitlab-ci.yml`
-encontra-se em: <http://doc.gitlab.com/ce/ci/yaml/README.html>.
+### Runners ###
+
+Os jobs são executados pelos *runners* dentro de seus ambientes. Cada
+job corre independente do demais TODO qual implicação disso?
+
+TODO http://doc.gitlab.com/ce/ci/runners/README.html
 
 https://about.gitlab.com/gitlab-ci/
 https://about.gitlab.com/2015/02/03/7-reasons-why-you-should-be-using-ci/
-- 
GitLab