워크플로 구문 기초

LinuxBeginner
지금 연습하기

소개

GitHub Actions 는 GitHub 에 내장된 워크플로 자동화 시스템입니다. push, pull request 또는 수동 트리거와 같은 리포지터리 이벤트에 반응하여 정의된 작업을 자동으로 실행합니다.

이 자동화 기능으로 코드를 테스트하고, 아티팩트를 빌드하고, 애플리케이션을 배포하는 등 다양한 DevOps 작업을 수행할 수 있습니다. 이러한 명령 목록을 워크플로라고 합니다.

더 넓은 관점에서 워크플로는 파이프라인 정의입니다. 리포지터리 이벤트를 반복 가능한 자동화로 변환하므로, 매번 한 사람이 순서를 정확하게 기억하고 실행해야 하는 상황을 없애줍니다.

이 실습에서는 이 로봇을 위한 첫 번째 작업 지침서 (워크플로) 를 직접 작성합니다. 모든 워크플로를 구성하는 다음 네 가지 기본 요소를 배웁니다.

  • 트리거: 로봇이 언제 깨어나야 하나요? (예: 코드를 push 할 때)
  • 작업: 로봇이 수행해야 할 주요 작업은 무엇인가요?
  • 러너: 로봇이 작업에 사용할 컴퓨터는 무엇인가요?
  • 단계: 로봇이 실행해야 할 구체적인 명령은 무엇인가요?

이 실습을 마치면 코드를 업데이트할 때마다 인사말을 자동으로 출력하는 작동하는 파이프라인을 갖게 됩니다.

사전 요구 사항

GitHub Actions 가 중요한 이유는 현대적인 소프트웨어 제공 방식이 수동으로 클릭하고 단계를 기억하는 작업보다 반복 가능한 자동화에 의존하기 때문입니다.

리포지터리 만들기

GitHub Actions 를 사용하려면 먼저 GitHub 에 프로젝트가 있어야 합니다. 이 모듈에서는 새 리포지터리를 만듭니다. 이 리포지터리는 여러 실습에서 계속 사용하므로 이름 지정 규칙을 주의해서 따라야 합니다.

웹 브라우저를 열고 GitHub 에 로그인합니다. GitHub 페이지 오른쪽 위에 있는 + 아이콘을 클릭한 다음 New repository를 선택합니다.

"Repository name" 필드에 github-actions-basics를 입력합니다. 리포지터리를 Public으로 설정하면 무료로 쉽게 사용할 수 있습니다. Add a README file 확인란을 선택하여 파일과 함께 리포지터리를 초기화합니다. 마지막으로 Create repository 버튼을 클릭합니다.

새 리포지터리 만들기

이제 클라우드 (GitHub) 에 프로젝트가 만들어졌으므로, 작업을 수행할 수 있도록 이 실습 환경에 프로젝트 사본을 가져와야 합니다. 이 과정을 **복제 (cloning)**라고 합니다.

아래 터미널에서 git clone 명령을 사용합니다. your-username을 실제 GitHub 사용자 이름으로 바꿔야 합니다.

cd ~/project
git clone https://github.com/your-username/github-actions-basics.git

복제가 완료되면 github-actions-basics라는 새 폴더가 표시됩니다. 작업을 시작할 수 있도록 이 디렉터리로 이동합니다.

cd ~/project/github-actions-basics

GitHub Actions 는 지침을 찾는 위치에 엄격한 규칙을 적용합니다. GitHub Actions 는 .github이라는 특정 숨김 폴더 안에 있는 workflows 하위 폴더만 확인합니다. 워크플로 파일을 다른 위치에 두면 로봇 도우미가 해당 파일을 무시합니다.

필요한 디렉터리 구조를 만듭니다. -p 플래그를 사용하면 상위 디렉터리와 하위 디렉터리가 없을 경우 한 번에 만들 수 있습니다.

mkdir -p .github/workflows

다음으로 새 폴더 안에 main.yml이라는 빈 파일을 만듭니다. 이 파일에 지침을 작성합니다.

touch .github/workflows/main.yml

파일을 재귀적으로 나열하여 설정이 올바른지 확인할 수 있습니다. .github 폴더 안에 workflows가 있고, 그 안에 main.yml이 표시되어야 합니다.

ls -R .github

트리거 정의하기

워크플로 파일은 YAML로 작성합니다. YAML 은 들여쓰기 (공백) 를 사용해 정보를 정리하는 간단한 텍스트 형식입니다. 개요에서 들여쓰기를 사용하는 방식과 비슷합니다.

모든 워크플로에는 이름과 트리거가 필요합니다. 트리거는 로봇이 언제 작업을 시작할지 알려줍니다. 트리거가 없으면 워크플로는 실행되지 않습니다. 여기서는 리포지터리에 새 코드를 push 할 때마다 로봇이 깨어나도록 설정합니다.

이벤트 기반 모델은 CI/CD 시스템의 핵심 개념 중 하나입니다. 파이프라인은 누군가 수동으로 스크립트를 실행할 때까지 기다리는 대신 소프트웨어 수명 주기의 변경 사항에 반응합니다.

빈 main.yml 파일을 nano 텍스트 편집기로 엽니다.

nano .github/workflows/main.yml

파일에 다음 내용을 입력합니다.

name: First Workflow
on: push

name 키워드는 GitHub 에 표시되는 워크플로 레이블을 지정합니다. on: push 줄은 특별한 명령입니다. 이는 "push 이벤트가 발생하면 실행하라"는 의미입니다.

