Personalizar seu fluxo de trabalho com variáveis de ambiente e dados de artefato
Neste módulo, você aprenderá a usar as variáveis de ambiente padrão e personalizadas, scripts personalizados, dependências de cache e passar dados de artefato entre trabalhos. Você também aprenderá a acessar os logs de fluxo de trabalho do site do GitHub e dos pontos de extremidade da API REST.
Variáveis de ambiente e contextos padrão
No fluxo de trabalho do GitHub Actions, há muitas variáveis de ambiente padrão disponíveis para uso, mas somente dentro do executor de um trabalho. Essas variáveis padrão diferenciam maiúsculas e minúsculas e se referem aos valores de configuração do sistema e do usuário atual. Recomendamos que você use essas variáveis de ambiente padrão para fazer referência ao sistema de arquivos em vez de usar caminhos de arquivo embutidos em código. Para usar uma variável de ambiente padrão, especifique $
seguido pelo nome da variável de ambiente.
jobs:
prod-check:
steps:
- run: echo "Deploying to production server on branch $GITHUB_REF"
Além das variáveis de ambiente padrão, você pode usar variáveis definidas como contextos. Contextos e variáveis padrão são semelhantes, pois ambos fornecem acesso a informações de ambiente, mas têm algumas diferenças importantes. Embora as variáveis de ambiente padrão possam ser usadas apenas dentro do executor, as variáveis de contexto podem ser usadas em qualquer ponto do fluxo de trabalho. Por exemplo, as variáveis de contexto permitem que você execute uma instrução if
para avaliar uma expressão antes de executar o executor.
name: CI
on: push
jobs:
prod-check:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- run: echo "Deploying to production server on branch $GITHUB_REF"
Este exemplo está usando o contexto github.ref
para verificar o branch que disparou o fluxo de trabalho. Se o branch for main
, o executor será executado e imprimirá "Implantando no servidor de produção no branch $GITHUB _REF". A variável de ambiente padrão $GITHUB_REF
é usada no executor para se referir ao branch. Observe que as variáveis de ambiente padrão são todas maiúsculas, já as variáveis de contexto são todas minúsculas.
Variáveis de ambiente personalizadas
Semelhante ao uso de variáveis de ambiente padrão, você pode usar variáveis de ambiente personalizadas em seu arquivo de fluxo de trabalho. Para criar uma variável personalizada, você precisa defini-la no arquivo de fluxo de trabalho usando o contexto env
. Se você quiser usar o valor de uma variável de ambiente dentro de um executor, poderá usar o método normal do sistema operacional do executor para ler as variáveis de ambiente.
name: CI
on: push
jobs:
prod-check:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- run: echo "Nice work, $First_Name. Deploying to production server on branch $GITHUB_REF"
env:
First_Name: Mona
Scripts em seu fluxo de trabalho
Nos exemplos de snippet de fluxo de trabalho anteriores, a palavra-chave run
é usada para simplesmente imprimir uma cadeia de texto. Como a palavra-chave run
avisa ao trabalho para executar um comando no executor, você usa a palavra-chave run
para executar ações ou scripts.
jobs:
example-job:
steps:
- run: npm install -g bats
Neste exemplo, você estará usando o npm para instalar o pacote de teste de software bats
usando a palavra-chave run
. Você também pode executar um script como uma ação. Você pode armazenar o script em seu repositório, geralmente feito em um diretório .github/scripts/
e, em seguida, fornecer o caminho e o tipo de shell usando a palavra-chave run
.
jobs:
example-job:
steps:
- name: Run build script
run: ./.github/scripts/build.sh
shell: bash
Dependências de cache com a ação de cache
Ao criar um fluxo de trabalho, muitas vezes você encontrará a necessidade de reutilizar as mesmas saídas ou baixar dependências de uma execução para outra. Em vez de baixar essas dependências repetidamente, você pode armazená-las em cache para fazer com que seu fluxo de trabalho seja executado de forma mais rápida e eficiente. Isso pode reduzir drasticamente o tempo necessário para executar determinadas etapas em um fluxo de trabalho, pois os trabalhos em executores hospedados pelo GitHub começam em um ambiente virtual limpo a cada vez. As dependências de cache ajudarão a acelerar o tempo necessário para recriar esses arquivos de dependência.
Para armazenar em cache as dependências de um trabalho, use a ação cache
do GitHub Actions. Essa ação recupera um cache identificado por uma chave exclusiva que você fornece. Quando a ação encontra o cache, ele recupera os arquivos armazenados em cache para o caminho que você configurar. Para usar a ação cache
, você precisará definir alguns parâmetros específicos:
Parâmetro | Descrição | Obrigatório |
---|---|---|
Chave | Refere-se ao identificador de chave criado ao salvar e pesquisar um cache. | Sim |
Caminho | Refere-se ao caminho do arquivo no executor para armazenar em cache ou pesquisar. | Sim |
Chaves de restauração | consiste em chaves existentes alternativas para armazenar em cache se a chave de cache desejada não for encontrada. | No |
steps:
- uses: actions/checkout@v2
- name: Cache NPM dependencies
uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-npm-cache-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-npm-cache-
No exemplo anterior, o path
é definido como ~/.npm
e a key
inclui o sistema operacional do executor e o hash SHA-256 do arquivo package-lock.json
. A prefixação da chave com uma ID (npm-cache
, neste exemplo) é útil quando você usa o restore-keys
fallback e tem vários caches.
Passar dados de artefato entre trabalhos
Semelhante ao contexto de armazenar em cache dependências em seu fluxo de trabalho, você pode passar dados entre trabalhos dentro do mesmo fluxo de trabalho. É possível fazer isso usando as ações upload-artifact
e download-artifact
. Trabalhos que dependem dos artefatos de um trabalho anterior devem aguardar a conclusão bem-sucedida deste trabalho anterior antes de poderem ser executados. Isso será útil se você tiver uma série de trabalhos que precisam ser executados sequencialmente com base em artefatos carregados de um trabalho anterior. Por exemplo, job_2
requer o job_1
usando a sintaxe do needs: job_1
.
name: Share data between jobs
on: push
jobs:
job_1:
name: Upload File
runs-on: ubuntu-latest
steps:
- run: echo "Hello World" > file.txt
- uses: actions/upload-artifact@v2
with:
name: file
path: file.txt
job_2:
name: Download File
runs-on: ubuntu-latest
needs: job_1
steps:
- uses: actions/download-artifact@v2
with:
name: file
- run: cat file.txt
O exemplo anterior tem dois trabalhos. O job_1
grava texto no arquivo file.txt
e, em seguida, usa a ação actions/upload-artifact@v2
para carregar esse artefato e armazenar os dados para uso futuro no fluxo de trabalho. O job_2
requer a conclusão de job_1
usando a sintaxe needs: job_1
e usa a ação actions/download-artifact@v2
para baixar esse artefato e depois imprimir o conteúdo de file.txt
.
Habilitar log de depuração de etapa em um fluxo de trabalho
Em alguns casos, o log de fluxo de trabalho padrão não fornecerá detalhes suficientes para diagnosticar o motivo de falha da execução de um fluxo de trabalhos específico, da tarefa ou da etapa. Para essas situações, você pode habilitar o log de depuração adicional para duas opções: execuções e etapas. Habilite esse log de diagnósticos definindo dois segredos de repositório que requerem acesso de admin
ao repositório para true
:
- Para habilitar o log de diagnóstico do executor, defina o segredo
ACTIONS_RUNNER_DEBUG
no repositório que contém o fluxo de trabalho comotrue
. - Para habilitar o log de diagnóstico de etapa, defina o segredo
ACTIONS_STEP_DEBUG
no repositório que contém o fluxo de trabalho comotrue
.
Acessar os logs de fluxo de trabalho da interface do usuário
Quando se pensa em automação bem-sucedida, o objetivo é gastar o menor tempo examinando o que é automatizado para que se possa concentrar a atenção no que é relevante. Mas, às vezes, as coisas não funcionam como planejado, e você precisa examinar o que aconteceu. Esse processo de depuração pode ser frustrante, mas o GitHub fornece uma estrutura de layout clara que permite uma maneira rápida de navegar entre os trabalhos, mantendo o contexto da etapa de depuração atual. Para exibir os logs de uma execução de fluxo de trabalho no GitHub, você pode seguir estas etapas:
- Navegue até a guia Ações em seu repositório.
- Na barra lateral esquerda, clique no fluxo de trabalho desejado.
- Na lista de execuções de fluxo de trabalho, selecione a execução desejada.
- Em Trabalhos, selecione o trabalho desejado.
- Leia a saída do log.
Se você tiver várias execuções em um fluxo de trabalho, também poderá selecionar o filtro de Status depois de escolher o fluxo de trabalho e defini-lo como Falha para exibir apenas as execuções com falha dentro desse fluxo de trabalho.
Acessar os logs de fluxo de trabalho da API REST
Além de exibir logs usando o GitHub, você também pode usar a API REST do GitHub para exibir logs de execuções de fluxo de trabalho, executar fluxos de trabalho novamente ou até mesmo cancelar execuções de fluxo de trabalho. Para exibir o log de uma execução de fluxo de trabalho usando a API, você precisa enviar uma solicitação GET
para o ponto de extremidade de logs. Tenha em mente que qualquer pessoa com acesso de leitura ao repositório pode usar esse ponto de extremidade. Se o repositório for privado, você deverá usar um token de acesso com o escopo repo
.
Por exemplo, uma solicitação GET
para exibir um log de execução de fluxo de trabalho específico seguiria este caminho:
GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs