Introdução
Em pipelines de CI/CD do mundo real, os fluxos de trabalho raramente são apenas uma única lista de etapas. Eles são frequentemente compostos por múltiplos "jobs" (tarefas) distintos que precisam ser executados em uma ordem específica.
Por exemplo, você pode ter um job de Build (Compilação) que compila seu código e um job de Deploy (Implantação) que o envia para um servidor. Você definitivamente não quer que o job de Deploy seja executado se o job de Build falhar, e você não pode executá-los ao mesmo tempo porque a implantação precisa dos artefatos compilados.
Neste laboratório, você dividirá seu fluxo de trabalho em dois jobs separados e usará a palavra-chave needs para impor uma dependência, garantindo que o job de deploy aguarde a conclusão bem-sucedida do job de build.
Este laboratório baseia-se no repositório que você criou nos laboratórios anteriores. Você trabalhará com o repositório github-actions-demo.
Definir um job de compilação (build)
Primeiro, vamos limpar nosso workflow existente para ter um build job focado. Simplificaremos a estratégia de matriz do laboratório anterior para maior clareza, voltando a uma única versão para manter o foco nas dependências de jobs.
- Na página do seu repositório GitHub para
github-actions-demo, clique no botão verde Code. - Certifique-se de que a aba HTTPS esteja selecionada e copie a URL. Ela deve ser parecida com
https://github.com/your-username/github-actions-demo.git. - Abra o terminal no ambiente LabEx. O caminho padrão é
~/project. - Use o comando
git clonepara baixar o repositório. Substituayour-usernamepelo seu nome de usuário real do GitHub.
cd ~/project
git clone https://github.com/your-username/github-actions-demo.git
Exemplo de Saída:
Cloning into 'github-actions-demo'...
remote: Enumerating objects: X, done.
remote: Counting objects: 100% (X/X), done.
remote: Total X (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (X/X), done.
- Navegue até o repositório clonado:
cd ~/project/github-actions-demo
Crie um novo arquivo de workflow
.github/workflows/job-dependencies.ymlusando o editor WebIDE. Você pode encontrar o arquivo no explorador de arquivos no lado esquerdo, emproject/github-actions-demo/.github/workflows/.Comece criando a estrutura básica do workflow. Adicione o nome do workflow e o gatilho (trigger):
name: Job Dependencies
on: [push]
- Adicione a seção
jobse defina o job de build com seu executor (runner):
jobs:
build:
runs-on: ubuntu-latest
- Adicione a seção
steps. Primeiro, adicione a etapa de checkout para obter o código do repositório:
steps:
- uses: actions/checkout@v4
- Adicione a etapa de configuração do Node.js:
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
- Adicione a etapa para instalar as dependências:
- name: Install dependencies
run: npm install
- Adicione a etapa para executar os testes:
- name: Run tests
run: npm test
- Adicione a etapa de build que cria o diretório de artefato e o arquivo:
- name: Build project
run: |
mkdir dist
echo "Build artifact created at $(date)" > dist/build.txt
- Finalmente, adicione a etapa de upload de artefato. Esta etapa é crucial porque salva a saída do build para que o próximo job possa usá-la:
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: dist-files
path: dist
Seu arquivo completo deve estar assim agora:
name: Job Dependencies
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
- name: Build project
run: |
mkdir dist
echo "Build artifact created at $(date)" > dist/build.txt
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: dist-files
path: dist
Explicação
- Removemos a estratégia
matrixpor simplicidade. - Mantivemos a etapa
Upload build artifact. Isso é crucial porque o próximo job precisará desses arquivos!
Salve o arquivo (Ctrl+S ou Cmd+S) após fazer as alterações.
Definir um job de implantação (deploy) que necessita do build
Agora adicionaremos um segundo job chamado deploy. Este job deve ser executado somente se o build for bem-sucedido. Conseguimos isso usando needs: build.
Anexe o seguinte job
deployao seu arquivo.github/workflows/job-dependencies.yml. Certifique-se de que ele esteja no mesmo nível de indentação que obuild.Comece adicionando a definição do job de deploy com seu runner e dependência:
deploy:
runs-on: ubuntu-latest
needs: build
A linha needs: build é crucial - ela informa ao GitHub Actions que este job depende da conclusão bem-sucedida do job build.
- Adicione a seção de steps. Primeiro, adicione o step para baixar o artefato:
steps:
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: dist-files
path: dist
Isso baixa o artefato que foi carregado no job build. O name deve corresponder ao nome usado no step de upload.
- Adicione o step de deploy:
- name: Deploy project
run: |
echo "Deploying project..."
ls -R dist
echo "Deployment successful!"
Este step simula um deploy listando os arquivos baixados.
- A estrutura completa do seu arquivo deve ser assim:
name: Job Dependencies
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
- name: Build project
run: |
mkdir dist
echo "Build artifact created at $(date)" > dist/build.txt
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: dist-files
path: dist
deploy:
runs-on: ubuntu-latest
needs: build
steps:
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: dist-files
path: dist
- name: Deploy project
run: |
echo "Deploying project..."
ls -R dist
echo "Deployment successful!"
Explicação
needs: build: Esta é a linha chave. Ela informa ao GitHub Actions que este job depende da conclusão bem-sucedida do jobbuild.uses: actions/download-artifact@v4: Como os jobs são executados em máquinas virtuais diferentes, eles não compartilham sistemas de arquivos. Para obter a pastadistcriada no jobbuild, devemos baixar o artefato que carregamos anteriormente.name: dist-files: Deve corresponder ao nome usado no step de upload.
Salve o arquivo (Ctrl+S ou Cmd+S).
Fazer commit, push e verificar a execução sequencial
Agora vamos verificar se os jobs são executados na ordem correta.
- Certifique-se de estar no diretório do repositório:
cd ~/project/github-actions-demo
- Prepare as alterações (Stage as mudanças):
git add .
- Faça o commit das alterações:
git commit -m "Add deploy job with dependency on build"
- Envie as alterações para o repositório remoto no GitHub:
git push
Nota sobre Autenticação:
Ao executar git push, o WebIDE solicitará automaticamente a autenticação. Siga estes passos detalhados:
- Um popup aparecerá com a mensagem: "The extension 'GitHub' wants to sign in using GitHub." Clique em Allow.
- Uma nova notificação aparecerá. Clique em "Copy&Continue to GitHub" e, em seguida, clique em "Open" no próximo aviso.
- Faça login na sua conta do GitHub na janela do navegador que se abrir e insira o código de autorização que foi copiado. Após confirmar a autorização, a página fechará automaticamente.
- Aguarde alguns segundos e você verá o terminal concluir com sucesso a operação de push.
Nota de Privacidade: O WebIDE solicitará acesso total à sua conta do GitHub para fins de autenticação. Você não precisa se preocupar com questões de privacidade - a VM LabEx será imediatamente destruída após você concluir o laboratório atual, e suas credenciais e informações de autorização não serão retidas.
Este processo de autenticação não requer configuração manual de nome de usuário ou Personal Access Token.
Verificação no GitHub
- Visite seu repositório no GitHub em um navegador web.
- Clique na aba Actions.
- Clique na execução de workflow mais recente.
- Observe o gráfico de visualização. Você deverá ver dois círculos (jobs) conectados por uma linha.
- O job
buildestará à esquerda. - O job
deployestará à direita.
- O job
- Observe o progresso. Você notará que
deploypermanecerá em estado "Pending" ou "Waiting" até quebuildfique verde (Success). - Assim que
buildterminar,deploycomeçará. - Clique nos logs do job
deploypara ver a mensagem "Deploying project..." e a listagem de arquivos do artefato baixado.

Resumo
Neste laboratório, você aprendeu como orquestrar fluxos de trabalho (workflows) com múltiplos jobs no GitHub Actions. Você:
- Criou jobs separados de
buildedeploy. - Usou a palavra-chave
needspara definir uma dependência, garantindo quedeployseja executado somente apósbuild. - Usou
upload-artifactedownload-artifactpara passar dados (arquivos) entre esses jobs separados.
Este padrão é fundamental para construir pipelines de CI/CD robustos onde você deseja compilar uma vez e depois implantar em múltiplos ambientes (staging, produção) somente se as etapas anteriores forem bem-sucedidas.



