쿼카러버의 기술 블로그

[Github Action] Github Action 간단 시리즈 2탄 : 간단하게 github action으로 CI 구현해보기 본문

[Infra & Server]/데브옵스

[Github Action] Github Action 간단 시리즈 2탄 : 간단하게 github action으로 CI 구현해보기

quokkalover 2022. 1. 20. 21:02

앞 글에서는 github action의 core 개념에 대해서 알아보았다.

 

Github액션을 최대한 쉽게 이해시켜주기 위해 간단히 정리했으니, 바로 실습에 들어가기전에 아래 글에서 Core개념을 간단하게나마 익히는 것을 추천한다.

 

https://etloveguitar.tistory.com/74

 

[Github Action] Github Action 시리즈 1탄 : Core 개념 (Workflow, Event, Job, steps, runner, step, action 개념 쉽게 정

앞으로 간단하게 Github Action을 사용해서 CI/CD를 구현해보려고 한다. 시작하기에 앞서 Github Action의 Core개념을 익혀보고 다음 시리즈에서는 실제로 Github Action을 실행시켜보도록 하겠다. Core Workflow.

etloveguitar.tistory.com

 

자 그러면 이번 글에는 직접 Github 액션을 실행시켜보기 위해 직접 workflow를 만들어보기

 

그냥 결과만 보고 싶으신 분들은 페이지 제일 하단에 내 개인 레포를 참고하면 된다.

 

Start!

Workflow 정의

목적 : python의 기본적인 패키지를 여러 python버전에서 테스트하는 것을 목표로 한다.

방법 : workflow에 대한 내용은 .github/workflows 폴더 안에 .yml파일을 생성한다.

  • 이미 만들어진 템플릿이 많기 때문에 참고하거나 활용할 수 있다.

(1) Github Repo에서 Actions클릭

(2) 원하는 Workflow Configure클릭

  • 본 예시에서는 그냥 심플하게 Simple workflow로 진행 (기본적인 개념 파악을 위해)

(3) Yml파일 예시

# This is a basic workflow to help you get started with Actions

name: CI

# Controls when the workflow will run
on:
  # Triggers the workflow on push or pull request events but only for the main branch
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2

      # Runs a single command using the runners shell
      - name: Run a one-line script
        run: echo Hello, world!

      # Runs a set of commands using the runners shell
      - name: Run a multi-line script
        run: |
          echo Add other actions to build,
          echo test, and deploy your project.

위 코드를 순차적으로 자세히 살펴보자.

코드 설명

name: CI
  • Workflow의 이름 지정
# Controls when the workflow will run
on:
  # Triggers the workflow on push or pull request events but only for the main branch
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:
  • main branch에 대한 push와 pull_request 이벤트 발생했을 때 workflow가 실행된다고 함.
  • 위처럼 단일 event를 쓸 수도 있고, 아래처럼 list에 담아서 처리할 수도 있음
  • on: push # 또는 on: [pull_request, issues]
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2

      # Runs a single command using the runners shell
      - name: Run a one-line script
        run: echo Hello, world!

      # Runs a set of commands using the runners shell
      - name: Run a multi-line script
        run: |
          echo Add other actions to build,
          echo test, and deploy your project.
  • Core에서 설명했듯이, Workflow에는 여러개의 Job을 구성할 수 있다.
  • 다수의 Job이 있을 때는 Default로 병렬으로 실행된다.
  • 첫번째 indent에 job을 하나 생성할 수 있고, 위 예시에서는 build라는 job을 생성한다.
    • 그리고 이 job에는 총 2개의 step이 존재한다.
  • runs-on : 어떤 OS 환경에서 실행할 것인지 정할 수 있다.
    • steps의 uses는 어떤 액션을 사용할지 지정하는 것으로, 이미 만들어진 액션을 사용할 때 지정한다.
      • 위 예시에서는 actions/checkout@v2 를 use한다고 돼있는데, 이는 Github Action의 공식적인 액션 중 하나로, repository를 확인하고, workflow가 access할 수 있도록 하기 위해 사용되는 액션이다. 그냥 들어간다고 생각해주면 될 것 같다. 구체적으로 뭘하는지 궁금하면 아래 설명을 보자.
      • https://github.com/actions/checkout
      • This action checks-out your repository under $GITHUB_WORKSPACE , so your workflow can access
        1. The current repo in which the workflow is being triggered gets cloned.
        2. Depending on the defined events such as a push or pull request:
        • For a push event, it runs the command below, where $GITHUB_REF points to the latest commit on the specified branch for the push event in the workflow.
        • git fetch --depth 1 $GITHUB_REF
        • For pull requests, it checks $GITHUB_REF points to the latest commit on the pull request source branch. This means it points to the would-be code/result from merging the pull request. This is the code/result other steps within the job are executed on such as running builds or tests. (Not completely sure of the command which runs under the hood)
      • The default steps being executed are:
    • 추가로 strategy - matrix라는 인자가 있는데, 위 예시에는 없지만, 해당 테스트를 실행할 버전 등을 설정할 수 있다.

위 대로 설정 후에 한번 main브랜치에 커밋을 push하면서 한번 테스트 결과를 봐보자.

푸쉬를 하고나면, 노란색 불빛이 뜨는걸 볼 수 있는데, 이를 눌러보면 어떤 잡들이 실행되는지 볼 수 있다.

 

Details를 눌러서 확인해보면

위처럼 설정해두었던 여러 step내 Task(커맨드 or 액션)들을 실행한다.

 

 

 

그냥 코드 전체를 보고 싶으면 아래 레포를 fork떠서 실행시켜봐도 된다.

 

https://github.com/getveryrichet/github_action_test

 

GitHub - getveryrichet/github_action_test

Contribute to getveryrichet/github_action_test development by creating an account on GitHub.

github.com

Comments