[Git] GitHub Actions란?
GitHub Action란?
Github Actions 는 Github에 내장된 CI/CD 도구
Github에 내장되어 있는 CI/CD라 github와 통합이 쉽고 CI/CD 서버가 내장 되어 CI/CD서버를 따로 구축할 필요 없으며, 일정 수준까지 가격이 무료!
※무료 버전 : 스토리지 500MB, 월 2000분
Github Actions 동작 방법
repository의 .github/workflows 디렉토리에 필요한 Actions 파일들을 yaml 형식으로 작성
CI란?
test를 통과한 코드만 develop 브랜치와 main 브랜치에 merge되도록 하여 오류를 방지하고 안정적인 코드가 배포되고 버그를 빠르게 발견
사용 예제
# Actions 이름 github 페이지에서 볼 수 있다.
name: 'CI'
# Event Trigger 특정 액션 (Push, Pull_Request)등이 명시한 Branch에서 일어나면 동작을 수행한다.
on:
push:
# 배열로 여러 브랜치를 넣을 수 있다.
branches: [ develop, feature/* ]
# github pull request 생성시
pull_request:
branches:
- develop # -를 쓴 여러 줄로 여러 브랜치를 명시하는 것도 가능
# 실제 어떤 작업을 실행할지에 대한 명시
jobs:
ci:
# 스크립트 실행 환경 (OS)
# 배열로 선언시 개수 만큼 반복해서 실행한다. ( 예제 : 1번 실행)
runs-on: [ ubuntu-latest ]
# 실제 실행 스크립트
steps:
# uses는 github actions에서 제공하는 플러그인을 실행.(git checkout 실행)
- name: checkout
uses: actions/checkout@v4
# with은 plugin 파라미터 입니다. (java 11버전 셋업)
- name: java setup
uses: actions/setup-java@v2
with:
distribution: 'adopt' # See 'Supported distributions' for available options
java-version: '17'
# run은 사용자 지정 스크립트 실행
- name: run unittest
run: |
./gradlew clean test
CD란?
배포를 자동화하는 작업을 기술해서 빠르고 간편하게 배포
사용 예제
name: 'CD'
on:
push:
branches: [ main ]
jobs:
cd:
runs-on: [ ubuntu-latest ]
steps:
- name: checkout
uses: actions/checkout@v4
- name: java setup
uses: actions/setup-java@v3
with:
distribution: 'adopt' # See 'Supported distributions' for available options
java-version: '17'
- name: run unittest
run: |
./gradlew clean test
- name: deploy to heroku
uses: akhileshns/heroku-deploy@v3.12.12
with:
heroku_api_key: ${{secrets.HEROKU_API_KEY}}
heroku_app_name: "sampleapp-github-actions" #Must be unique in Heroku
heroku_email: "nbcdocker@proton.me"
CI 직접 사용해보기
git repository를 하나 파서 .github/workflows 를 만들어서 run-test.yaml 작성
코드
# Actions 이름 github 페이지에서 볼 수 있다.
name: Run Test
# Event Trigger 특정 액션 (Push, Pull_Request)등이 명시한 Branch에서 일어나면 동작을 수행한다.
on:
push:
# 배열로 여러 브랜치를 넣을 수 있다.
branches: [ develop, feature/* ]
# github pull request 생성시
pull_request:
branches:
- develop # -로 여러 브랜치를 명시하는 것도 가능
# 실제 어떤 작업을 실행할지에 대한 명시
jobs:
build:
# 스크립트 실행 환경 (OS)
# 배열로 선언시 개수 만큼 반복해서 실행한다. ( 예제 : 1번 실행)
runs-on: [ ubuntu-latest ]
# 실제 실행 스크립트
steps:
# uses는 github actions에서 제공하는 플러그인을 실행.(git checkout 실행)
- name: checkout
uses: actions/checkout@v4
# with은 plugin 파라미터 입니다. (java 17버전 셋업)
- name: java setup
uses: actions/setup-java@v2
with:
distribution: 'adopt' # See 'Supported distributions' for available options
java-version: '17'
- name: make executable gradlew
run: chmod +x ./gradlew
# run은 사용자 지정 스크립트 실행
- name: run unittest
run: |
./gradlew clean test
Test 통과!
Test 기록들
CD 직접 사용해보기
git repository를 하나 파서 .github/workflows 를 만들어서 test-pr.yaml 작성
name: test every pr
on:
workflow_dispatch:
pull_request:
permissions:
contents: read
pull-requests: read
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: setup jdk
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x ./gradlew
- name: gradlew test
run: ./gradlew test
Pull Request가 생성되면, ‘gradle test’ 를 진행해서 PR 의 테스트코드가 모두 성공인지 확인
name: Deploy to cloudtype
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Connect deploy key
uses: cloudtype-github-actions/connect@v1
with:
token: ${{ secrets.CLOUDTYPE_TOKEN }}
ghtoken: ${{ secrets.GHP_TOKEN }}
- name: Deploy
uses: cloudtype-github-actions/deploy@v1
with:
token: ${{ secrets.CLOUDTYPE_TOKEN }}
project: # 워크스페이스 이름/프로젝트 이름 ex) nbc.docker/cicd
stage: main
yaml: |
name: # 프로젝트 이름 ex) `cicd`
app: java@17
options:
ports: 8080
context:
git:
url: git@github.com:${{ github.repository }}.git
ref: ${{ github.ref }}
preset: java-springboot
cloudtype 서비스 배포에 필요한 key들을 가지고 바로 배포
위 코드에 ${{ secrets.XXXXX }} 란?
git repository -> Settings -> Secrets and variables -> Actions
New repository secret을 누르면 아래와 같이 나오고 Name과 Secret에 입력하면 된다.