Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

임도현의 성장

GitHub Actions 본문

카테고리 없음

GitHub Actions

림도현 2024. 11. 16. 22:15

🧐 Github Action란?

GitHub Actions은 GitHub에서 제공하는 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 CI/CD(연속 통합 및 지속적인 업데이트) 플랫폼입니다. 

🥺 CI/CD 란?

반복적인 일 들을 처리하고 문제가 있을 때 경고를 해주는 등 자동화된 파이프라인을 통해서 코드 변경과 배포 단계를 원활하게 진행 할 수있다. 즉 자동화를 통해 시간 절약 및 사람이 직접적으로 처리 할 때 실수를 할 수 있는 부분들을 관리 함

 

CI - 지속적 통합

  • CI는 개발자가 작성한 코드를 주기적으로 중앙 저장소에 병합(merge)하고 이를 자동으로 빌드 및 테스트하는 과정입니다.
  • 코드를 자주 병합하므로, 통합 충돌을 줄입니다.
  • 코드 품질을 높이고, 문제가 배포 전에 발견되도록 합니다.

CD - 지속적 전달

  • 배포 준비 상태를 지속적으로 유지하므로, 제품을 빠르게 출시할 수 있습니다.
  • 배포 속도를 높이고, 릴리즈 주기를 단축합니다.

Githuv Action 핵심 개념 

  1. Events : 어떤 branch에 push나 pull request를 했을때 등의 규칙을 정할 수 있다.
  2. Workflows : 자동화된 프로세스가 정의되어있는 하나의 파일이다.
  3. Jobs : Workflows 내에 실행될 명령어 여러개의 Jobs을 작성 할 수 있다. Jobs은 순차적으로 실행
  4. Actions : 재사용되는 명령어들의 집합으로 이루어진 작업이다. 직접 작성해도 되고 등록되어있는 Action을 가져와 사용 할 수 도 있다.
  5. 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는 같은 이름과 태그의 이미지를 덮어쓰는 방식으로 작동하여 이전에 올라왔던 이미지들을 일일히 삭제 하지 않아도 된다.