Github Actions
Github 에서 제공하는 CI / CD 툴로 코드 저장소 (Repository) 에 이벤트 (Event) 가 발생하였을 때 구성해둔 Workflow 가 실행되면서 프로젝트를 빌드 및 테스트 후 배포까지 진행되는 서비스이다.
CI / CD 란?
CI (Continuous Integration) : 지속적인 통합이라는 뜻으로 Application 의 새로운 코드 변경 사항을 정기적으로 Build 및 Test 하여 공유 Repository 에 통합되는 것을 의미한다.
CD (Continuous Delivery / Deploy) : 지속적인 배포라는 뜻으로 CI 를 넘어 Production 레벨까지 자동으로 배포하는 것을 의미한다.
구성 요소
워크플로우 (Workflow)
하나 이상의 Job 으로 구성되고 Event 에 의해 트리거될 수 있는 자동화된 프로세스.
.github/workflows 폴더 아래에 YAML 형식으로 저장되며 하나의 Repository 에 여러 개의 Workflow 가 존재할 수 있다.
이벤트 (Event)
Workflow 를 실행하는 특정 조건이나 규칙.
설정 가능한 이벤트는 아래에서 확인할 수 있다.
https://docs.github.com/ko/actions/using-workflows/events-that-trigger-workflows
작업 (Job)
Workflow 를 구성하는 하나의 실행 단위.
단계 (Step)
Job 내에 존재하는 순차적인 단계.
Command 를 날리거나 특정 Script 를 실행할 수 있다.
액션 (Action)
작업 단위를 재사용이 가능하도록 만든 실행 단위.
하나의 Repository 내에서 여러 Workflow 에 걸쳐 공유가 가능하고, Github Marketplace 에 있는 공용 action 을 가져와 사용할 수도 있다.
러너 (Runner)
Workflow 를 실행하는 실제 서버.
각 Runner 는 한 번에 한 개의 Job 을 실행할 수 있고 실행 환경에 따라 Github-hosted runner / Self-hosted runner 로 나뉜다.
생성 방법
Repository 에 Actions 탭에 들어가서
New workflow 를 작성하는 페이지에 들어가면
직접 새로 작성할수도 있고 어느 정도 가이드 코드가 짜여진 YAML 파일을 생성할 수 있다.
(YAML 예시)
name: Java CI with Gradle
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
uses: gradle/gradle-build-action@bd5760595778326ba7f1441bcf7e88b49de61a25 # v2.6.0
with:
arguments: build
- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: testServer
path: build/libs/"Project_name"-0.0.1-SNAPSHOT.jar
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- name: Download artifact
uses: actions/download-artifact@v2
with:
name: testServer
path: build/libs/
- name: Deploy to EC2
run: |
echo "${{ secrets.SSH_PRIVATE_KEY }}" > mykey.pem
chmod 600 mykey.pem
scp -i mykey.pem -o StrictHostKeyChecking=no build/libs/"Project_name"-0.0.1-SNAPSHOT.jar ${{ secrets.SSH_USER }}@${{ secrets.SERVER_IP }}:/home/${{ secrets.SSH_USER }}/testServer.jar
ssh -i mykey.pem -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SERVER_IP }} "pgrep java | xargs kill -9; nohup java -jar /home/${{ secrets.SSH_USER }}/testServer.jar > app.log 2>&1 &"
https://docs.github.com/ko/actions/using-workflows/workflow-syntax-for-github-actions
프로젝트에 맞게 코드 작성을 하고 나면
workflow 에 빌드 및 테스트 진행사항이 표시 되고
상세 내역도 확인할 수 있다.
아무 문제가 없다면 build, deploy 작업이 workflow 에 적혀진대로 수행되며
문제가 발생하면 이런 식으로 빨간색 x 로 표시되어 에러 내역까지 확인이 가능하다.
참고
https://brownbears.tistory.com/597
'개발 ━━━━━ > Dev' 카테고리의 다른 글
[Docker] MySQL 컨테이너를 이미지화 하여 Docker Hub 에 push 하기 (0) | 2023.12.04 |
---|---|
Github Actions 를 이용하여 AWS EC2 에 SpringBoot 애플리케이션 CI/CD 구축 (0) | 2023.09.27 |
WebSocket 웹소켓 (1) | 2023.09.21 |
[SQL] SQL 문법 - ➁ (0) | 2023.08.05 |
[SQL] SQL 문법 - ➀ (0) | 2023.08.04 |