Definir variáveis de ambiente para um único fluxo de trabalho
Para definir uma variável de ambiente personalizada para uso em um único fluxo de trabalho, é possível usar a chave env
no arquivo do fluxo de trabalho. O escopo de uma variável personalizada definida por este método fica limitado ao elemento em que ele está definido. Você pode definir variáveis cujos escopos são definidos como:
- Todo o fluxo de trabalho, usando
env
no nível superior do arquivo de fluxo de trabalho. - O conteúdo de um trabalho em um fluxo de trabalho, usando
jobs.<job_id>.env
. - Uma etapa específica em um trabalho, usando
jobs.<job_id>.steps[*].env
.
name: Greeting on variable day on: workflow_dispatch env: DAY_OF_WEEK: Monday jobs: greeting_job: runs-on: ubuntu-latest env: Greeting: Hello steps: - name: "Say Hello Mona it's Monday" run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!" env: First_Name: Mona
name: Greeting on variable day
on:
workflow_dispatch
env:
DAY_OF_WEEK: Monday
jobs:
greeting_job:
runs-on: ubuntu-latest
env:
Greeting: Hello
steps:
- name: "Say Hello Mona it's Monday"
run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!"
env:
First_Name: Mona
Você pode acessar env
valores de variáveis usando as variáveis de ambiente do executor ou usando contextos. O exemplo acima mostra três variáveis personalizadas usadas como variáveis de ambiente de executor em um comando echo
: $DAY_OF_WEEK
, $Greeting
e $First_Name
. Os valores e os escopos dessas variáveis são definidos no nível do fluxo de trabalho, do trabalho e da etapa, respectivamente. A interpolação dessas variáveis acontece no executor.
Os comandos nas etapas run
de um fluxo de trabalho, ou uma ação referenciada, são processados pelo shell que você está usando no executor. As instruções nas outras partes de um fluxo de trabalho são processadas por GitHub Actions e não são enviadas para o executor. Você pode usar variáveis de ambiente do executor ou contextos em etapas run
, mas, nas partes de um fluxo de trabalho que não são enviadas ao executor, você deve usar contextos para acessar valores de variáveis. Para obter mais informações, consulte Usar contextos para acessar valores de variáveis.
Como a interpolação de variável de ambiente do executor é feita depois que um trabalho do fluxo de trabalho é enviado para uma máquina do executor, você deve usar a sintaxe apropriada para o shell usado no executor. Neste exemplo, o fluxo de trabalho especifica ubuntu-latest
. Por padrão, os executores do Linux usam o shell do Bash. Portanto, você precisa usar a sintaxe $NAME
. Por padrão, os executores do Windows usam o PowerShell, então, você usaria a sintaxe $env:NAME
. Para saber mais sobre shells, confira Sintaxe de fluxo de trabalho para o GitHub Actions.
Como definir variáveis de configuração para vários fluxos de trabalho
Você pode criar variáveis de configuração para uso em vários fluxos de trabalho e pode defini-las no nível da organização, do repositório ou do ambiente.
Por exemplo, você pode usar variáveis de configuração para definir valores padrão a parâmetros passados para criar ferramentas no nível da organização, mas permitir que os proprietários de repositório substituam esses parâmetros caso a caso.
Quando você define variáveis de configuração, elas ficam automaticamente disponíveis no contexto vars
. Para obter mais informações, confira Como usar o vars
contexto para acessar valores de variáveis de configuração.
Criando variáveis de configuração para um repositório
Para criar segredos ou variáveis no GitHub para um repositório de conta pessoal, você deve ser o proprietário do repositório. Para criar segredos ou variáveis no GitHub para um repositório da organização, você deve ter acesso admin
. Por fim, para criar segredos ou variáveis para um repositório de conta pessoal ou um repositório de organização por meio da API REST, você deve ter acesso de colaborador.
-
Em GitHub, acesse a página principal do repositório.
-
No nome do repositório, clique em Settings. Caso não consiga ver a guia "Configurações", selecione o menu suspenso , clique em Configurações.
-
Na seção "Security" da barra lateral, selecione Secrets and variables e clique em Actions.
-
Clique na guia Variáveis.
-
Clique em Nova variável de repositório.
-
No campo Nome, insira um nome para sua variável.
-
No campo Valor, insira o valor da variável.
-
Clique em Adicionar variável.
Como criar variáveis de configuração para um ambiente
Para criar segredos ou variáveis para um ambiente em um repositório de conta pessoal, você deve ser o proprietário do repositório. Para criar segredos ou variáveis para um ambiente em um repositório da organização, é necessário ter acesso de admin
. Para saber mais sobre os ambientes, confira Gerenciar ambientes para implantação.
-
Em GitHub, acesse a página principal do repositório.
-
No nome do repositório, clique em Settings. Caso não consiga ver a guia "Configurações", selecione o menu suspenso , clique em Configurações.
-
Na barra lateral esquerda, clique em Ambientes.
-
Clique no ambiente ao qual deseja adicionar uma variável.
-
Em Variáveis de ambiente, clique em Adicionar variável.
-
No campo Nome, insira um nome para sua variável.
-
No campo Valor, insira o valor da variável.
-
Clique em Adicionar variável.
Como criar variáveis de configuração para uma organização
Observação
Segredos e variáveis no nível da organização não são acessíveis por repositórios privados para GitHub Free. Para obter mais informações sobre como atualizar sua assinatura do GitHub, confira Atualizando o plano da sua conta.
Ao criar um segredo ou uma variável em uma organização, você poderá usar uma política para limitar o acesso por repositório. Por exemplo, você pode conceder acesso a todos os repositórios ou limitar o acesso a apenas repositórios privados ou a uma lista específica de repositórios.
Os proprietários da organização podem criar segredos ou variáveis no nível da organização.
-
Em GitHub, acesse a página principal da organização.
-
No nome da organização, clique em Settings. Caso não consiga ver a guia "Configurações", selecione o menu suspenso , clique em Configurações.
-
Na seção "Security" da barra lateral, selecione Secrets and variables e clique em Actions.
-
Clique na guia Variáveis.
-
Clique em Nova variável de organização.
-
No campo Nome, insira um nome para sua variável.
-
No campo Valor, insira o valor da variável.
-
Na lista suspensa Acesso do repositório, escolha uma política de acesso.
-
Clique em Adicionar variável.
Como usar contextos para acessar valores de variáveis
Os contextos são uma forma de acessar informações sobre execuções de fluxo de trabalho, variáveis, ambientes dos executores, trabalhos e etapas. Para obter mais informações, confira Referência de contextos. Há muitos outros contextos que você pode usar para uma série de finalidades nos seus fluxos de trabalho. Para obter detalhes sobre quando usar contextos específicos em um fluxo de trabalho, confira Referência de contextos.
Você pode acessar valores de variáveis de ambiente usando o contexto env
e valores de variáveis de configuração usando o contexto vars
.
Como usar o contexto env
para acessar valores de variáveis de ambiente
Além das variáveis de ambiente do executor, GitHub Actions permite que você defina e leia valores da chave env
usando contextos. As variáveis e os contextos do ambiente são destinados a serem usados em diferentes pontos do fluxo de trabalho.
As etapas run
em um fluxo de trabalho ou em uma ação referenciada são processadas por um executor. Como resultado, você pode usar variáveis de ambiente de executor aqui, usando a sintaxe apropriada para o shell que você está usando no executor; por exemplo, $NAME
para o shell bash em um executor do Linux ou $env:NAME
para o PowerShell em um executor do Windows. Na maioria dos casos, você também pode usar contextos, com a sintaxe ${{ CONTEXT.PROPERTY }}
, para acessar o mesmo valor. A diferença é que o contexto será interpolado e substituído por uma cadeia de caracteres antes que o trabalho seja enviado a um executor.
No entanto, não é possível usar variáveis de ambiente do executor em partes de um fluxo de trabalho que são processadas pelo GitHub Actions e não são enviadas ao executor. Em vez disso, você deve usar contextos. Por exemplo, um condicional if
, que determina se uma etapa ou um trabalho é enviado ao executor, sempre será processado pelo GitHub Actions. Portanto, você deve usar um contexto em uma instrução condicional if
para acessar o valor de uma variável.
name: Conditional env variable on: workflow_dispatch env: DAY_OF_WEEK: Monday jobs: greeting_job: runs-on: ubuntu-latest env: Greeting: Hello steps: - name: "Say Hello Mona it's Monday" if: ${{ env.DAY_OF_WEEK == 'Monday' }} run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!" env: First_Name: Mona
name: Conditional env variable
on: workflow_dispatch
env:
DAY_OF_WEEK: Monday
jobs:
greeting_job:
runs-on: ubuntu-latest
env:
Greeting: Hello
steps:
- name: "Say Hello Mona it's Monday"
if: ${{ env.DAY_OF_WEEK == 'Monday' }}
run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!"
env:
First_Name: Mona
Nessa modificação do exemplo anterior, introduzimos um if
condicional. A etapa de fluxo de trabalho agora só será executada se DAY_OF_WEEK
estiver definido como "Segunda-feira". Acessamos esse valor por meio da instrução condicional if
usando o contexto env
. O contexto env
não é necessário para as variáveis referenciadas no comando run
. Elas são referenciadas como variáveis de ambiente do executor e são interpoladas depois que o trabalho é recebido pelo executor. No entanto, poderíamos ter optado por interpolar essas variáveis antes de enviar o trabalho ao executor, usando contextos. A saída resultante seria a mesma.
run: echo "${{ env.Greeting }} ${{ env.First_Name }}. Today is ${{ env.DAY_OF_WEEK }}!"
Observação
Os contextos geralmente são indicados pelo sinal de cifrão e chaves, como ${{ context.property }}
. Em um condicional if
, o ${{
e o }}
são opcionais, mas se você usá-los, eles precisarão incluir toda a instrução de comparação, conforme mostrado acima.
Aviso
Ao criar fluxos de trabalho e ações, sempre considere se o código poderá executar entradas não confiáveis de possíveis invasores. Certos contextos devem ser tratados como entradas não confiáveis, uma vez que um invasor pode inserir seu próprio conteúdo malicioso. Para saber mais, confira Referência de uso seguro.
Como usar o contexto vars
para acessar valores de variáveis de configuração
As variáveis de configuração podem ser acessadas em todo o fluxo de trabalho usando o contexto vars
. Para saber mais, confira Referência de contextos.
Se uma variável de configuração não tiver sido definida, o valor retornado de um contexto referenciando a variável será uma cadeia de caracteres vazia.
O exemplo a seguir mostra o uso de variáveis de configuração com o contexto vars
em um fluxo de trabalho. Cada uma das variáveis de configuração a seguir foram definidas no nível do repositório, da organização ou do ambiente.
on: workflow_dispatch: env: # Setting an environment variable with the value of a configuration variable env_var: ${{ vars.ENV_CONTEXT_VAR }} jobs: display-variables: name: ${{ vars.JOB_NAME }} # You can use configuration variables with the `vars` context for dynamic jobs if: ${{ vars.USE_VARIABLES == 'true' }} runs-on: ${{ vars.RUNNER }} environment: ${{ vars.ENVIRONMENT_STAGE }} steps: - name: Use variables run: | echo "repository variable : $REPOSITORY_VAR" echo "organization variable : $ORGANIZATION_VAR" echo "overridden variable : $OVERRIDE_VAR" echo "variable from shell environment : $env_var" env: REPOSITORY_VAR: ${{ vars.REPOSITORY_VAR }} ORGANIZATION_VAR: ${{ vars.ORGANIZATION_VAR }} OVERRIDE_VAR: ${{ vars.OVERRIDE_VAR }} - name: ${{ vars.HELLO_WORLD_STEP }} if: ${{ vars.HELLO_WORLD_ENABLED == 'true' }} uses: actions/hello-world-javascript-action@main with: who-to-greet: ${{ vars.GREET_NAME }}
on:
workflow_dispatch:
env:
# Setting an environment variable with the value of a configuration variable
env_var: ${{ vars.ENV_CONTEXT_VAR }}
jobs:
display-variables:
name: ${{ vars.JOB_NAME }}
# You can use configuration variables with the `vars` context for dynamic jobs
if: ${{ vars.USE_VARIABLES == 'true' }}
runs-on: ${{ vars.RUNNER }}
environment: ${{ vars.ENVIRONMENT_STAGE }}
steps:
- name: Use variables
run: |
echo "repository variable : $REPOSITORY_VAR"
echo "organization variable : $ORGANIZATION_VAR"
echo "overridden variable : $OVERRIDE_VAR"
echo "variable from shell environment : $env_var"
env:
REPOSITORY_VAR: ${{ vars.REPOSITORY_VAR }}
ORGANIZATION_VAR: ${{ vars.ORGANIZATION_VAR }}
OVERRIDE_VAR: ${{ vars.OVERRIDE_VAR }}
- name: ${{ vars.HELLO_WORLD_STEP }}
if: ${{ vars.HELLO_WORLD_ENABLED == 'true' }}
uses: actions/hello-world-javascript-action@main
with:
who-to-greet: ${{ vars.GREET_NAME }}
Detectando o sistema operacional
Você pode escrever um arquivo de fluxo de trabalho individual que pode ser usado para diferentes sistemas operacionais usando a variável de ambiente RUNNER_OS
padrão e a propriedade de contexto correspondente ${{ runner.os }}
. Por exemplo, o fluxo de trabalho a seguir poderá ser executado com sucesso se você alterar o sistema operacional de macos-latest
para windows-latest
sem precisar alterar a sintaxe das variáveis de ambiente, que varia conforme o shell que está sendo usado pelo executor.
on: workflow_dispatch jobs: if-Windows-else: runs-on: macos-latest steps: - name: condition 1 if: runner.os == 'Windows' run: echo "The operating system on the runner is $env:RUNNER_OS." - name: condition 2 if: runner.os != 'Windows' run: echo "The operating system on the runner is not Windows, it's $RUNNER_OS."
on: workflow_dispatch
jobs:
if-Windows-else:
runs-on: macos-latest
steps:
- name: condition 1
if: runner.os == 'Windows'
run: echo "The operating system on the runner is $env:RUNNER_OS."
- name: condition 2
if: runner.os != 'Windows'
run: echo "The operating system on the runner is not Windows, it's $RUNNER_OS."
Neste exemplo, as duas instruções if
verificam a propriedade os
do contexto runner
para determinar o sistema operacional do executor. Os condicionais if
são processados pelo GitHub Actions, e somente as etapas em que a verificação resolve como true
são enviadas ao executor. Aqui, uma das verificações sempre será true
e a outra false
. Portanto, apenas uma dessas etapas será enviada ao executor. Assim que o trabalho for enviado ao executor, a etapa será executada e a variável de ambiente no comando echo
será interpolada com a sintaxe apropriada ($env:NAME
para o PowerShell no Windows e $NAME
para o Bash e o sh no Linux e no macOS). Neste exemplo, a instrução runs-on: macos-latest
significa que a segunda etapa será executada.
Passando valores entre etapas e trabalhos em um fluxo de trabalho
Se você gerar um valor em uma etapa de um trabalho, poderá usar o valor em etapas posteriores do mesmo trabalho atribuindo o valor a uma variável de ambiente nova ou existente e gravando isso no arquivo de ambiente GITHUB_ENV
. O arquivo de ambiente pode ser usado diretamente por uma ação ou em um comando do shell no arquivo de fluxo de trabalho usando a palavra-chave run
. Para saber mais, confira Comandos de fluxo de trabalho para o GitHub Actions.
Se você deseja passar um valor de uma etapa de um trabalho em um fluxo de trabalho para uma etapa de outro trabalho no fluxo de trabalho, você poderá definir o valor como uma saída de trabalho. Em seguida, você poderá fazer referência a saída desse trabalho a partir de uma etapa em outro trabalho. Para saber mais, confira Sintaxe de fluxo de trabalho para o GitHub Actions.
Próximas etapas
Para obter informações de referência, confira Referência de variáveis.