본문 바로가기

리눅스

GitHub Actions 워크플로우에서 변수를 사용하는 방법

반응형

GitHub Actions 워크플로우에서 변수를 사용하는 방법

GitHub Actions에서 기본 환경 변수, Secrets, 그리고 Variables는 모두 자동화된 워크플로우에서 중요한 역할을 합니다. 각 요소는 서로 다른 목적을 가지고 있으며 워크플로우의 효율성과 보안을 강화하는 데 사용됩니다.

기능 용도 특징
기본 환경 변수 워크플로우 실행 환경 정보 제공 자동으로 제공됨
Secrets API 키, 비밀번호 등 민감한 정보 저장 및 관리 암호화되어 저장되며, 로그에 노출되지 않음
Variables 워크플로우 구성 값 저장 및 재사용 민감한 정보 저장은 지양

사용 예시

  • 기본 환경
echo "Repository: $GITHUB_REPOSITORY"
  • Secrets
uses: some-action@v1 with: api-key: ${{ secrets.API_KEY }}
  • Variables
env: DEPLOY_ENVIRONMENT: production, run: echo "Env: ${{ env.DEPLOY_ENVIRONMENT }}"

1. 기본 환경 변수 (Default Environment Variables)

GitHub Actions는 다양한 기본 환경 변수를 제공합니다. 이러한 변수들은 GitHub에서 자동으로 설정되며, 워크플로우 실행과 관련된 메타데이터를 포함합니다. 예를 들어, 커밋 해시, 리포지토리 이름, 워크플로우 실행 ID 등이 포함됩니다.

주요 기본 환경 변수

  • GITHUB_REPOSITORY : 리포지토리 이름 (owner/repo 형식)
  • GITHUB_SHA : 현재 커밋의 해시
  • GITHUB_REF : 현재 브랜치 또는 태그
  • GITHUB_RUN_ID : 워크플로우 실행의 고유 ID
  • GITHUB_RUN_NUMBER : 워크플로우 실행의 순차적 번호
  • GITHUB_EVENT_NAME : 트리거된 GitHub 이벤트 이름
  • GITHUB_ACTOR : 워크플로우를 트리거한 GitHub 사용자
  • GITHUB_WORKFLOW : 현재 실행 중인 워크플로우의 이름

예시(워크플로우)

name: Basic Environment Variables Example

on:
  push:
    branches:
      - main

jobs:
  print-env:
    runs-on: ubuntu-latest
    steps:
      - name: Print environment variables
        run: |
          echo "GitHub Actions: $GITHUB_ACTIONS"
          echo "GitHub Actor: $GITHUB_ACTOR"
          echo "GitHub Repository: $GITHUB_REPOSITORY"
          echo "GitHub SHA: $GITHUB_SHA"
          echo "GitHub Ref: $GITHUB_REF"
          echo "GitHub Workspace: $GITHUB_WORKSPACE"
          echo "GitHub Event Name: $GITHUB_EVENT_NAME"
          echo "GitHub Server URL: $GITHUB_SERVER_URL"
          echo "GitHub API URL: $GITHUB_API_URL"
          #echo "GitHub Run ID: $GITHUB_RUN_ID"

2. Secrets (비밀 정보)

Secrets는 민감한 정보(예: API 키, 비밀번호 등)를 GitHub Actions 워크플로우에서 안전하게 사용할 수 있게 합니다. Secrets는 리포지토리 설정에서 저장하고, 워크플로우에서 이를 참조하여 사용할 수 있습니다. GitHub은 비밀 정보를 암호화하여 저장하고, 워크플로우 실행 시에만 해당 정보를 사용할 수 있게 제한합니다.

GitHub에서 Secrets 설정

  • GitHub 리포지토리로 이동
  • Settings > Secrets and variables > Actions 선택
  • New repository secret 버튼 클릭
  • Secret 이름과 값을 입력하고 Add secret 클릭

예시(워크플로우)

name: Secrets Example

on: [push]

env:
  AWS_REGION: us-east-1

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ env.AWS_REGION }}

      - name: Use secret in script
        run: |
          echo "Using AWS ACCESS KEY ID : ${{ secrets.AWS_ACCESS_KEY_ID }}"
          echo "Using AWS REGION : ${{ env.AWS_REGION }}"
          echo "$AWS_ACCESS_KEY_ID"
          echo "$AWS_REGION"
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}

3. Variables (변수)

Variables는 GitHub Actions에서 워크플로우 또는 잡 수준에서 사용되는 사용자 정의 값을 나타냅니다. 변수는 워크플로우의 env, jobs..env, 또는 steps..env와 같은 구성을 통해 정의할 수 있습니다. 변수는 보통 기본 값이나 특정 환경에 따라 다르게 설정할 수 있습니다.

예시(워크플로우)

 

name: Variables Example

on:
  push:
    branches:
      - main

# 워크플로우 환경 변수 설정
env:
  NODE_ENV: production
  DB_HOST: localhost

jobs:
  build:
    runs-on: ubuntu-latest

    # 잡 환경 변수 설정
    env:
      BUILD_PATH: /usr/src/app

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Print environment variables
        run: |
          echo "NODE_ENV: $NODE_ENV"
          echo "DB_HOST: $DB_HOST"
    
      - name: Print build path
        run: echo "The build path is $BUILD_PATH"

      - name: Build step
        # 스텝 환경 변수 설정
        env:
          BUILD_MODE: release
        run: |
          echo "Building in $BUILD_MODE mode"

기본 환경 변수, Secrets, Variables 활용 예시

모든 것을 결합하여, 예를 들어 커밋을 빌드하고, AWS에 배포하면서 기본 환경 변수, Secrets, Variables를 모두 활용하는 예시를 보겠습니다.

name: Build, Test, and Deploy

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      NODE_ENV: production

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Set up Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '14'

      - name: Install dependencies
        run: npm install

      - name: Run tests
        run: npm test

      - name: Build Docker image
        run: |
          docker build -t my-app:$GITHUB_SHA .

  deploy:
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: production
      url: ${{ secrets.PRODUCTION_URL }}

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Deploy to AWS
        run: |
          aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws configure set default.region ${{ secrets.AWS_REGION }}
          aws s3 sync ./build s3://${{ secrets.AWS_BUCKET_NAME }}/ --delete

 

이 세 가지 요소를 적절히 결합하여 강력하고 안전하며 유연한 CI/CD 파이프라인을 구축할 수 있습니다.

 

참고URL

GitHub Docs : GitHub Actions - Default environment variables

 

728x90
반응형