티스토리 뷰

Git

[Git] Github actions 맛보기

니용 2021. 12. 1. 14:10
반응형

이번 글에서는 지난 글에 이어 Github Actions에 대한 간단한 설명과 사용 방법에 대해 설명드리고자 합니다.

 

1) github action란?

  • github Actions은 CI/CD는 물론 여러 소프트웨어 개발 과정을 자동화해주는 서비스

  • Actions 탭의 좌측을 보면 workflow 리스트가 존재하며, 우측에 커밋 메시지와 초록불이 보임
  • 그런데, workflow는 무엇이며 github actions에서는 어떻게 CI/CD를 사용할 수 있을까요?



1) actions의 구성 요소

(1) runner, 가상 컴퓨터

  • runner는 깃헙에서 제공하는 가상 컴퓨터로, mac os, window 등 다양한 운영체제에서 작동
  • 만약 우리가 깃헙에 코드를 푸시하면, 우리가 작성한 코드(로직)가 runner에서 실행
  • 또한 부가적으로 필요한 정보를 runner에 입력
  • 우리는 runner에서 코드를 실행시켜, 자동으로 디플로이 하거나 테스트

 

(3) job, step의 집합

  • 하나의 workflow에서는 여러 job이 존재할 수 있으며 서로 의존하도록 설정
  • 빌드 job이 테스트 job 다음에 실행되어야 한다는 의존관계를 설정하면, 빌드 job이 실패하면 테스트 job은 실행되지 않음

 

(4) step, 각각의 task

  • 실행할 각각의 커멘트를 의미
  • 하나의 job에는 여러개의 step이 존재할 수 있음

 

(5) action, step 뭉치

  • job에서 재사용 가능한 별도의 step
  • github action에서 사용할 수 있는 라이브러리

 

(6) workflow, 전체 프로세스

  • workflow는 레파지토리에서 실행되는 자동화된 커맨트 집합
  • 하나 이상의 job으로 구성
  • workflow는 이벤트(push, pull request)에 의해 실행되기도 하지만, 시간에 따라 실행될 수도 있음
  • workflow 코드는 .github/workflows 에 저장 (확장자는 yml)

 

(7) event, 이벤트

  • workflow는 이벤트 기반의 동작
  • 이벤트는 push, pull request의 3가지가 있음
  • 더 자세한 이벤트 종류는 깃헙 공식문서 링크에서 확인 간ㅇ
  • 만약 사용자가 코드를 푸시하는 이벤트를 발생시키며, 이에 해당하는 jobs들이 실행



2) github actions 예시

github에 테스트용 레파지토리를 만든 상태라고 가정하고 진행합니다.

(1) workflow 생성 방법

  • 생성한 레파지토리의 action탭으로 가면 아래와 같은 화면이 나옴
  • set up a workflow yourself를 클릭

 

  • 이동해보면, .github/workflows에 main.yml이 자동으로 생성
  • 우리는 main.yml라는 워크플로우를 작성

 

  • 원래라면 workflow에 코드를 작성해야하지만 예시 코드를 그대로 두고, start commit을 눌러보면

 

  • 그리고 actions 탭으로 이동하면 workflow가 실행되는 걸 볼 수 있음

 

  • 실행되고 있는 workflow를 클릭해보면, 상세 내역을 볼 수 있는데 어떤 작업을 했는지 확인 가능

workflow 생성 과정을 보았는데, 이제 직접 코드를 작성해보자!

 

(2) step 추가해보기

  • 앞서 설명했듯이 workflow는 이벤트 기반의 동작
  • 만약 사용자가 코드를 푸시(이벤트)하면 해당하는 jobs들이 실행
  • 아래 코드는 workflow의 기본적인 예시
  • 라인별로 의미를 알아보겠습니다.
name: Hello world
on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Run pwd # 동작명
      run: rwd # 실제 동작
    - name: Run ls -al
      run: ls -al

 

  • name은 해당 workflow의 명칭입니다.
