CI/CD란?
개발을 하다보면 여러가지 브런치에서 통합이 이루어지고 통합된 브런치를 바탕으로 배포까지 진행한다.
근데 이 과정들이 귀찮은 것이다. 이 과정은 사실 개발이라기 보다는 단순 반복적인 일이기 때문에, 소프트웨어 개발에 집중하기 위한 만들어진 개념이라고 생각한다.
github Action?
github Actions은 gitHub에서 호스팅하는 자동화 플랫폼!
코드의 빌드,테스트,배포,그리고 사용자 정의 워크플로우를 자동화하는 데 사용됨.
GitHub Actions은 소스 코드와 함께 저장소에 포함된 YAML 파일에 기반하여 작동!
내가 만든 코드 + 명령서.yml 이라고 생각하면 된다. 플랫폼에서는 명령서에 있는 다양한 요구대로 내가 만든 코드들이 실행되게 하는 것이다.
자바라는 플랫폼을 쓰려면 자바의 문법을 알아야하듯, gitHub Actions를 쓰기 위해서는 gitHub Actions에서 쓰는 문법들을 알아야한다.
주요 문법(거창하게 문법이지 사실 그냥 개념)
# 이곳이 github actions 플랫폼이며 곧 runnuer라고도 함
name: CI
# dev로 push 되었을 때 실행해~! Trigger!
on:
push:
branches: [dev]
# 해야할 작업들!
jobs:
build:
runs-on: ubuntu-latest
# 내가 만든 스프링부트 앱은 반드시 데이터베이스랑 연결을 해야 실행되므로
services:
mysql:
image: mysql:latest
env:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: testdb
MYSQL_USER: testuser
MYSQL_PASSWORD: testpassword
ports:
- 3306:3306
# 내가 만든 스프링부트 환경변수가 셋팅 되어있으므로 환경 변수 셋팅!
env:
DB_HOST: localhost
DB_NAME: testdb
DB_USERNAME: testuser
DB_PASSWORD: testpassword
# name 이 작업의 이름 actions/checkout@v2은 GitHub 리포지토리에서 소스 코드를 가져오는 역할
steps:
- name: Checkout code
uses: actions/checkout@v2
# Java 개발 환경을 설정을 내가 만든 스프링부트 환경과 동일하게 만들기!
- name: Set up JDK 17
uses: actions/setup-java@v2
with:
java-version: '17'
distribution: 'adopt'
- name: Print environment variables
run: |
echo "DB_HOST=${DB_HOST}"
echo "DB_NAME=${DB_NAME}"
echo "DB_USERNAME=${DB_USERNAME}"
echo "DB_PASSWORD=${DB_PASSWORD}"
# 빌드 실행 명령어!
- name: Build with Gradle
run: |
chmod +x gradlew
./gradlew build
shell: bash
이렇게 쓰면 되는데, 나같은 경우에는 스프링 부트에 환경변수를 셋팅했고, mysql 데이터베이스와 연동되어있기에 위에 같이 셋팅하였다. 왜냐하면 빌드할 때 데이터베이스의 정보가 없으면 실행 실패하기 때문이다.
그렇다면 workflow는 어디서 어떻게 만들까?


이름 작성 후 Commit changes...를 누르면 된다.


이렇게 생성된 것을 확인할 수 있다.