CI/CD
서비스 기능 개발 이후에는 빌드, 테스트, 소스 병합, 릴리즈, 배포라는 일련의 과정을 거친다. 하지만 이런 작업들은 생각보다 굉장히 번거로운 작업이며 프로젝트 규모가 클수록 괴로움은 증가한다.
CI/CD는 Continuous Integration, Continuous Deliver, Continuous Deployment를 나타내는 용어이며 위 과정들을 자동화하여 불필요한 공수를 줄이고 보다 빠른 서비스 제공을 할 수 있는 효과를 가질 수 있다.
CI/CD 구축을 지원하는 툴은 생각보다 많다.
- Jenkins
- Travis CI
- Circle CI
- Google Cloud Build
- AWS CodeBuild
- …
각 툴은 요금 체계부터 특성이 모두 다르므로 프로젝트에 적합한 것을 선택하면 된다. 이 포스팅에서는 github action을 사용하여 구축을 시도한다.
Github Action이란?
github action은 18년에 공개되어 베타 테스트를 거쳐 19년 부터 서비스를 하고 있는 비교적 최신 기술이다. 아래는 github에서 제공하는 개요이다.
Automate, customize, and execute your software development workflows right in your repository with GitHub Actions. You can discover, create, and share actions to perform any job you’d like, including CI/CD, and combine actions in a completely customized workflow.
github action은 ci/cd만을 위한 도구는 아니고, 다양한 workflow를 작성할 수 있다고 되어있다. 일례로 cron 식을 사용하여 batch job을 실행할 수 있는 기능을 제공한다. 또한, 이는 github 자체에서 제공하는 기능이기 때문에 다른 서드파티를 사용하는 것보다 관리해야할 포인트가 줄어든다는 이점을 가진다.
Workflow 작성하기전에!
저는 자바 11로 jdk도 11로 시작했습니다.
프로젝트에서 우클릭 후 Directory 클릭 후 build.gradle을 만들어 주고 필요한 의존성 주입을 해주고 링크빌리드 클릭하면 강제로 주입되게 됩니다.
src폴더를 만들고, main과 test폴더를 만들어서 하위에 폴더 완성하면 자동 주입 완성!!
만약 적용이 되지 않을 경우 "Mark Directoory as"에서 선택!!
없을 경우 프로젝트 구성에서 모듈을 클릭해서 주입시킬 수 있다!
먼저 인텔리제이의 폴더 구조
이런식으로 디렉토리가 구성되어있는지 확인이 필요합니다!
저는 디렉토리가 하나 더 있어서 몇 주... 고생했습니다...
물론 디렉토리에서 하는 방법도 있지만, action에서 빌드를 인식을 하지 못하는 단점이 있어
폴더 안에서 꺼내와서 실행할 수 는 있지만, 실행시키는 과정에서 에러가 뜨게됩니다...
결국 다시 처음부터 만들기 시작했습니다.
227...다 액션 시도..입니다 ㅠㅠㅠ
Workflow 작성하기
저는 java with gradle를 선택했습니다.
name: Deploy to Amazon EC2
on:
# push:
# branches: [ "main" ]
pull_request:
branches: [ "feature" ]
이름은 자기 마음대로 할 수 있습니다.
먼저 저희 프로젝트는 주로 feature에서 개발을 진행하고, 실험한 후 dev로 옮긴 후 변동 사항이 없으면 main으로 옮기는 식으로 깃 플로우를 정했습니다.
permissions:
contents: read
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
environment: production
steps:
# 기본 체크아웃
- name: Checkout
uses: actions/checkout@v2
# JDK 11 세팅
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: '11'
distribution: 'temurin'
# Gradle build (Test 제외)
- name: Build with Gradle
uses: gradle/gradle-build-action@(깃허브 액션에서 주는 것 이용!!)
with:
arguments: clean build -x test
저희는 test는 제외했습니다. 기본 체크 아웃 하고 jdk 11의 @1 이나 @2는 구성에 따라 달라서 맞는 방식을 찾는게 중요합니다.!
- name: Build with Gradle
uses: gradle/gradle-build-action@v2
with:
gradle-version: 7.5.1
arguments: build
빌드가 되지 않을 경우 버전을 주입해서 시도해보는 것도 좋습니다!
# 디렉토리 생성
- name: Make Directory
run: mkdir -p deploy
# Jar 파일 복사
- name: Copy Jar
run: cp ./build/libs/*.jar ./deploy
위 사항을 넣지 않아도 잘 되는건 확인했지만, 저는 혹시라도 문제가 발생할 수도 있어 넣었습니다.
여기까지 했다면, 깃 액션에서 기본 구조는 완성했습니다!
# (2) application.yml 추가
- run: touch ./src/main/resources/application.yml
- run: echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.yml
- run: cat ./src/main/resources/application.yml
저희는 실행을 yml파일로 하기 때문에 yml을 넣어주었습니다!
깃허브 레파지토리 설정에 들어가서 키를 입력해주면 됩니다!
1차완성 코드
name: Deploy to Amazon EC2
on:
# push:
# branches: [ "main" ]
pull_request:
branches: [ "feature" ]
env:
APPLICATION: ./src/main/resources/application.yml
permissions:
contents: read
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
environment: production
steps:
# (1) 기본 체크아웃
- name: Checkout
uses: actions/checkout@v2
# (2) application.yml 추가
- run: touch ./src/main/resources/application.yml
- run: echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.yml
- run: cat ./src/main/resources/application.yml
# (3) JDK 11 세팅
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: '11'
distribution: 'temurin'
# (4) Gradle build (Test 제외)
- name: Build with Gradle
uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
with:
arguments: clean build -x test
# (5) 디렉토리 생성
- name: Make Directory
run: mkdir -p deploy
# (6) Jar 파일 복사
- name: Copy Jar
run: cp ./build/libs/*.jar ./deploy
./src/main/resources/application.yml -> 파일 위치 설정!! 확인!!
디렉토리안에서 진행하시는 분들은
./디렉토리 파일명/src/main/resources/application.yml 이렇게 진행하게 되면 됩니다!
'개발 > sw' 카테고리의 다른 글
인스턴스IP 도메인 연결 (0) | 2023.03.31 |
---|---|
Codedeploy SQL 오류 (0) | 2023.03.30 |
CodeDeploy (0) | 2023.03.30 |
CI/CD 구축 github action (3) (0) | 2023.03.28 |
CI/CD 구축 github action (2) (0) | 2023.03.28 |