Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
apostila-git
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Harbor Registry
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
pet-estatistica
apostila-git
Commits
359ac287
Commit
359ac287
authored
9 years ago
by
Walmes Marques Zeviani
Browse files
Options
Downloads
Patches
Plain Diff
Preliminar de Integração Contínua com GitHub.
parent
07a1109b
No related branches found
No related tags found
1 merge request
!41
Issue#23
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
cap05.Rmd
+122
-2
122 additions, 2 deletions
cap05.Rmd
with
122 additions
and
2 deletions
cap05.Rmd
+
122
−
2
View file @
359ac287
...
...
@@ -693,8 +693,128 @@ git tag -a v1.0 -m "Versão 1.0 do software"
# Integração contínua #
Permite chegar se o projeto, no caso de softwares, está
funcionando/instalando sem erros.
Quando você está trabalhando em um projeto Git, cada *commit*, cada
*branch*, contém algum desenvolvimento. Solucionar conflitos de *merge*
não é um atarefa complicada, principalmente se forem consideradas as
ferramentas certas para isso, como será visto no próximo capítulo. No
entanto, será que o último *commit* ou o novo *branch* estão funcionais?
O QUE É FUNCIONAL?
Reprodutibilidade é uma questão de fundamental importância em projetos
coletivos e compartilhados. Tem-se a preocupação de que seu código
(programa) seja executado (instalado) sem erros nos ambientes dos seus
desenvolvedores e clientes. O desenvolvimento do código visa
aperfeiçoá-lo mas o tempo todo estamos sujeitos fazer modificações que
induzem erros ou encontrar erros não esperados (*bugs*).
Rastrear o projeto atrás de erros não é uma tarefa fácil. Em uma
situação ideal, alguém teria que testar se o código executa (software
instala) em uma máquina cliente (com os requisitos mínimos exigidos),
toda vez que um *commit* fosse feito, já que os *commits* indicam que
modificações foram feitas. Se o teste for positivo, ok, sem problemas,
se o teste for negativo, informar a equipe sobre como proceder, onde foi
o erro.
Não é raro programar alguma rotina (bash, R, etc) que seja bem sucedida
no ambiente em que foi desenvolvido mas que a execução apresenta falhas
na máquina de outra pessoa. Garantir reprodutibilidade não é fácil. O
melhor jeito é testar em um ambiente virgem, numa máquina cliente que
contenha apenas os requisitos mínimos. Após verificar o código você deve
voltar o ambiente para a estaca 0 para que possam ser feitos novos
testes.
Integração contínua significa exatamente isso: seu repositório Git está
continuamente integrado à um ambiente cliente que faz verificações toda
vez que surge um novo *commit*. A ideia da integração contínua é bem
mais simples que a sua implementação, logicamente, como tudo.
Implementar a integração contínua no GitHub e GitLab é diferente. O
GiHub oferece diversas opções enquanto que o GitLab CE têm o serviço de
forma nativa.
Seja qual for a opção, as vantagens da IC são:
1) Economia de tempo com inspeção de código;
2) Verificação em um ambiente virgem;
3) Verificação em vários cenários (arquiteturas, SO, dependências e
versões);
4) Informação coletiva à equipe do erro na hora que ocorre por envio
automático de mensagem;
5) Indicação de sucesso ou não na home do projeto;
6) Entrega de documentação e versões estáveis zipadas, etc.
7) Custo computacional reduzido já que é feito em servidor separado.
8) Verificação a cada *commit*, status em cada branch e requisiação de
merge.
**GitHub**
https://travis-ci.org/
http://www.codeaffine.com/2014/09/01/travis-continuous-integration-for-github-projects/
Embora exista uma lista grande de serviços de integração contínua
disponíveis para repositórios GitHub, um dos mais usados é o Travis CI.
Travis CI (*continuous integration*) é um serviço free e open source
destinado à integração contínua para projeto **públicos** no GitHub.
Para vincular um projeto no GitHub com IC no Travis CI, você precisa
logar no <https://travis-ci.org/> com a sua conta do GitHub. Assim que
você logar, o serviço pede autorização para acessar sua conta, seus
repositórios. Acesso permitido, uma lista com os seus repositórios será
exibida na qual você pode marcar os repositórios que usarão o serviço.
A próxima etapa é criar um arquivo `.travis.yml` na raíz do seu
repositório Git. Esse arquivo espefica todas as instruções sobre o seu
repostório de devem ser feitas a fim de verificá-lo. Se seu repositório
é um pacote R, por exemplo, esse arquivo vai ter instruções de
instalação do pacote.
Cada projeto, cada linguagem, têm uma forma particular de ser
testada. Para pacotes R, o Travis CI tem uma documentação de orientação:
<https://docs.travis-ci.com/user/languages/r/>. Além disso, uma boa
prática em ver exemplos em uso, como o `.travis.yml` dos pacotes R
`knitr` (<https://github.com/yihui/knitr>) e `devtools`
(<https://github.com/hadley/devtools>) que estão na lista dos mais
utilizados.
Para todas as liguagens e objetivos têm-se exemplos de arquivos
`.trevis.yml`. Para o Emacs e biblitecas visite
<https://github.com/rolandwalker/emacs-travis>,
<https://github.com/Malabarba/elisp-bug-hunter> e
<https://github.com/abo-abo/tiny>. Para projetos em `C++` e `phyton`,
assim como o R, o Travis CI tem uma documentação introdutória. Visite
<https://docs.travis-ci.com/user/language-specific/> para ver a lista de
documentações.
Além do linguagens de programação, é possível testar inclusive a
compilação de um documento Latex:
<http://harshjv.github.io/blog/setup-latex-pdf-build-using-travis-ci/>.
*branch build flow*
*pull request build flow*
`after_failure` (information, error report)
`after_success` (deployment, uploads de documentação e versões estáveis)
exibir build status no README
fazer *webhook* com Slack
**GitLab**
`.gitlab-ci.yml`
```{r, eval=FALSE, engine="yml"}
job_R:
script:
- 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)'
```
https://about.gitlab.com/gitlab-ci/
https://about.gitlab.com/2015/02/03/7-reasons-why-you-should-be-using-ci/
http://alanmonger.co.uk/php/continuous/integration/gitlab/ci/docker/2015/08/13/continuous-integration-with-gitlab-ci.html
<https://en.wikipedia.org/wiki/Comparison_of_continuous_integration_software>
<!---------------------------------------------------------------------- -->
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment