GitHub Actions + Issues, Slack 연동

artp·2024년 9월 18일

CI/CD

목록 보기
3/9
post-thumbnail

GitHub Actions란?

GitHub에서 제공하는 CI/CD(Continuous Integration/Continuous Deployment) 서비스로, 코드 리포지토리에서 자동화된 워크플로를 설정하고 실행할 수 있게 해줍니다. 이 워크플로는 주로 코드 빌드, 테스트, 배포 등의 작업을 자동으로 처리하는 데 사용됩니다.

GitHub Actions의 구성 요소

깃허브 리포지토리에는 다양한 이벤트 트리거들이 존재하는데, PR(Pull Request) 요청이 열리거나 이슈가 생성되는 것과 같은 이벤트 트리거들이 있습니다. 이러한 이벤트가 있을 때, GitHub Actions Workflows를 이벤트에 맞춰 자동으로 실행되도록 설정할 수 있습니다.

깃허브 공식 홈페이지에서 가져온 이미지에 따른 GitHub Actions의 작동 순서는 다음과 같습니다.

GitHub Actions의 작동 순서
리포지토리에서 이벤트 발생 ➔ 러너에서 Job 실행 ➔ Job 아래 Step들 순차적으로 실행

Event (이벤트)

워크플로를 트리거하는 깃허브 리포지토리의 이벤트입니다. 예를 들어, 이슈가 열릴 때, PR이 생성될 때, 코드가 푸시될 때 등 다양한 이벤트가 있습니다.

예시:

on:
  push:
    branches:
      - main  # main 브랜치에 푸시될 때 워크플로가 트리거됨
  pull_request:
    types: [opened]  # PR(Pull Request)이 열릴 때 워크플로가 트리거됨

위 예시에서는 코드가 main 브랜치로 푸시될 때와 PR(Pull Request)이 열릴 때 워크플로가 트리거됩니다.

Workflow (워크플로)

특정 이벤트가 발생했을 때 하나 이상의 작업을 실행하는 자동화된 작업 과정입니다. 하나의 워크플로는 여러 개의 작업(Job)으로 구성될 수 있습니다. 워크플로는 리포지토리의 .github/workflows 폴더 아래에 위치한 YAML(YML) 파일로 설정하며, 하나의 리포지토리에서는 여러 개의 워크플로, 즉 여러 개의 YAML 파일을 생성할 수 있습니다.

예시:

name: CI Workflow  # 워크플로의 이름을 CI Workflow로 설정

on:
  push:
    branches:
      - main  # main 브랜치에 푸시될 때 트리거

jobs:
  build:
    runs-on: ubuntu-latest  # 이 Job은 최신 우분투 환경에서 실행

    steps:
      - name: Checkout code  # 첫 번째 단계: 코드를 체크아웃
        uses: actions/checkout@v2  # GitHub 제공 액션을 사용하여 체크아웃

      - name: Install dependencies  # 두 번째 단계: 의존성 설치
        run: npm install  # npm 명령어로 의존성 설치

      - name: Run tests  # 세 번째 단계: 테스트 실행
        run: npm test  # npm 명령어로 테스트 실행

위 예시는 main 브랜치로 코드가 푸시될 때, 코드 체크아웃, 의존성 설치, 테스트 실행 작업을 자동으로 수행하는 워크플로입니다.

Job (작업)

워크플로 내에서 동시에 실행(병렬)되거나 순차적으로 실행(직렬)될 수 있는 개별 작업 단위입니다. 작업은 기본적으로 동시에 실행되며, 각 작업은 여러 개의 Step(단계)으로 구성됩니다. 작업은 워크플로 YAML 파일 내에서 jobs 속성을 사용하며 작업 식별자(ID)와 작업 세부 내용 간의 맵핑(mapping) 형태로 명시됩니다.

예시:

jobs:
  build:
    runs-on: ubuntu-latest  # 이 Job은 최신 우분투 환경에서 실행

    steps:
      - name: Checkout code  # 첫 번째 단계: 코드를 체크아웃
        uses: actions/checkout@v2  # GitHub 제공 액션을 사용하여 체크아웃

  test:
    runs-on: ubuntu-latest  # 이 Job도 최신 우분투 환경에서 실행

    steps:
      - name: Run tests  # 첫 번째 단계: 테스트 실행
        run: npm test  # npm 명령어로 테스트 실행

위 예시에서는 buildtest라는 두 개의 작업이 정의되어 있으며, 이 작업들은 기본적으로 동시에 실행됩니다.

Runner (러너)

GitHub Actions 워크플로우를 실행하는 애플리케이션이 설치된 컴퓨터 또는 서버입니다. 이 러너는 워크플로우의 Job을 실제로 실행하는 인스턴스 역할을 하며, GitHub에서 호스팅된 러너(예: ubuntu-latest) 또는 자체 호스팅된 러너를 사용할 수 있습니다.

예시:

jobs:
  build:
    runs-on: ubuntu-latest  # 최신 우분투 환경에서 Job을 실행

