Logo

GitHub Actions 첫 워크플로우 생성해보기

지난 포스팅에서는 GitHub Actions를 이해하기 위해서 필요한 핵심 개념에 대해서 알아보았습니다. 이번 포스팅에서는 실제로 GitHub의 저장소에 매우 간단한 워크플로우를 하나 추가하고 함께 테스트를 해보겠습니다.

GitHub 저장소 생성

GitHub 계정이 있으시다면 누구나 무료로 GitHub 워크플로우를 사용해볼 수 있습니다 🤗 실습을 위해서 본인 GitHub에 계정에 github-actions-first-workflow라는 이름으로 새로운 코드 저장소(repository)를 하나를 만들고 시작하겠습니다.

워크플로우 파일 생성

워크플로우는 YAML 파일을 통해 설정하는데요. 반드시 .github/workflows 폴더 아래에 YAML 파일이 위치해야 GitHub에서 워크플로우로 인식을 하도록 약속이 되어 있습니다.

따라서 실습을 위해서 생성한 저장소에 .github/workflows라는 폴더를 만든 후, 그 안에 first.yml라는 이름의 YAML 파일을 하나 생성합니다. 그리고 YAML 파일 제일 위에 name 키를 통해서 해당 워크플로우의 이름을 설정해주겠습니다.

.github/workflows/first.yml
name: Our First Workflow

name 키를 생략하면 파일 경로가 워크플로우 이름으로 사용되기 때문에 반드시 설정해줘야하는 것은 아니지만 name키를 명시하여 워크플로우에 알맞은 이름을 부여해주는 것이 일반적입니다. 왜냐하면 하나의 코드 저장소에는 여러 개의 워크플로우를 추가할 수 있어서 워크플로우의 이름이 모호하면 여러 워크플로우를 빠르게 식별하기가 어렵기 때문입니다.

워크플로우 실행 조건 설정

다음으로 필수 항목인 on 키를 통해서 워크플로우가 언제 실행되야할지 설정해줘야 합니다.

수동으로 워크플로우를 실행할 수도 있지만 일반적으로 코드 저장소에서 어떤 이벤트가 발생할 때 마다 워크플로우를 자동으로 촉발(trigger)하도록 설정하는 경우가 대부분입니다.

실습에서는 가장 많이 사용되는 이벤트 중 하나인 push 이벤트를 사용해보겠습니다.

.github/workflows/first.yml
name: Our First Workflow
on: push

이렇게 설정을 해주면 누군가가 코드 저장소에 변경 사항을 푸시(push)하거나, pull request가 머지(merge)될 때 마다 해당 워크플로우가 자동으로 실행되게 됩니다.

워크플로우 작업 내용 명시

워크플로우에서 어떤 작업들을 수행할지는 jobs 키를 통해서 설정하는데요. jobs 키에는 여러 개의 작업을 작업 식별자(ID)와 작업 세부 내용 간의 맵핑(mapping) 형태로 표시를 합니다.

예를 들어, 콘솔에 Hello, GitHub Actions!를 출력하는 echo라는 식별자를 가진 작업을 하나 추가해보겠습니다.

.github/workflows/first.yml
name: Our First Workflow
on: push
jobs:  echo:    runs-on: ubuntu-latest    steps:      - run: echo 'Hello, GitHub Actions!'

작업 세부 내용에는 필수적으로 runs-on 키를 통해 해당 작업이 어느 환경에서 돌아가는지, 그리고 step 키를 통해 순차적인 수행할 작업 단계를 적어도 하나는 명시해야합니다. 따라서 위 설정 내용을 해석해보면 “최신 우분투 서버에서 echo 'Hello, GitHub Actions!' 명령어를 실행하라”가 됩니다.

워크플로우 테스트

지금까지 작성한 .github/workflows/first.yml 파일을 코드 저장소에 푸시(push)하면 GitHub는 해당 워크플로우를 자동으로 즉시 실행할 것입니다.

이제 GitHub의 코드 저장소 화면에서 Actions 탭을 클릭하면 Our First Workflow라는 워크플로우의 실행 결과를 바로 확인할 수 있을텐데요.

Jobs
echo

(경우에 따라 워크플로우가 아직 실행 중일 수도 있지만 금방 실행이 끝날 것입니다.)

여기서 실행 결과를 선택한 후 echo 작업을 선택해보면 다음과 같이 로그가 나올 것입니다.

Log
☑️ Set up Job
☑️ Run echo 'Hello, GitHub Actions!'
☑️ Complete Job

이 화면에서 두 번째 단계를 클릭해보시면 다음과 같이 콘솔에 원하던 내용이 출력된 것을 확인하실 수 있으실 겁니다.

Log
☑️ Set up Job
☑️ Run echo 'Hello, GitHub Actions!'
▶ Run echo 'Hello, GitHub Actions!'Hello, GitHub Actions!☑️ Complete Job

워크플로우 추가 작업 명시

하나의 워크플로우에서 여러 개의 작업이 동시에 또는 순차적으로 처리되도록 설정할 수가 있는데요.

기존 작업 아래에 pwd-ls라는 작업 식별자를 갖는 새로운 작업을 추가해볼까요? 이번에는 현재 작업 디렉토리의 경로를 출력한 후 그 경로 내 파일들을 나열해보겠습니다.

.github/workflows/first.yml
name: Our First Workflow
on: push
jobs:
  echo:
    runs-on: ubuntu-latest
    steps:
      - run: echo 'Hello, GitHub Actions!'
  pwd-ls:    name: PWD & LS    runs-on: ubuntu-latest    steps:      - name: Print working directory        run: pwd      - name: List files        run: ls -al

이번에는 name 키도 사용하여 작업(job)의 이름과 각 작업 단계(step)에 이름을 부여해보았습니다. 마찬가지로 필수 설정은 아니지만 워크플로우가 복잡해지면 도움이 되겠죠?

이제 Actions 탭에 가서 방금 실행된 워크플로우를 선택하면 기존에 echo 작업뿐만이 아니라 PWD & LS 작업이 추가로 보일 것입니다.

Jobs
echo
PWD & LS

이 추가된 작업을 선택하면 다음과 같은 로그가 나올 것입니다. 명령어 대신에 우리가 직접 부여한 이름이 작업 단계의 이름으로 표시되는 것을 확인할 수 있죠? 😉

Log
☑️ Set up Job
☑️ Print working directory
☑️ List files
☑️ Complete Job

여기서 각 작업 단계를 선택해보면 어떤 명령어가 수행되었고 콘솔에 무엇이 출력이 되었는지 확인할 수 있습니다.

Log
☑️ Set up Job
☑️ Print working directory
▶ Run pwd/home/runner/work/github-actions-workflows/github-actions-workflows☑️ List files
▶ Run ls -altotal 8drwxr-xr-x 2 runner docker 4096 Apr 18 21:20 .drwxr-xr-x 3 runner docker 4096 Apr 18 21:20 ..☑️ Complete Job

실습 코드 저장소

본 포스팅에서 작성한 YAML 파일과 워크플로우 실행 결과는 아래 코드 저장소에서 확인하실 수 있습니다.

마치면서

이상으로 정말 간단한 GitHub Actions의 워크플로우를 하나 작성하고 함께 실습 코드 저장소에서 테스트해 보았습니다. 다음 포스팅에서는 이 기초적인 워크플로우의 골격에 살을 더 붙여나가면서 좀 더 복잡한 워크플로우를 만들어보겠습니다.