기존 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
'Git' 카테고리의 다른 글
[CI/CD 구축 2/2] AWS에서 S3 + Code Deploy로 EC2에 배포하기 (0) | 2021.11.18 |
---|