GitHub Actions 환경 변수 및 비밀키 시작하기

만약 GitHub Actions 환경 변수에 처음 접하셨다면, 아직은 이를 저장하는 방법을 배우지 않았을 것입니다. 그러나 가능한가요? 네!

이 튜토리얼에서는 GitHub Actions 환경 변수를 저장하는 다양한 방법과 필요할 때 사용할 수 있는 비밀을 배우게 될 것입니다.

준비되셨나요? 계속 읽어보세요!

전제 조건

이 튜토리얼은 Git이 설치된 모든 운영 체제에서 작동하며, Ubuntu OS가 이 튜토리얼에서 사용됩니다. 또한, GitHub Actions 환경 변수 저장소에 코드를 커밋하려면 Git 작업에 대한 기본 지식이 필요합니다.

GitHub Actions 환경 변수 설정

GitHub Actions 워크플로우를 자동화하는 경우, 워크플로에 환경 변수를 첨부해야 할 수 있습니다. 어떻게? 먼저 워크플로에서 사용할 사용자 정의 환경 변수를 env 키워드로 생성 및 지정해야 합니다.

1. .github/workflows이라는 디렉토리를 만들어 워크플로 파일을 저장하세요.

2. 그 다음, .github/workflows 디렉토리에 원하는 이름으로 파일을 만듭니다. 그러나 이 예제에서는 파일 이름이 main.yml로 지정됩니다. 아래 코드를 main.yml 파일에 복사하여 붙여넣으십시오.

아래 코드는 코드가 워크플로우를 트리거했을 때 API_KEY 환경 변수를 설정하고 표시합니다.

name: env_tutorial
## 푸시되거나 
## 주요 브랜치에서 풀 요청이있을 때 워크플로우를 트리거합니다.
on: [pull_request, push] 

env:
  ## 환경 변수 설정
  API_KEY: XXXXXXXXXXXX    

jobs:
  job1:
    ## 작업이 실행될 러너 유형을 설정합니다.
    ## 여기서는 최신 우분투에서 실행됩니다.
    runs-on: ubuntu-latest 
    steps:
      - name: step 1
        ## 환경 변수를 참조합니다.
        run: echo "The API key is:${{env.API_KEY}}"   

  job2:
    runs-on: ubuntu-latest
    steps:
      - name: step 1
        ## 환경 변수를 참조하는 또 다른 방법
        run: echo "The API key is:$API_KEY"

3. 코드를 커밋하고 GitHub 리포지토리에 푸시합니다.

git add .
git commit -m "update"
git push
Pushing updates to the GitHub Actions environment variables repository

4. 이제 웹 브라우저를 열고 GitHub에서 프로젝트로 이동합니다. Actions 탭을 클릭한 다음 현재 커밋을 클릭합니다.

GitHub가 워크플로우를 실행한 것을 보여주는 아래 이미지와 유사한 내용이 표시됩니다.

GitHub actions Environment variables for repository

5. 마지막으로, 작업1 또는 작업2 중 하나를 클릭하면 초기화한 환경 변수를 참조한 것을 확인할 수 있습니다.

Viewing Referenced Environment Variable (job1)
Viewing Referenced Environment Variable (job2)

작업을 위한 환경 변수 정의

이제 워크플로 파일 전체에서 환경 변수를 초기화했으므로 어떤 작업이든 환경 변수를 참조할 수 있습니다. 그러나 아마도 당신은 하나의 작업만 환경 변수를 참조하길 원할 수 있습니다. 그렇다면 작업 자체에 env 키워드를 넣어보세요.

1. main.yml 파일의 코드를 아래 코드로 교체합니다.

아래 코드는 특정 작업에 환경 변수를 넣을 때 다른 작업이 환경 변수를 참조할 수 없음을 보여줍니다.

name: env_tutorial
## 푸시 또는 
## 메인 브랜치에 풀 요청이 있을 때 워크플로를 트리거합니다
on: [pull_request, push] 

