Ympäristömuuttujien tutkiminen

Valmis

Ympäristömuuttujat ovat välttämättömiä joustavien ja ylläpidettävien GitHub Actions -työnkulkujen luomisessa. Niiden avulla voit määrittää käyttäytymistä, siirtää tietoja vaiheiden välillä ja mukauttaa työnkulkuja eri ympäristöihin ilman arvojen kovakoodausta.

Ympäristömuuttujien ymmärtäminen GitHub Actionsissa

Ympäristömuuttujien avulla voit tallentaa ja käyttää määritystietoja työnkuluissasi. Ne voidaan asettaa eri laajuuksiin ja käyttää koko automaatioputkessa johdonmukaisen ja turvallisen kokoonpanon hallinnan takaamiseksi.

Muuttujien vaikutusalueet ja hierarkia

GitHub Actions tukee ympäristömuuttujia useilla tasoilla:

Työnkulun taso: Käytettävissä kaikissa työnkulun töissä Työtaso: Käytettävissä tietyn työn kaikissa vaiheissa
Vaihetaso: Käytettävissä vain kyseiselle vaiheelle

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"

Sisäiset GitHub-ympäristömuuttujat

GitHub tarjoaa automaattisesti lukuisia ympäristömuuttujia, joissa on tietoja työnkulun kontekstista:

Olennaiset sisäänrakennetut muuttujat

Muuttuja Description Esimerkkiarvo
GITHUB_WORKFLOW Työnkulun nimi "CI Pipeline"
GITHUB_ACTION Toimen yksilöllinen tunniste "__actions_checkout"
GITHUB_REPOSITORY Arkiston nimi (omistaja/säilö) "microsoft/vscode"
GITHUB_REF Haaran tai tunnisteen viite "refs/heads/main"
GITHUB_SHA Vahvista SHA, joka käynnisti työnkulun "ffac537e6cbb..."
GITHUB_ACTOR Työnkulun käynnistäneen käyttäjän käyttäjätunnus "octocat"
GITHUB_EVENT_NAME Työnkulun käynnistänyt tapahtuma "push"
RUNNER_OS Juoksijan käyttöjärjestelmä "Linux"

Kehittyneet sisäiset muuttujat

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"

Tärkeitä nimeämissääntöjä:

  • Sisäiset muuttujat käyttävät GITHUB_ etuliitettä
  • Et voi luoda omia muuttujia, GITHUB_ joiden etuliite on
  • Muuttujien nimissä kirjainkoolla on merkitystä useimmissa yhteyksissä

Käytännön ympäristön muuttujakuviot

Määritysten hallinta

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 .

Dynaamisen muuttujan luonti

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"

Usean alustan kokoonpano

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 }}

Ympäristömuuttujien suojauksen parhaat käytännöt

Arkaluonteisten tietojen käsittely

# 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!

Ympäristömuuttujien validointi

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

Edistyneet tekniikat

Ehdolliset ympäristömuuttujat

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

Ympäristömuuttujien mallit

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 }}

Ympäristömuuttujat ovat tehokas työkalu joustavien, ylläpidettävien ja turvallisten GitHub Actions -työnkulkujen luomiseen. Käytä niitä strategisesti välttääksesi kovakoodattuja arvoja ja mahdollistaaksesi helpon konfiguraation hallinnan eri ympäristöissä.

Täydellinen dokumentaatio ympäristömuuttujista on kohdassa Ympäristömuuttujat GitHub Actionsissa.