위 예시에서는 GitHub에서 제공하는 최신 우분투 환경(ubuntu-latest)에서 작업이 실행됩니다. 이는 GitHub 호스팅 러너를 사용하는 경우입니다.

Step (단계)

각 작업 내에서 순차적으로 실행되는 개별 명령어입니다. 예를 들어, 코드 빌드, 테스트, 배포 등이 단계에 해당합니다. Job(s)와는 다르게 step은 작성한 순서대로 실행됩니다.

예시:

jobs:
  build:
    runs-on: ubuntu-latest  # 이 Job은 최신 우분투 환경에서 실행

    steps:
      - name: Checkout code  # 첫 번째 단계: 코드를 체크아웃
        uses: actions/checkout@v2  # GitHub 제공 액션을 사용하여 체크아웃

      - name: Install dependencies  # 두 번째 단계: 의존성 설치
        run: npm install  # npm 명령어로 의존성 설치

      - name: Run tests  # 세 번째 단계: 테스트 실행
        run: npm test  # npm 명령어로 테스트 실행

위 예시에서 steps는 코드 체크아웃, 의존성 설치, 테스트 실행을 순차적으로 수행합니다.

GitHub Action 생성해보기

GitHub Actoin은 event, job, step을 정의하기 위해 YAML 파일을 사용합니다. 리포지토리의 .github/workflow 폴더 아래에 yaml(yml) 파일을 생성하여 작성하면 됩니다.

예시 YAML 파일

name: Simple Workflow  # 워크플로의 이름을 Simple Workflow로 설정

on:
  push:
    branches:
      - main  # main 브랜치에 코드가 푸시될 때 워크플로가 실행됨

jobs:
  greet:  # 이 Job의 ID는 greet
    runs-on: ubuntu-latest  # 최신 우분투 환경에서 실행

    steps:
      - name: Say hello  # 첫 번째 단계: 인사 메시지 출력
        run: echo "Hello, world!"  # 터미널에 "Hello, world!" 메시지 출력

  farewell:  # 이 Job의 ID는 farewell
    runs-on: ubuntu-latest  # 최신 우분투 환경에서 실행
    needs: greet  # 이 작업은 greet 작업이 성공적으로 완료된 후에 실행됨

    steps:
      - name: Say goodbye  # 첫 번째 단계: 작별 인사 메시지 출력
        run: echo "Goodbye, world!"  # 터미널에 "Goodbye, world!" 메시지 출력

코드에 포함된 속성들에 대한 설명

  1. name:

    • 워크플로우의 이름을 설정합니다. 이 이름은 GitHub Actions 페이지에서 해당 워크플로우를 식별하는 데 사용됩니다. 예시에서는 "Simple Workflow"라는 이름이 사용되었습니다.
  2. on:

    • 워크플로우가 언제 실행되는지를 정의합니다. 이 예시에서는 main 브랜치에 코드가 푸시될 때 워크플로우가 실행되도록 설정되어 있습니다.
  3. jobs:

    • 워크플로우 내에서 실행될 작업들을 정의합니다. 여러 작업을 정의할 수 있으며, 기본적으로 작업들은 병렬로 실행됩니다.
  4. greet:

    • 이 Job의 ID입니다. 이 Job에서는 "Hello, world!"라는 인사 메시지를 출력하는 단계를 포함합니다.
  5. runs-on:

    • 이 Job이 실행될 환경을 정의합니다. 예시에서는 ubuntu-latest라는 GitHub 호스팅 러너가 사용되었습니다.
  6. steps:

    • 각 Job 내에서 실행될 단계를 정의합니다. 단계는 순차적으로 실행되며, 다양한 명령어와 액션을 포함할 수 있습니다.
  7. run:

    • 특정 명령어를 실행할 때 사용됩니다. 이 예시에서는 터미널에 "Hello, world!"와 "Goodbye, world!" 메시지를 출력하는 명령어를 실행합니다.
  8. needs:

    • 이 Job이 실행되기 전에 완료되어야 하는 Job을 정의합니다. 예시에서는 farewell Job이 greet Job이 완료된 후에 실행되도록 설정되었습니다.

GitHub Actions와 GitHub Issues 연동

깃허브 이슈와 연동하기 위한 워크플로우 YAML 파일 생성

  • 깃허브 리포지토리 - Actions 선택 - set up a workflow yourself 선택
  • workflow 파일 작성
  • commit 버튼 선택
  • 생성된 파일 확인 가능

깃허브 이슈 생성 후 워크플로우 연동 확인

  • 깃허브 이슈 생성
  • 이슈 생성 후 워크플로우 연동 확인

GitHub Actions, GitHub Issues, Slack 연동

슬랙 설정

  • 슬랙에 Incoming Webhooks 추가

깃허브 설정

  • 깃허브 리포지토리에서 Webhook URL을 안전하게 사용하기 위한 과정
  • 새 워크플로우 파일 생성
  • 새 이슈 생성

연동 결과 확인

  • 슬랙 메시지 확인
profile
donggyun_ee

0개의 댓글