name: Hello world  

 

  • on은 이벤트를 지정하는 곳으로, 쉼표(,)를 이용해 여러 이벤트를 추가할 수 있습니다.
  • [push]라고 작성하면 push가 발생했을 때 작업을 실행
name: Hello world
on: [push]       

 

  • jobs에는 여러 step을 추가하거나 구동 환경을 지정합니다.
jobs:
  build:
    runs-on: ubuntu-latest  # 우분투에서 실행 

 

  • steps에는 실행할 커멘트를 지정하며, name에는 동작명, run에는 실행할 커멘트를 작성합니다.
jobs:
  build:
    runs-on: ubuntu-latest
    steps:              
    - name: Run pwd       # 동작명
      run: pwd            # 실제 동작

 

  • 앞서 본 코드의 의미를 해석하면 아래와 같습니다.
name: Hello world     # 1. 이 워크플로우의 이름은 Hello world야
on: [push]            # 2. 만약 push 이벤트가 발생하면 jobs를 실행할거야

jobs:
  build:
    runs-on: ubuntu-latest    # 3. jobs을 실행할 환경은 우분투이고,
    steps:                    # 4. 실행한 커멘트는 steps에 지정할 거야
    - name: Run pwd # 동작명    # 5. Run pwd라는 동작은 pwd를 실행시키는 거야
      run: pwd # 실제 동작
    - name: Run ls -al
      run: ls -al

 

  • 이제 이 워크플로우를 추가하고 실행해보면 아래와 같은 화면이 나옵니다.

 

  • 우리가 지정한 step들이 진행된 걸 확인할 수 있습니다.

 

(2) 액션 사용해보기

  • 우리는 uses 키워드를 사용해 다른 사람이 이미 구축한 액션을 사용할 수 있습니다.
  • 사용가능한 액션의 종류는 마켓 플레이스(빨간색 표시)에서 볼 수 있습니다.

 

  • 앞선 예시에 액션을 추가해보겠습니다
name: github-checkout
on: [push]
jobs: 
  build:
    runs-on: ubuntu-latest # 구동 환경

    steps:
    - uses: actions/checkout@v2 # 액션 라이브러리를 실행

 

  • 해당 워크플로우를 추가하고 결과를 보면, 액션이 실행됐음을 알 수 있습니다.
  • 액션별 동작은 각 액션 문서에서 확인할 수 있습니다.

 

(3) 문맥 사용해보기

  • 러너에서 작동되는 steps을 만들 때, 러너가 구동된 시점의 상태 정보를 알면 여러 처리를 할 수 있습니다.
  • 문맥(context)은 바로, 러너가 구동된 시점의 상태를 알려주는 환경변수
  • 문맥의 여러 종류는 깃업 문서에서 확인할 수 있습니다.
  • env 키워드를 사용해 환경변수 속성과 값을 지정할 수 있습니다.
name: context
on: [push]
jobs: 
  build:
    runs-on: ubuntu-latest # 구동 환경

    steps:
    - name: "context"
      env:                                # 환경변수 관련
        COMMIT_ID: ${{ github.sha }}      # 환경변수 지정(키: 값)
      run: echo "Commit id => $COMMIT_ID" # 환경변수 출력해보기

 

잠깐! 숨겨야하는 환경변수를 어떻게 설정할까?

  • 먼저 settings의 secrets에 외부에 공개하면 안되는 변수를 추가합니다.

 

  • 그 다음 secrets.추가한_속성명을 사용하면 됩니다.
name: secret-test
on: [push]
jobs: 
  build:
    runs-on: ubuntu-latest # 구동 환경

    steps:
    - name: Print Password
      env:
        MY_PASSWORD: ${{ secrets.PASSWORD }}
      run: echo My Password is $MY_PASSWORD

 

  • secrets에 추가한 속성은 출력시 암호화된 상태로 출력됩니다.

 

이상으로 Github actions를 사용하는 방법에 대해 설명드렸습니다. 긴 글 읽어주셔서 감사합니다 :)

반응형
댓글
공지사항