Github Actions
Github Actions는 Github에서 제공하는 CI/CD를 구현할 수 있는 툴의 한 종류로 빌드, 배포, 테스트를 자동화하는 파이프라인을 만들 수 있습니다.
이번글에서는 GIthub Action을 통해 GIthub에 코드가 Push, Pull Request 되었을 때 이미지를 빌드하고 도커 허브로 푸시하는 과정을 수행하는 파이프라인을 구축해보겠습니다.
Github Actions의 구성요소
Workflow
Repository에 추가할 수 있는 자동화된 커맨드의 집합입니다.
하나 이상의 Job으로 구성되어있으며 Event에 의해서나 특정 시간에 실행될 수 있습니다.
빌드, 테스트, 배포 등 각각의 역할을 Workflow에 추가할 수 있고 .github/workflows 위치에 YAML파일로 저장됩니다.
Event
Workflow를 실행시키는 특정한 활동으로 Push, Pull Request 등으로 지정할 수 있습니다.
Repository Dispatch Webhook을 사용하면 Github 외부의 이벤트로도 Workflow를 실행시킬 수 있습니다.
Job
Job이란 하나의 Runner에서 실행되는 여러 step의 모음입니다.
Job은 의존관계 설정을 통해 한 job이 끝나면 다른 job이 실행되도록 설정할 수 있습니다.
step은 일종의 Shell Script처럼 실행될 수 있으며 step끼리 데이터 공유가 가능합니다.
Action
Job을 만들기 위해 step을 결합한 커맨드의 역할로 Workflow에서 가장 작은 단위이다.
Github Marketplace를 통해 공용 Action이나 다른 사람이 만든 Action을 사용할 수 있습니다.
Runner
Runner는 Workflow의 Job을 실행시키기위한 어플리케이션입니다.
Github에서 호스팅하는 가상 인스턴스의 경우에는 메모리 및 용량 제한이 있습니다.
Github Action 시작하기
.github/workflows 위치에 YAML파일을 생성하여 만들 수 있지만,
깃허브 레포지토리의 Actions 탭에서 템플릿을 이용하면 편리하고 작성할 수 있다.
set up a workflow yourself를 눌러 workflow를 설정할 수 있는 코드 에디터를 사용할 수 있다.
이번글에서는 GIthub Action을 통해 GIthub에 코드가 Push, Pull Request 되었을 때 이미지를 빌드하고 도커 허브로 푸시하는 과정을 수행하는 파이프라인을 구축해보겠습니다.
name: CI
#workflows를 실행시키기 위한 Event 목록입니다.
on:
#push, pull_request가 master 브랜치에서 일어날 경우 workflow를 실행시킵니다.
push:
branches: master
pull_request:
branches: master
#workflows의 하나 이상의 job 목록입니다.
jobs:
#job의 이름으로 build라는 이름으로 표시됩니다.
build:
runs-on: ubuntu-latest
#build라는 job 내부의 step 목록입니다.
steps:
#해당 레포지토리로 checkout하여 레포지토리에 접근할 수 있는 action을 불러옵니다.
- name: Setup Checkout
uses: actions/checkout@v3
#java-version11로 JDK를 setup합니다.
- name: Setup Java JDK
uses: actions/setup-java@v3
with:
distribution: temurin # check
java-version: 11
#Gradle을 setup합니다.
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
#Gradle을 빌드합니다.
- name: Execute Gradle build
run: ./gradlew clean build --exclude-task test
#레포지토리 secrets에 따로 등록한 도커허브 아이디와 패스워드로 dockerhub에 로그인합니다.
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
#sinsahelper-backend라는 이름으로 최신버전 이미지를 빌드합니다.
- name: build image
run: docker build -t squib0612/sinsahelper-backend:latest .
#이미지를 dockerhub에 push합니다
- name: push image to hub
run: docker push squib0612/sinsahelper-backend:latest
위와 같이 YAML파일을 작성하고 나면 master 브랜치에 push나 pull-request가 일어날 경우 등록된 Workflow가 실행되고
레포지토리의 Actions탭에서 확인할 수 있습니다.
Reference
https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions
'Github Action' 카테고리의 다른 글
Github Action ssh: handshake failed 에러 (0) | 2022.08.29 |
---|