변경 사항을 저장하고 편집기를 종료하려면 Ctrl+X를 누른 다음 Y, Enter를 차례로 누릅니다.

작업과 러너 정의하기

이제 로봇이 언제 깨어날지는 알게 되었으므로, 어디에서 작업할지 알려줘야 합니다. 이를 **작업 (Job)**과 러너 (Runner) 정의라고 합니다.

**작업 (Job)**은 여러 작업을 하나로 묶은 단위입니다. "코드 테스트"와 "앱 배포"처럼 여러 작업을 만들 수도 있지만, 여기서는 하나만 만듭니다.

**러너 (Runner)**는 작업을 실행하기 위해 GitHub 가 제공하는 서버입니다. 로봇 도우미가 작업하는 컴퓨터라고 생각하면 됩니다. 여기서는 ubuntu-latest를 사용합니다. 이는 GitHub 가 최신 버전의 Ubuntu Linux 를 실행하는 새 컴퓨터를 제공한다는 뜻입니다.

새 러너가 중요한 이유는 워크플로 작업을 재현할 수 있어야 하기 때문입니다. 각 실행은 이전에 수동으로 설정한 작업의 잔여 상태에 의존하지 않고 깨끗한 환경에서 시작합니다.

main.yml 파일을 다시 엽니다.

nano .github/workflows/main.yml

파일 끝에 다음 줄을 추가합니다. 공백에 특히 주의합니다. YAML 에서는 들여쓰기가 매우 중요합니다. first-job은 공백 두 칸, runs-on은 공백 네 칸을 사용해야 합니다.

jobs:
  first-job:
    runs-on: ubuntu-latest

이제 전체 파일이 아래 블록과 같아야 합니다. 구조가 정확히 일치하는지 확인합니다.

name: First Workflow
on: push

jobs:
  first-job:
    runs-on: ubuntu-latest

편집기를 저장하고 종료합니다 (Ctrl+X, Y, Enter).

단계 추가 및 push

이제 "언제"(push 할 때) 와 "어디에서"(ubuntu-latest) 를 정했습니다. 다음은 가장 중요한 "무엇을"에 해당하는 부분입니다. 이는 단계 (Steps) 섹션에 정의합니다.

단계는 로봇이 실제로 실행할 명령입니다. 이 첫 번째 실습에서는 로봇에게 인사말을 출력하도록 합니다. 표준 Linux 명령을 실행하기 위해 run 키워드를 사용합니다.

마지막으로 main.yml을 다시 엽니다.

nano .github/workflows/main.yml

first-job 아래에 steps 섹션을 추가합니다. steps:가 runs-on:과 세로로 맞춰지는지 확인합니다.

steps:
  - name: Print greeting
    run: echo "Hello World from LabEx"

하이픈 -은 목록 항목을 나타냅니다. 여기서는 작업에 사용할 단계를 나열합니다.

최종 파일은 다음과 정확히 같아야 합니다.

name: First Workflow
on: push

jobs:
  first-job:
    runs-on: ubuntu-latest
    steps:
      - name: Print greeting
        run: echo "Hello World from LabEx"

편집기를 저장하고 종료합니다.

이제 작업 지침서가 완성되었으므로 GitHub 로 보내야 합니다. 로봇은 로컬 컴퓨터의 코드가 아니라 GitHub 에 있는 코드만 확인합니다.

변경 사항을 저장하고 업로드하기 위해 표준 Git 명령을 실행합니다.

git add .
git commit -m "Add my first workflow"
git push

시스템에서 GitHub 사용자 이름과 비밀번호를 입력하라고 요청합니다.

중요: 비밀번호 인증 지원이 제거되었다는 오류가 표시되면 계정 비밀번호 대신 **Personal Access Token(PAT)**을 사용해야 합니다. GitHub 의 Settings -> Developer settings -> Personal access tokens 에서 토큰을 만들 수 있습니다. "Tokens (classic)"을 선택하고 repo 범위가 포함된 새 토큰을 생성한 다음, 비밀번호를 입력하라는 메시지가 표시될 때 해당 토큰을 터미널에 붙여넣습니다.

GitHub 토큰

push 가 성공하면 브라우저로 전환합니다. 리포지터리 페이지로 이동하여 상단의 Actions 탭을 찾습니다.

"First Workflow"라는 이름의 워크플로 목록이 표시되어야 합니다. 노란색 회전 원 (실행 중) 이나 녹색 체크 표시 (성공) 가 나타날 수 있습니다. 해당 워크플로를 클릭합니다. 내부에서 first-job을 클릭하여 세부 정보를 확인합니다. "Print greeting" 단계를 펼치면 로그에 출력된 "Hello World from LabEx" 메시지를 확인할 수 있습니다.

첫 번째 워크플로

요약

축하합니다! 첫 번째 GitHub Actions 워크플로를 성공적으로 만들고 실행했습니다.

이번 실습에서는 워크플로 파일을 구성하는 네 가지 핵심 요소를 배웠습니다.

  • 트리거 (on): 작업을 언제 시작할지 지정합니다.
  • 작업 (Job): 작업들을 하나로 묶습니다.
  • 러너 (runs-on): 서버 환경을 지정합니다.
  • 단계 (Step): 실행할 실제 명령을 정의합니다.

이제 리포지터리를 감시하는 실행 중인 "로봇 도우미"를 갖게 되었습니다. 다음 실습에서는 이 도우미가 코드를 자동으로 테스트하는 등 더 유용한 작업을 수행하도록 설정합니다!