jobs:
  job1:
    ## 작업이 실행될 러너의 유형
    runs-on: ubuntu-latest 
    env:
      ## 환경 변수
      API_KEY: XXXXXXXXXXXX    
    steps:
      - name: step 1
        ## 환경 변수를 참조합니다
        run: echo "The API key is:${{env.API_KEY}}"   

  job2:
    runs-on: ubuntu-latest
    steps:
      - name: step 1
        ## 다른 방법으로 환경 변수를 참조합니다
        run: echo "The API key is:$API_KEY"  

2. 변경 사항을 커밋하고 코드에서 GitHub Actions 환경 변수로 작업을 푸시합니다.

3. 마지막으로, GitHub에서 프로젝트로 이동한 다음 작업1작업2를 모두 클릭하여 비교합니다.

  • 작업1 – 환경 변수를 완벽하게 참조한 것을 볼 수 있습니다.
  • 작업2 – API 키가 비어 있습니다.
Viewing Referenced Environment Variable (job1)
Viewing Referenced Environment Variable (job2)

단계별로 환경 변수 정의하기

이제 작업 내에서 환경 변수를 지정하는 방법을 배웠으므로, 단계별로도 동일한 작업을 수행할 수 있는 방법에 대해 궁금할 것입니다.

작업 내의 단계에 대해 작업과 동일한 방식으로 환경 변수를 지정합니다.

1. main.yml 파일의 코드를 아래 코드로 대체합니다.

아래 코드에서는 단계 1에서 환경 변수를 지정하지만 단계 2에서는 지정하지 않으며, 이후 단계에서 효과를 볼 수 있습니다.

name: env_tutorial
## 푸시되거나 메인 브랜치에 풀 요청이 있을 때 워크플로우를 트리거합니다.
## 작업이 실행될 실행기의 유형
on: [pull_request, push] 

jobs:
  job1:
    ## 단계 1의 환경 변수
    runs-on: ubuntu-latest 
    steps:
      - name: step 1
        env:
          ## 환경 변수를 참조합니다.
          API_KEY: XXXXXXXXXXXX    
        ## 환경 변수를 참조합니다.
        run: echo "The API key is:${{env.API_KEY}}"   
      - name: step 2
        
        run: echo "The API key is:${{env.API_KEY}}"   

2. 이제 변경 사항을 커밋하고 코드를 GitHub에 푸시합니다.

3. 마지막으로, GitHub Actions 환경 변수에서 프로젝트로 이동하고 작업1을 클릭합니다.

심지어 두 API 키를 동일한 작업(작업1)에서 두 단계 모두 참조하지만, 단계 2에서는 API 키(공백)를 평가할 수 없었습니다. 왜냐하면 코드에서 단계 2 내에서 환경 변수를 명시하지 않았기 때문입니다.

Setting environment variables for steps

GitHub Actions 환경 변수 및 Secrets를 통한 환경 변수 관리

하드 코딩 대신에 환경 변수를 안전하게 저장하고 싶다면, GitHub secrets를 사용할 수 있습니다. GitHub Actions 환경 변수는 시크릿에 넣은 값을 암호화하여 눈에 보이지 않고 읽을 수 없게 합니다.

이 방법으로 생성된 시크릿은 전체 워크플로우, 작업 및 단계에서 접근할 수 있으며 제한이 없습니다.

GitHub Secrets에 환경 변수를 저장하려면:

1. 먼저 이전 섹션에서와 같이 코드를 GitHub에 푸시합니다.

2. 그 다음, GitHub에서 프로젝트로 이동하여 설정 탭을 클릭합니다.

아래 탭에서 Secrets를 클릭하여 시크릿 추가를 시작합니다.

Storing environment variables in Secrets

3. 그 다음, 새 저장소 시크릿을 클릭하면 시크릿을 추가하는 세부 정보를 채울 수 있는 양식이 표시됩니다.

Creating new repository secret

4. 양식을 적절하게 채우고(이름) 시크릿 추가 버튼을 클릭하여 제출합니다. 이제 API_KEY가 GitHub Secrets에 저장되었습니다. 이 양식에서 GitHub는 시크릿으로 환경 변수를 안전하게 설정하여 GitHub Actions을 사용할 때 참조할 수 있습니다.

Filling name and value of the new secret

