CI/CD with Git Action

2518 단어 CI/CDCI/CD

Git Action을 이용한 CI
아래는 Git action으로 CI를 하는 예시이다.
Git action은 가장 크게는 workflow라는 단위로 진행된다.
yml 파일로 CI에 대한 workflow를 설정할 수 있다.

-workflow----------
jobs:
잡이름:
steps:

  • 실행할 거
  • 실행할 거2
    ...
    잡이름2:
    steps:
  • 실행할 거
  • 실행할 거2
    ...

이런 식으로 이루어져있다고 생각하면 된다.

name: Java CI with Gradle

on:
pull_request:
branches: [ develop ]

jobs:
build:

runs-on: ubuntu-20.04

steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
  uses: actions/setup-java@v2
  with:
    java-version: '11'
    distribution: 'adopt'
- name: Build with Gradle
  uses: gradle/gradle-build-action@4137be6a8bf7d7133955359dbd952c0ca73b1021
  with:
    arguments: build

설명:
develop 브랜치에 pull request가 들어올때마다 이 workflow가 실행된다.
이 workflow는 현재 하나의 job으로 구성되어 있고, 이 job은 2 step으로 구성되어 있다.

Set up JDK 11 - gradle로 빌드를 하기위해 자바를 세팅해준다.
Build with Gradle - gradle build를 하게 되면 컴파일에 문제가 없어야 하는것은 물론이고 내부적으로 작성해둔 테스트를 다 통과해야만 빌드가 정상적으로 완료된다.
Action을 활용해서 CI를 하기 위한 Github 설정

위와 같이 이 build job에서 아무 문제가 발생하지 않아야만 merge를 할수있도록 github에서 설정해 줄 수 있다.

Git Action을 이용한 CD
github->ec2로 CD가 되도록 구현하는 예시이다.

name: CD

on:
push:
branches: [ develop ]
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-20.04
steps:
- name: Checkout source code
uses: actions/checkout@v2

  - name: Build App
    run: ./gradlew bootJar

  - name: Deploy Prod use SCP
    uses: appleboy/scp-action@master
    with:
      username: ubuntu
      host: ${{ secrets.HOST }}
      key: ${{ secrets.PRIVATE_KEY }}
      source: "./build/libs/*.jar"
      target: "/home/ubuntu/deploy"
      strip_components: 2

  - name: Transfer Deploy Script use SCP
    uses: appleboy/scp-action@master
    with:
      username: ubuntu
      host: ${{ secrets.HOST }}
      key: ${{ secrets.PRIVATE_KEY }}
      source: "deploy.sh"
      target: "/home/ubuntu/deploy"

  - name: Execute Server Init Script
    uses: appleboy/ssh-action@master
    with:
      username: ubuntu
      host: ${{ secrets.HOST }}
      key: ${{ secrets.PRIVATE_KEY }}
      script_stop: true
      script: |
        cd /home/ubuntu/deploy
        chmod u+x deploy.sh
        ./deploy.sh

설명:
develop 브랜치에 push가 되었을 때 Git Action으로 scp로 ec2에 빌드된 jar 파일을 전송 후 쉘 스크립트로 jar을 실행하는 job을 진행한다.

좋은 웹페이지 즐겨찾기