Git

[CI/CD 구축 1/2] Git Action 문법 정리

mers 2021. 11. 18. 11:31

  기존 Jenkins를 사용하다가 https://wookiist.dev/155 해당 글을 보았습니다. 

아무래도 저에게는 GitAction이 적당하다고 판단되어 Git Action을 이용하여 CI/CD 해보도록 하겠습니다.  

 

 Git Action의 작업단위는 크게 workflow, event, job, step으로 구성되어 있습니다

 

 

Git Action 용어


Workflow

 

 - 프로젝트를 빌드, 배포하기 위한 전체적 프로세스입니다. 
 - 하나의 workflow에는 정해진 event가 있으며 해당 event에 의해 여러 개의 job이 실행됩니다. 

 

 

Event(on)

 

 - workflow를 실행시키는 조건입니다. on 문법을 이용하여 이벤트를 발생시킬 수 있습니다.
 - 또한 cron을 사용하여 주기적으로 스케쥴링이 가능합니다. 

 

 

Job

 

 - 빌드 대상 인스턴스 내의 여러 개 step들을 그룹으로 실행하는 작업단위 입니다. 

 

 

Step

 

 - 순차적으로 명령어를 수행합니다. run/uses가 있으며 uses는 정의한 명령어, run은 실행 스크립트입니다.

 

 

 

 

Git Action 문법


name

name: gitaction-test

 - workflow의 이름을 지정합니다. 필수는 아니며, 지정하지 않으면 파일경로로 github에 나타납니다.

 

 

 

on: 이벤트 실행 조건

# push 할 경우 수행
on: push

# push 혹은 pull request 발생 시 수행
on: [push, pull_request]

# 특정 브랜치에 push 
on:
	push:
    	branches:
          - master
          - feature/*


# 특정 브랜치를 포함시키고 싶지 않을 경우 [느낌표 사용]
on:
	push:
    	branches:
          - master
          - '!feature/*'


# 특정 태그 push
on:
	push:
    	tags:
          - v1
          - v1.*
          
          
# cron 스케쥴러 (최소 interval time : 5분)
on:
	schedule:
    	- cron: '0 * * * *'


# github API 수동 트리거
on:
	repository_dispatch

 

 

 

env : 환경변수 설정

- job에 대한 환경변수 뿐만 아니라 steps에 대한 환경변수도 지정 가능합니다. 

env:
  AwsURL: 127.0.0.1
  AwsPort: 3306

 

 

 

Jobs: 워크플로우 job 

 - 병렬적으로 실행되기 때문에 순서 보장이 되지 않습니다.

 - needs를 이용하면 어느 정도 동기적으로 실행되게 할 수 있습니다. 

jobs:
  jobs1:
    name: first job
  jobs2:
    name: second job
    needs: job1
  job3:
    name: third job
    needs: [job1, job2]
    
    
    
# 1) jobs env
# - jobs에서 사용할 환경변수 정의 
jobs:
  build:
    env:
      DB_NAME: my_db
      DB_PORT: 3306
     
# 2) jobs if
# - jobs에서 사용할 조건 지정
jobs:
  build:
    if: github.base_ref == 'master'

 

 

 

 

steps: 하나의 작업에 대한 일련의 step 지정

# 1) jobs steps
# - job 내부에는 여러 steps가 존재합니다.
# - steps 안에서 정의한 env는 공유되지 않습니다. 
# - steps 내부에서 if 조건을 지정할 수 있습니다.
# - "users"는 git action 명령을, "run"은 스크립트 명령을 실행할 수 있습니다. 
jobs: 
  test-job:
    name: test Job
    runs-on: ubuntu-18.04
    steps:
      - name: Grant execute permission for gradlew
        if: github.event_name == 'push' || github.event_name == 'pull_request'
        run: |
          chmod +x gradlew 
          ./gradlew clean
        working-directory: /home/build  # 쉘 명령어가 실행될 디렉토리 지정 가능
        shell: bash # 쉘 지정 가능합니다 (python, cmd, powershell, bash)

 

 

 

 

 

 

Git Action 예시 (spring boot gradle)


name: deploy-test-1.0.0

on:
  push:
    branches: [ test-1.0.0 ]
jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 11

      - name: Grant execute permission for gradlew
        run: chmod +x ./gradlew
        shell: bash

      - name: Build with Gradle
        run: ./gradlew build
        shell: bash

 

 

 

참고

 

[1] https://jinmay.github.io/2020/05/13/git/github-action-syntax/

[2] https://lynlab.co.kr/blog/88