Examinar variáveis de ambiente
As variáveis de ambiente são essenciais para criar fluxos de trabalho flexíveis e manteneveis do GitHub Actions. Elas permitem que você configure o comportamento, passe dados entre etapas e adapte fluxos de trabalho a ambientes diferentes sem valores de codificação.
Noções básicas sobre variáveis de ambiente no GitHub Actions
As variáveis de ambiente fornecem uma maneira de armazenar e acessar dados de configuração em seus fluxos de trabalho. Eles podem ser definidos em escopos diferentes e usados em todo o pipeline de automação para gerenciamento de configuração consistente e seguro.
Escopos e hierarquia de variáveis
O GitHub Actions dá suporte a variáveis de ambiente em vários níveis:
Nível de fluxo de trabalho: disponível para todos os trabalhos no nível de trabalho do fluxo de trabalho: disponível para todas as etapas em um trabalho específico
Nível da etapa: disponível apenas para essa etapa específica
name: Multi-level Environment Variables
# Workflow-level variables
env:
NODE_VERSION: "20"
BUILD_CONFIGURATION: "Release"
jobs:
build:
runs-on: ubuntu-latest
# Job-level variables
env:
DATABASE_NAME: "production_db"
API_TIMEOUT: "30000"
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: Run tests with custom config
run: npm test
# Step-level variables
env:
TEST_ENVIRONMENT: "ci"
LOG_LEVEL: "debug"
Variáveis de ambiente internas do GitHub
O GitHub fornece automaticamente várias variáveis de ambiente com informações sobre o contexto do fluxo de trabalho:
Variáveis internas essenciais
| Variable | Description | Exemplo de valor |
|---|---|---|
GITHUB_WORKFLOW |
Nome do fluxo de trabalho | "CI Pipeline" |
GITHUB_ACTION |
Identificador exclusivo da ação | "__actions_checkout" |
GITHUB_REPOSITORY |
Nome do repositório (proprietário/repositório) | "microsoft/vscode" |
GITHUB_REF |
Referência de branch ou marca | "refs/heads/main" |
GITHUB_SHA |
Confirmar SHA que disparou o fluxo de trabalho | "ffac537e6cbb..." |
GITHUB_ACTOR |
Nome de usuário do usuário que disparou o fluxo de trabalho | "octocat" |
GITHUB_EVENT_NAME |
Evento que disparou o fluxo de trabalho | "push" |
RUNNER_OS |
Sistema operacional do executor | "Linux" |
Variáveis internas avançadas
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Display workflow context
run: |
echo "Workflow: $GITHUB_WORKFLOW"
echo "Repository: $GITHUB_REPOSITORY"
echo "Branch: ${GITHUB_REF#refs/heads/}"
echo "Commit: $GITHUB_SHA"
echo "Actor: $GITHUB_ACTOR"
echo "Event: $GITHUB_EVENT_NAME"
echo "Runner OS: $RUNNER_OS"
Regras de nomenclatura importantes:
- Variáveis internas usam o
GITHUB_prefixo - Você não pode criar variáveis personalizadas com o
GITHUB_prefixo - Os nomes de variáveis diferenciam maiúsculas de minúsculas na maioria dos contextos
Padrões práticos de variável de ambiente
Gerenciamento de configuração
name: Environment-specific Deployment
env:
# Global configuration
APP_NAME: "my-awesome-app"
DOCKER_REGISTRY: "ghcr.io"
jobs:
deploy-staging:
if: github.ref == 'refs/heads/develop'
runs-on: ubuntu-latest
env:
ENVIRONMENT: "staging"
API_URL: "https://api.staging.example.com"
DATABASE_TIER: "basic"
steps:
- name: Deploy to staging
run: |
echo "Deploying $APP_NAME to $ENVIRONMENT"
echo "API URL: $API_URL"
docker build -t $DOCKER_REGISTRY/$APP_NAME:$GITHUB_SHA .
deploy-production:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
env:
ENVIRONMENT: "production"
API_URL: "https://api.example.com"
DATABASE_TIER: "premium"
steps:
- name: Deploy to production
run: |
echo "Deploying $APP_NAME to $ENVIRONMENT"
echo "API URL: $API_URL"
docker build -t $DOCKER_REGISTRY/$APP_NAME:latest .
Criação de variável dinâmica
steps:
- name: Generate build metadata
id: metadata
run: |
BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
BUILD_NUMBER=$GITHUB_RUN_NUMBER
VERSION_TAG=${GITHUB_REF#refs/tags/}
echo "BUILD_DATE=$BUILD_DATE" >> $GITHUB_ENV
echo "BUILD_NUMBER=$BUILD_NUMBER" >> $GITHUB_ENV
echo "VERSION_TAG=$VERSION_TAG" >> $GITHUB_ENV
- name: Use generated variables
run: |
echo "Build Date: $BUILD_DATE"
echo "Build Number: $BUILD_NUMBER"
echo "Version: $VERSION_TAG"
Configuração de várias plataformas
jobs:
build:
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
include:
- os: ubuntu-latest
BUILD_COMMAND: "make build-linux"
PACKAGE_EXT: ".deb"
- os: windows-latest
BUILD_COMMAND: "msbuild /p:Configuration=Release"
PACKAGE_EXT: ".msi"
- os: macos-latest
BUILD_COMMAND: "xcodebuild -configuration Release"
PACKAGE_EXT: ".dmg"
runs-on: ${{ matrix.os }}
env:
BUILD_COMMAND: ${{ matrix.BUILD_COMMAND }}
PACKAGE_EXT: ${{ matrix.PACKAGE_EXT }}
steps:
- name: Build application
run: ${{ env.BUILD_COMMAND }}
Práticas recomendadas de segurança para variáveis de ambiente
Tratamento de dados confidenciais
# DON'T: Store secrets in plain environment variables
env:
DATABASE_PASSWORD: 'super-secret-password' # Visible in logs!
# DO: Use GitHub Secrets for sensitive data
env:
DATABASE_HOST: 'db.example.com'
DATABASE_PORT: '5432'
DATABASE_USER: 'app_user'
DATABASE_PASSWORD: ${{ secrets.DATABASE_PASSWORD }} # Secure!
Validação de variável de ambiente
steps:
- name: Validate required environment variables
run: |
required_vars=("API_URL" "DATABASE_HOST" "ENVIRONMENT")
for var in "${required_vars[@]}"; do
if [ -z "${!var}" ]; then
echo "ERROR: Required environment variable $var is not set"
exit 1
else
echo "OK: $var is set"
fi
done
Técnicas avançadas
Variáveis de ambiente condicional
steps:
- name: Set environment-specific variables
run: |
if [ "$GITHUB_REF" = "refs/heads/main" ]; then
echo "LOG_LEVEL=info" >> $GITHUB_ENV
echo "CACHE_TTL=3600" >> $GITHUB_ENV
elif [ "$GITHUB_REF" = "refs/heads/develop" ]; then
echo "LOG_LEVEL=debug" >> $GITHUB_ENV
echo "CACHE_TTL=300" >> $GITHUB_ENV
else
echo "LOG_LEVEL=warn" >> $GITHUB_ENV
echo "CACHE_TTL=60" >> $GITHUB_ENV
fi
Modelagem de variável de ambiente
env:
APP_VERSION: ${{ github.ref_name }}
BUILD_ID: ${{ github.run_number }}
FULL_VERSION: ${{ github.ref_name }}-build.${{ github.run_number }}
CONTAINER_TAG: ${{ github.repository }}:${{ github.ref_name }}
As variáveis de ambiente são uma ferramenta poderosa para criar fluxos de trabalho flexíveis, manteneveis e seguros do GitHub Actions. Use-os estrategicamente para evitar valores codificados e habilitar o gerenciamento de configuração fácil em ambientes diferentes.
Para obter a documentação completa sobre variáveis de ambiente, consulte Variáveis de ambiente no GitHub Actions.