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
'리눅스' 카테고리의 다른 글
NGINX에서 리다이렉트할 때 클라이언트가 보내는 HTTP 메서드를 그대로 유지하는 방법 (0) | 2025.01.20 |
---|---|
RackTables의 업그레이드를 위해 제공되는 upgrade.php 스크립트를 사용하는 방법 (0) | 2025.01.20 |
Docker 실험적 기능(Docker Experimental Features) (0) | 2025.01.19 |
MySQL 데이터베이스 마이그레이션하는 방법 (0) | 2025.01.18 |
우분투에서 RackTables를 설치하는 방법 (1) | 2025.01.18 |