5. main.yml 파일을 편집하고 env 키워드를 secrets로 대체합니다.

아래에서는 이 ${{secrets.API_KEY}} 형식으로 API 키를 참조하는 것을 볼 수 있습니다. API 키 자체를 하드코딩하는 대신에 이 형식으로 참조합니다.

name: env_tutorial
## 워크플로우를 푸시하거나 풀 요청할 때 트리거합니다. 
## 메인 브랜치에서 작업이 실행될 러너 유형
on: [pull_request, push] 

jobs:
  job1:
    ## 환경 변수를 참조합니다.
    runs-on: ubuntu-latest 
    steps:
      - name: step 1
        ## 환경 변수를 참조합니다.
        run: echo "The API key is:${{secrets.API_KEY}}"   

  job2:
    runs-on: ubuntu-latest
    steps:
      - name: step 1
        ## 환경 변수를 참조합니다.
        run: echo "The API key is:${{secrets.API_KEY}}"  

6. 마지막으로 코드를 GitHub에 커밋하고 푸시하고, GitHub Actions 환경 변수에서 프로젝트로 이동합니다. 첫 번째 섹션을 참조하세요.

아래 이미지처럼 보이지만 GitHub은 secrets에 입력한 값을 암호화하기 때문에 실제 API_key를 볼 수 없습니다.

Displaying API key from GitHub Actions environment variables secrets

기본 GitHub 환경 변수 참조

GitHub에서 제공하는 몇 가지 기본 환경 변수를 사용하여 경로를 하드코딩하는 대신 저장소의 파일 시스템에 액세스할 수 있습니다. 기본 GitHub 환경 변수를 사용하면 GitHub이 제공하는 환경 변수를 동적으로 참조할 수 있습니다.

기본 환경 변수로 얻을 수 있는 일부 경로는 다음과 같습니다:

  • GITHUB_JOB – 현재 작업의 작업 ID를 제공합니다.
  • GITHUB_ACTION – 현재 액션의 ID를 제공합니다.
  • GITHUB_ACTION_PATH – 액션이 위치한 경로를 제공합니다.
  • GITHUB_ACTOR – 워크플로를 시작한 사람 또는 앱의 이름을 제공합니다. 예: GitHub 사용자 이름.
  • GITHUB_RUN_IDrun 명령의 고유 번호를 제공합니다.

main.yml 파일에 있는 내용을 아래 코드로 대체합니다. 아래 코드는 코드에서 명시된 기본 환경 변수를 표시합니다.

name: env_tutorial
## 주요 브랜치에서 푸시 또는 
## 풀 리퀘스트가 있는 경우 워크플로를 트리거합니다.
on: [pull_request, push] 

jobs:
  job1:
    ## 작업이 실행될 러너의 유형
    runs-on: ubuntu-latest 
    steps:
      - name: step 1
        run: |
          echo "The job_id is: $GITHUB_JOB"   # 기본 환경 변수를 참조합니다.
          echo "The id of this action is: $GITHUB_ACTION"   # 기본 환경 변수를 참조합니다.
          echo "The run id is: $GITHUB_RUN_ID" 
          echo "The GitHub Actor's username is: $GITHUB_ACTOR"
      - name: step 2
        run: |
          echo "The run id is: $GITHUB_RUN_ID"

코드 변경 사항을 커밋하고 GitHub에 푸시하면 GitHub Actions 환경 변수 프로젝트에서 작업을 확인할 수 있습니다. 아래 이미지와 같은 내용이 표시됩니다.

Referencing the Default GitHub environment variables

결론

이 튜토리얼을 통해 GitHub Actions 환경 변수를 관리하는 방법을 배웠습니다. 이제 환경 변수를 안전하게 저장하고 GitHub에서 제공하는 기본 환경 변수를 사용하는 기본 지식을 갖게 되었습니다.

지금은 GitHub Actions와 함께 이 새로운 지식을 어떻게 활용할 계획이신가요? 배포에 필요한 API 키를 저장하는 방법을 고려해 보실 수 있을까요?

Source:
https://adamtheautomator.com/github-actions-environment-variables/