임도현의 성장
GitHub Actions 본문
🧐 Github Action란?
GitHub Actions은 GitHub에서 제공하는 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 CI/CD(연속 통합 및 지속적인 업데이트) 플랫폼입니다.
🥺 CI/CD 란?
반복적인 일 들을 처리하고 문제가 있을 때 경고를 해주는 등 자동화된 파이프라인을 통해서 코드 변경과 배포 단계를 원활하게 진행 할 수있다. 즉 자동화를 통해 시간 절약 및 사람이 직접적으로 처리 할 때 실수를 할 수 있는 부분들을 관리 함
CI - 지속적 통합
- CI는 개발자가 작성한 코드를 주기적으로 중앙 저장소에 병합(merge)하고 이를 자동으로 빌드 및 테스트하는 과정입니다.
- 코드를 자주 병합하므로, 통합 충돌을 줄입니다.
- 코드 품질을 높이고, 문제가 배포 전에 발견되도록 합니다.
CD - 지속적 전달
- 배포 준비 상태를 지속적으로 유지하므로, 제품을 빠르게 출시할 수 있습니다.
- 배포 속도를 높이고, 릴리즈 주기를 단축합니다.
✍ Githuv Action 핵심 개념
- Events : 어떤 branch에 push나 pull request를 했을때 등의 규칙을 정할 수 있다.
- Workflows : 자동화된 프로세스가 정의되어있는 하나의 파일이다.
- Jobs : Workflows 내에 실행될 명령어 여러개의 Jobs을 작성 할 수 있다. Jobs은 순차적으로 실행
- Actions : 재사용되는 명령어들의 집합으로 이루어진 작업이다. 직접 작성해도 되고 등록되어있는 Action을 가져와 사용 할 수 도 있다.
- Runners : 실제로 작업을 실행하는 환경이다.
- 요약 하자면 Events가 발생되면 Workflows가 실행 Workflows안에있는 Jobs들이 순차적으로 실행 Actions은 각 Jobs 내에서 특정 작업 코드들을 실행 Runners가 실제로 이 모든 작업을 하는 환경이다.
🐱 Workflows 파일 생성
자신의 Repository에 액션에 들어가 자신의 프로잭트에 맞는 Repository를 선택 나는 스프링부트 프로잭트여서 Java With Gradle를 선택 하였다. Configure를 선택하면 기본적으로 github/worfklows 폴더 안에 .yml파일이 생성된다.
최상단에 name을 작성한다. 이것이 Workflows의 이름을 정해주는거다.
name: Java CI with Gradle
Workflows 파일을 실행시킬 Events 정의 main branch에 push나 pull request이벤트가 발생했을때 실행 한다.
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
job의 이름은 build라고 정의 하고 runs-on은 어떤 환경에서 돌릴 것인지 정의 나는 ubuntu로 했다.
각 스텝마다 name정의, uses는 마켓이 있는 action 가져오기이다. run은 직접 명령어 실행
jobs:
build:
runs-on: ubuntu-latest
steps:
# 1. 코드 체크아웃
- name: Check out code
uses: actions/checkout@v4
# 2. JDK 17 설치
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- 나는 나중에 프로젝트가 완성이 되면 자동 배포를 하기 위해 빌드에 문제가 없다면 Docker Hub에 Docker 이미지도 자동으로 Push하게 설정하였다.
- Github Action에 환경 변수 설정하는 방법은 Repository => Settings => Action => New repository secret 를 생성해서 작성하면 된다.
# 3. Docker 이미지 빌드
- name: docker image build
working-directory: hello
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/github-actions-test .
# 4. DockerHub 로그인
- name: docker login
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
# 5. Docker Hub 이미지 푸시
- name: docker Hub push
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/github-actions-test
🔔 Events 발생시 작동 화면
이제 main branch에 push나 pull request이벤트가 발생되면 자동으로 깃허브 액션이 테스트 하면서 빌드를 해 문제가 있나 없나 확인을 해준다. 문제가 있을시 알려주어 실수를 막을 수 있으며 도커 파일 또한 자동으로 Push해주기 떄문에 편해졌다.
🎃 Docker Hub 확인
빌드 테스트까지 아무런 에러 없이 작동하면 Docker Hub에 이미지가 잘 들어온것을 확인 할 수 있다.
아까 Workflows 파일에 도커 이미지를 github-actions-test 라고 정의 했었기에 github-actions-test 라는 이름으로 생성 되었고 Docker Hub는 같은 이름과 태그의 이미지를 덮어쓰는 방식으로 작동하여 이전에 올라왔던 이미지들을 일일히 삭제 하지 않아도 된다.