카테고리 없음

Github Actions 맛보기 (이전 완료)

ㅈ현 2022. 6. 18. 20:56

git hub actions는 github에서 제공해주는 CI/CD 툴이다.

이를 이용하여 파이프라인등을 설계하여 CI / CD 환경을 구축할 수 있다.

그림 1 파이프라인 예시

 

1. 설정 방법

설정을 위해서는 github 레포지토리의 .github/workflows/ 디렉토리에 .yml 파일을 추가해주면 된다.

workflow yml파일 위치

 

2. 구성 요소

2.1 workflows 

workflow는 한 레포지토리 내에서 이루어지는 모든 일의 흐름이며 최상위 단위이다.

workflow는 하나의 yml파일 단위이며

하나의 레포지토리는 여러개의 workflow를 가질 수 있고

하나의 workflow는 여러개의 job을 가질 수 있다.

 

 

2.2 jobs 

job은 파이프라인의 기본적인 구성요소로써 그림1의 API_Test, DB_Test등의 요소들이 각각 하나의 job이다.

2.3 steps 

step은 작업들의 집합으로 여러 작업들이 모여 하나의 step을 구성한다.

2.4 actions 

action은 가장 작은 단위의 작업으로, 기존에 존재하는 action을 가져다 사용할 수 있고, 나의 action을 공개하여 다른 사람이 쓸 수도 있다.

2.5 events 

이벤트는 해당 workflow를 트리거할 규칙이다. 만약 push만 했을때 workflows가 동작하거나, 특정 브랜치가 commit되었을때 동작하게 하고 싶다면, 이 event를 손봐 어떨때 어떤 workflow가 동작하도록 설정하면 된다.

3. example

name: GIT ACTIONS TEST

on:
  push:
    branches: [master]

jobs:
  API_Test:
    runs-on: ubuntu-latest
    steps:
      - name: api_test1
        run: ls

      - name: api_test2
        run: ls

  DB_Test:
    runs-on: ubuntu-latest
    steps:
      - name: db_test1
        run: ls

      - name: db_test2
        run: ls

  build:
    runs-on: ubuntu-latest
    needs: [API_Test, DB_Test]
    steps:
      - name: API BUILD
        run: echo ${{secrets.DOCKERHUB_USERNAME}} 
        

      - name: DB BUILD
        run: echo ${{secrets.DOCKERHUB_USERNAME}}

  deploy:
    runs-on: ubuntu-latest
    needs: [build]
    steps:
      - name: deploy
        run: git clone https://github.com/jhkim31/gittest.git

위 파일은 그림1 에서의 workflow를 설정한 yml파일이다. (아무 의미없는 workflowe다)

3.1 name 

name은 workflow의 이름을 의미한다.

3.2 on 

이 workflow가 수행될 규칙 즉 event를 정의한다.
이 이벤트에는, PR, push, merged등 다양한 이벤트 들이 있다.

3.3 jobs 

job들을 정의한다. 해당 파일에서는 API_Test, DB_Test, build, deploy job이 존재한다.
또한 job들간에는 의존 관계를 설정해줄 수 있다. build job은 두개의 Test job에 대해 의존 관계가 있고, deploy job은 build job에 대해 의존 관계가 있다.

3.4 API_Test job 

API_Test, DB_Test, build, deploy job중 하나에 대해 다뤄본다.

3.4.1 API_Test.runs-on 

runs-on은 해당 job이 실행될 [컨테이너 / OS] 를 설정한다.

3.4.2 API_Test.steps 

steps는 해당 job 내에서 이루어질 작업들을 정의한다

3.4.3 API_Test.name 

여기서의 name은 하나의 job 내부에서 일어날 작업의 이름을 의미한다. api_test1이라는 step에서는 ls 명령을 실행한다. 

ls 명령이 실행되는 job

 

4. secret 변수

외부로 공개되지 않아야할 정보 (ex 키값) 등을 설정할 수 있는 변수로써 설정과 사용은 다음과 같이 한다.

레포지토리의 settings => secrets => Actions에 가면 다음과 같이 비밀 변수를 설정할 수 있다.

 

github repository 설정

 

new repository secret여기서 new repository secret 버튼을 눌러 새로운 secret을 만듭니다.

new Secret

 

FOO: BAR 이라는 secret 생성

 

생성된 secret은 {workflow}.yml 파일 내에서 ${{Secrets.FOO}} 로 사용되게 되며 실제 workflow가 진행되면 BAR이라는 값으로 치환되게 된다.