-
Notifications
You must be signed in to change notification settings - Fork 1
Github Action
-
Github Action 이란? GitHub Actions는 GitHub에서 제공하는 서비스로, 빌드, 테스트, 배포 파이프라인을 자동화할 수 있는 CI(Continuous Integration, 지속 통합)와 CD(Continuous Deployment, 지속 배포) 플랫폼이다. GitHub Actions를 사용하면 GitHub 리포지토리에서 손쉽게 CI/CD 결과를 확인하고 관리할 수 있다. 또한, YAML 포맷을 사용하여 가독성이 높고, 이미 구현되어 있는 수많은 액션을 활용하여 간단하게 CI/CD 플로우를 작성할 수 있다.
-
Github Action의 요소 2-1. Workflow
- 저장소에서 자동화 프로세스를 구성하는 방법을 정의한다.
- 워크플로우는 하나 이상의 job으로 구성된다.
- 각 워크플로우는 .github/workflows/ 디렉토리 내의 .yml 또는 .yaml 파일로 정의된다.
지금 book-server에서는 .github/workflow 안에 build 라는 Workflow가 존재하며 수행되고 있다.
2-2. Events
- 워크플로우를 실행시키는 트리거를 말한다.
- 예를 들어, push, pull_request, schedule 등 다양한 이벤트가 있다.
현재 book-server의 .github/workflow/build.yaml에서
on:
push:
branches:
- main
이렇게 정의되어 있는데, 이것은 main 브랜치에 push되었을 때를 나타낸다.
on:
schedule:
- cron: '0 0 * * *'
이런 식으로 cron을 통해 일정 시간마다 수행하는 것도 가능하다. 2-3. Jobs
- 워크플로우 내에서 실행되는 일련의 스텝으로 구성된 단위이다.
- 각 작업은 다른 운영체제에서 실행될 수 있다 (runs-on으로 지정).
- 기본적으로, 작업은 병렬로 실행되지만, needs 키워드를 사용하여 종속성을 지정할 수 있다.
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
이것은 job의 이름은 build이며 우분투 환경에서 여러 스텝을 수행하겠다는 것을 나타낸다. 2-4. Steps
- 각 작업(job) 내에서 실행되는 명령 또는 action이다.
- 순서대로 실행된다.
- 스텝은 run 키워드를 사용하여 직접 쉘 명령을 실행하거나, uses 키워드를 사용하여 준비된 Action을 실행할 수 있다.
밑에 정의된 yaml에서 steps 아래에 배열로 된 부분이 실행되는 step이다. 2-6. Runners
- 워크플로우를 실행하는 환경이다.
- GitHub은 ubuntu-latest, macos-latest, windows-latest 등의 러너를 제공하지만, 자체 호스팅 러너를 설정하여 사용할 수도 있다.
아래의 yaml에서는 runs-on: ubuntu-latest
로 지정되어 있다.
2-7. Secrets
- 암호, 토큰, API 키와 같은 민감한 정보를 안전하게 저장하고 워크플로우에서 사용할 수 있게 해주는 기능이다.
아래의 yaml에서 ${{ secrets.SONAR_TOKEN }}
등이 secret으로 정의된 부분이다.
name: Build // workflow 이름
on: // 이벤트 정의
push:
branches:
- main // 메인 branch에 push 될 때, 해당 workflow를 수행하겠다.
jobs:
build:
name: Build // job의 이름을 build이다.
runs-on: ubuntu-latest // ubuntu 환경에서 수행
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis // 레포의 코드를 실행되는 runner에 체크아웃.
- name: Setup JDK 11 //JDK 11 설정
uses: actions/setup-java@v1
with:
java-version: 11
- name: Cache SonarQube packages
uses: actions/cache@v1 // actions/cache@v1 외부 액션 사용
with: // 매개변수 지정
path: ~/.sonar/cache // 캐시할 디렉터리 지정
key: ${{ runner.os }}-sonar // 캐시의 고유한 key 지정
restore-keys: ${{ runner.os }}-sonar // 캐시 복원 시 참조할 대체 key 지정
- name: Cache Gradle packages
uses: actions/cache@v1
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
restore-keys: ${{ runner.os }}-gradle
- name: Build and analyze
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
run: ./gradlew build sonar