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
3441fe12
Commit
3441fe12
authored
9 years ago
by
Walmes Marques Zeviani
Browse files
Options
Downloads
Patches
Plain Diff
Acrescenta IC e começa fluxo de trabalho.
parent
e3de56f8
No related branches found
No related tags found
1 merge request
!41
Issue#23
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
cap05.Rmd
+202
-50
202 additions, 50 deletions
cap05.Rmd
with
202 additions
and
50 deletions
cap05.Rmd
+
202
−
50
View file @
3441fe12
...
@@ -487,15 +487,105 @@ Científica e Software Livre - da UFPR.
...
@@ -487,15 +487,105 @@ Científica e Software Livre - da UFPR.
# Fluxo de trabalho #
# Fluxo de trabalho #
<https://www.atlassian.com/git/>
O fluxo de trabalho de um projeto Git local e usando um servidor remoto
já foram apresentados. O fluxo com um repositório Git mantido em um
serviço, como o GitHub ou Gitlab, não muda muito. A maior diferença não
é sobre o uso de novas instruções Git mas sim a adoção de uma estratégia
de trabalho (*workflow*) baseada nos recursos desses serviços, como as
*milestones* e *issues*.
Em termos de comandos, acrescenta-se aqueles necessários para se
comunicar com um repositório remoto. Da mesma forma que o ramo default
do Git é o `master`, o repositório remoto é por default chamado de
`origin`.
Ao considerar um seviço web, você pode começar um repositório novo de
duas formas: localmente ou pelo serviço.
Pelo serviço, qualquer que seja, crie um novo repositório. GitHub e
GitLab dão instruções resumidas de como proceder logo que você cria um
novo repositório, inclusive, incluem opções como criar um repositório
com arquivo de `README`. Assim que criar, seu repositório terá um
endereço. Na sessão anterior, **Gerenciar repositórios**, descremos o
processo de criar e *clonar* o repositório e também de criar local e
adicionar um endeço do `origin`.
Localmente o repositório segue o ciclo normal de desenvolvimento que
minimamente contém das intruções `git add` e `git commit`. Os fluxos de
trabalho em geral preconizam o desenvolvimento a partir de *branches* de
demanda cujo conteúdo será incorporado aos ramos permanentes (`master`,
`devel`). Para criar um ramo
clone, add, commit, branch, push, fetch, pull.
```
## Cria um ramo chamado issue#10.
git branch issue#10
## Muda do ramo atual para o recém criado.
git checkout issue#10
## Segue a rotina.
git add ...
git commit ...
push branch, delete branch no origin
## Sempre que quiser, suba o trabalho.
git push origin issue#10
```
```
## Lista os ramos locais.
git branch -l
## Lista os remostos.
git branch -r
## Lista todos.
git branch -a
```
```
## Remove um ramo local (não mais útil).
git branch -d issue#10
setar outros remotes
## Remove um ramo remoto (não mais útil).
git branch -dr origin/issue#10
## Remove um ramo remoto na origem (duas formas).
git push origin --delete issue#10
git push origin :issue#10
```
```
## Lista os remotos.
git remote -v
## Renomeia para um nome melhor
git remote rename origin servidor
## Remove.
git remote rm servidor
## Adiciona um endereço de remoto (origin)
git remote add origin <url>
git remote add servidor <url>
## Adiciona/remove URLs ao origin.
git remote set-url origin --add <url>
git remote set-url origin --delete <url>
```
diferença de fetch e pull
diferença de fetch e pull
https://www.atlassian.com/git/tutorials/syncing/git-push
https://www.quora.com/Whats-the-difference-between-git-pulland-git-fetch
```
## https://git-scm.com/docs/git-fetch
## O remote default é o origin. refspec é um ramo ou commit.
git fetch <remote> <refspec>
git fetch --all
git fetch --verbose
## https://git-scm.com/docs/git-pull
```
# Macanísmos de colaboração #
# Macanísmos de colaboração #
...
@@ -845,6 +935,9 @@ fazer *webhook* com Slack
...
@@ -845,6 +935,9 @@ fazer *webhook* com Slack
## GitLab ##
## GitLab ##
https://about.gitlab.com/gitlab-ci/
https://about.gitlab.com/2015/02/03/7-reasons-why-you-should-be-using-ci/
A Integração Contínua passou fazer parte do GitLab CE na [versão 8.0],
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
lançada em setembro de 2015. Diferente do GitHub, essa versão do GitLab
tem o IC de forma nativa. Você pode configurar servidores externos para
tem o IC de forma nativa. Você pode configurar servidores externos para
...
@@ -855,6 +948,8 @@ GitLab.
...
@@ -855,6 +948,8 @@ GitLab.
[Digital Ocean] parar verificar repositórios hospedados no
[Digital Ocean] parar verificar repositórios hospedados no
<https://gitlab.com/>.
<https://gitlab.com/>.
TODO Definir *runner*, *build*, *YAML*.
Segundo ele, o primeiro passo é acessar <https://gitlab.com/ci/> para
Segundo ele, o primeiro passo é acessar <https://gitlab.com/ci/> para
adicionar o projeto à integração contínua. Isso vai gerar um *token* de
adicionar o projeto à integração contínua. Isso vai gerar um *token* de
registro que será passado para o *runner* que deve estar em uma
registro que será passado para o *runner* que deve estar em uma
...
@@ -888,7 +983,7 @@ e [mcglm], dois pacotes R.
...
@@ -888,7 +983,7 @@ e [mcglm], dois pacotes R.
### O arquivo `.gitlab-ci.yml` ###
### O arquivo `.gitlab-ci.yml` ###
A documentação oficial sobre como usar 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>.
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
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
todo o processo de verificação do seu repositório a partir de uma série
...
@@ -908,49 +1003,82 @@ job2:
...
@@ -908,49 +1003,82 @@ job2:
Neste exemplo existem dois *jobs* (tarefas). Cada um deles corre
Neste exemplo existem dois *jobs* (tarefas). Cada um deles corre
independente e podem ser executados simultâneamente. O primeiro executa
independente e podem ser executados simultâneamente. O primeiro executa
um *script* shell e o segundo comandos *shell* em uma lista. Porém, tais
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:`.
arquivos podem ser bem mais complexos
,
com campos além do `script:`.
Os
campos a seguir são todos opcionais:
Todos são opcionais:
* `image`: para especificar uma imagem [*docker*]. O tutorial de
* `image`: para usar uma imagem *docker*. O tutorial de [Alan Monger]
[Alan Monger] considera esse campo.
considera esse campo.
* `services`: também refere ao *docker*. Tais campos são de uso menos
* `services`: também refere ao *docker*. Documentação oficial sobre
frequênte, porém existe uma séria de vantagens neles. A documentação
isso encontra-se em
oficial sobre
isso encontra-se em
<http://doc.gitlab.com/ce/ci/docker/README.html>.
<http://doc.gitlab.com/ce/ci/docker/README.html>.
* `before_script`: define comandos/scripts a serem executados antes
* `before_script`: define comandos/scripts a serem executados antes
dos principais. É como se fosse o estágio zero, usado para
dos principais. São instruções de preparação das quais não se espera
preparação, do qual não se espera falhas pode não deve depender do
falhas pois não deve depender do projeto.
projeto.
* `stages`: define a ordem de excecução dos *jobs* que estabalecer uma
* `stages`: define os estágios de excecução do *jobs* para haver uma
cadeia de execução condicional. Jobs de mesma ordem ou do mesmo
exceussão condicional. Jobs de mesmo estágio são executados
estágio são executados paralelamente mas àqueles à frente só são
paralelamente mas àqueles à frente só são executados se houver
executados se houver sucesso dos predecessores.
sucesso dos predecessores.
```
* `variables`: serve para criar variables de ambiente que podem ser
stages:
- construcao
- teste
- entrega
job_contrucao:
script: "construcao.sh"
stage: construcao
job_test:
script: "teste_codigofonte.sh"
script: "teste_documentacao.sh"
stage: teste
job_entrega:
script: "compacta_transfere.sh"
stage: entrega
```
* `variables`: serve para criar variaveis de ambiente que podem ser
usados por todos os comandos e scripts.
usados por todos os comandos e scripts.
* `cache`: indica os diretórios e arquivos que serão mantidos entre os
* `cache`: indica os diretórios e arquivos que serão mantidos entre os
jobs (builds).
*jobs* (builds), possivelmente porque são aproveitados futuramente.
Exceto os nomes listados acima, um job pode ter um nome qualquer.
Com excessão dos nomes listados acima, um *job* pode ter qualquer nome,
Dentro de um job tem-se uma lista de campos disponíveis também:
desde que seja exclusivo. Dentro de um *job* tem-se também uma lista de
campos disponíveis para configurá-lo:
* `script`: é o campo para especificar um arquivo de script *shell* ou
uma lista de comandos a serem executadas pelo *runner*.
* `script`: especifica script *shell* ou uma lista de comandos a serem
* `only` e `except`: restringem para ou excluem uma lista de
executados.
referências git (*branches* ou tags*) a aplicação do job. Esse campo
* `stage`: já mencionado anteriormente, serve para dar a ordem de
entende expressões regulares.
execução dos *jobs*. Vários *jobs* podem ser do mesmo estágio e
* `tags`: são usadas para selecionar os runners na lista de runners
nesse caso são executados paralelamente.
disponíveis. Os runners possuem tags.
* `only` e `except`: servem para restringir a execução do *job*,
* `allow_failure`:
incluindo ou excluindo, para uma lista de referências git, como
* `when`: é um comando que dispara exceussões condicionais
*branches* ou *tags*. Esse campo permite expressões regulares, úteis
* `on_failure`: são instruções executadas quando algum o job do
para incluir (excluir) ramos representáveis por *regex*, como são os
ramos de desenvolvimento do nosso workflow, iniciados com *issue*.
```
job_test:
script: "teste_codigofonte.sh"
script: "teste_documentacao.sh"
stage: teste
only:
- /^issue.*$/ ## Os que começam com issue
```
* `tags`: são usadas para indicar o *runner* da lista de
disponíveis. Na configuração dos *runners* pode-se atribuir *tags*
que servem justamente para esse tipo de pareamento.
* `allow_failure`: indica jobs que mesmo que falhem, não serão
considerados para dar estampa de sucesso ou falha.
* `when`: é um comando que dispara excussões condicionais ao sucesso
do *job* anterior
* `on_failure`: são instruções executadas quando algum o *job* do
estágio anterior falhou.
estágio anterior falhou.
* `on_success`: são instruções executadas quando todos os jobs do
* `on_success`: são instruções executadas quando todos os
*
jobs
*
do
estágio anterior foram bem sucedidos.
estágio anterior foram bem sucedidos.
* `always`: excutados sempre.
* `always`: excutados sempre.
* `artifacs`:
* `cache`: especifica arquivos e diretório mantidos entre um *build* e
* `cache`: especifa arquivos e diretório mantidos entre um build e outro.
outro.
inilimatos jobs ao mesmo tempo.
No caso do pacote LegTools, o arquivo `.gitlab-ci.yml` do repositório
No caso do pacote LegTools, o arquivo `.gitlab-ci.yml` do repositório
tem o seguinte conteúdo:
tem o seguinte conteúdo:
...
@@ -983,15 +1111,36 @@ Caso queira a estampa para outros ramos, é só acrescentá-los.
...
@@ -983,15 +1111,36 @@ Caso queira a estampa para outros ramos, é só acrescentá-los.
### Runners ###
### Runners ###
Os jobs são executados pelos *runners* dentro de seus ambientes. Cada
Em poucas palavras, um *runner* é uma máquina que executa o build por
job corre independente do demais TODO qual implicação disso?
meio do GitLab CI. Um *runner* pode ser específico de um projeto ou pode
ser um *runner* compartilhado, disponível à todos os projetos. Estes
TODO http://doc.gitlab.com/ce/ci/runners/README.html
últimos são úteis à projetos que tem necessidades similares, como todos
àqueles projetos que são pacotes R, por exemplo. Isso facilita a
https://about.gitlab.com/gitlab-ci/
administação e atualização. Os específicos, por outro lado, atendem
https://about.gitlab.com/2015/02/03/7-reasons-why-you-should-be-using-ci/
projetos com demandas particulares.
<https://en.wikipedia.org/wiki/Comparison_of_continuous_integration_software>
Apenas usuários com permissões de *admin* podem criar runners
compartilhados.
Ir em Settings > Services e marcar *active*. Isso vai criar 6 novas
entradas no menu da esquerda
* *Runners*: contém instruções de como usar um *runner* específicos e
compartilhados.
* *Variables*: define variáveis que são omitidas no *log* do *build*,
útil para passar senhas.
* *Triggers*: servem para ??
* *CI Web Hooks*: esse *web hook* pode ser usado para criar eventos
quando o build é concluido.
* *CI Settings*: configurações gerais
* *CI Services*: permite integrar o CI com outros serviços, como email
e Slack.
Para habilitar um *runner*, é necessário instalar o
`gitlab-ci-multi-runner`. O [repositório oficial do *GitLab Runner*]
contém as instruções de instalação e configuração e a
documentação oficial sobre [*runners*] indica como tirar melhor proveito
do recurso.
<!---------------------------------------------------------------------- -->
<!---------------------------------------------------------------------- -->
...
@@ -1011,3 +1160,6 @@ https://about.gitlab.com/2015/02/03/7-reasons-why-you-should-be-using-ci/
...
@@ -1011,3 +1160,6 @@ https://about.gitlab.com/2015/02/03/7-reasons-why-you-should-be-using-ci/
[GitLab do LEG]: http://git.leg.ufpr.br/
[GitLab do LEG]: http://git.leg.ufpr.br/
[legTools]: http://git.leg.ufpr.br/leg/legTools
[legTools]: http://git.leg.ufpr.br/leg/legTools
[mcglm]: http://git.leg.ufpr.br/wbonat/mcglm
[mcglm]: http://git.leg.ufpr.br/wbonat/mcglm
[*docker*]: https://www.docker.com/
[repositório oficial do *GitLab Runner*]: https://gitlab.com/gitlab-org/gitlab-ci-multi-runner
[*runners*]: http://doc.gitlab.com/ce/ci/runners/README.html
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