개발을 하다보면 세팅이 불가피한 기능 또는 프로그램을 사용할 때가 있다. 예를 들어 PostgreSQL 같은 데이터베이스에 연결 할 때 HOST, PORT, USERNAME, PASSWORD 같은 환경 변수를 세팅해야 할 때가 있다. 또는 job을 이용해서 어플리케이션을 빌드한 다음에 내가 작성한 script를 돌리고 싶을 때도 있다.

이렇게 커스텀하게 GitHub Actions를 다뤄보는 방법에 대해 알아보도록 하자.


환경 변수

일단 각 workflows가 실행 될때 마다 GitHub Actions가 가지고 있는 기본 환경 변수가 제공 된다.

물론 개발자가 원하는 환경 변수를 설정 할 수도 있다. 환경 변수는 step, job, 그리고 workflow 전체의 범위로 사용 할 수 있다. 아래 예제는 step과 job에 환경 변수를 사용한 경우다.

jobs:
  weekday_job:
    runs-on: ubuntu-latest
    env:
      DAY_OF_WEEK: Mon
    steps:
      - name: "Hello world when it's Monday"
        if: env.DAY_OF_WEEK == 'Mon'
        run: echo "Hello $FIRST_NAME $middle_name $Last_Name, today is Monday!"
        env:
          FIRST_NAME: Mona
          middle_name: The
          Last_Name: Octocat

여기서 DAY_OF_WEEK 변수와 FIRST_NAME 변수가 사용되는 부분을 보자. DAY_OF_WEEK 변수는 env.DAY_OF_WEEK 형식으로 작성되었다. 왜 그럴까?

run 키로 실행하기 되는 명렁어, 즉 run 키로 읽혀지는 환경 변수는 runner 운영체제에서 읽혀진다. job이 runner로 보내진 뒤 변수들이 대체된다.

env.DAY_OF_WEEK으로 표현 된 이유는 if 키에 있다. if 키로 읽히는 변수는 workflow가 runner로 보내지기 전 처리 될 때 대체되어야 하기 때문에 env를 사용한 것이다.


위의 예제는 명령어를 위한 환경 변수였다면, 아래처럼 actions를 위해 환경 변수를 설정할 수도 있다.

- name: Create Sentry release
  uses: getsentry/action-release@v1
  env:
    SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
    SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
    SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}

Secret 환경 변수

위의 코드에서 ${{ secrets.SENTRY_ORG }} 표현을 확인 할 수 있다. 어플리케이션을 만들다 보면 외부에 노출이 되면 안되는 민감한 정보(API_TOKEN, PASSWORD 등)들이 있다. GitHub Actions는 이런 정보를 GitHub에 secrets로 저장해놓고 workflows에서 환경 변수로 사용할 수 있게 해준다.

  • 참고: ${{ <expression> }}은 변수를 세팅하거나 context에 접근하기 위한 표현식이다. 위의 예제에서는 context에 접근하고 환경 변수를 세팅하기 위해 사용 되었다.(문서)

secrets 환경 변수는 아래의 사진에 표시 된 레포지토리의 Settings 탭을 들어간 다음에

왼쪽 사이드 바의 Secrets 항목을 클릭 후 만들면 된다.


with 키워드

Actions들을 보다보면 env 느낌처럼 with 키워드를 써서 변수들을 정의 해놓은 모습을 볼 수 있다.

jobs:
  my_first_job:
    steps:
      - name: My first step
        uses: actions/hello_world@main
        with:
          first_name: Mona
          middle_name: The
          last_name: Octocat

with은 actions에 의해 정의된 파라미터들을 나열해주는 키워드이다. 위의 예제에서 first_name, middle_name, last_nameactions/hello_world@main을 위한 파라미터라는 뜻이다. 파라미터들은 대문자로 변경되고 INPUT_ 접두어가 붙여져서 INPUT_FIRST_NAME이라는 환경 변수로 변환 된다.


이번 글을 마치며

현재까지 내용으로 GitHub Actions를 사용 할 수 있을 것 같아, 개인적으로 개발하고 있는 오픈 소스 프로젝트에 GitHub Actions를 적용할 예정이다. 적용하면서 Learn GitHub Actions를 참고하게 되면 시리즈를 이어나가도록 하겠다.


Reference