▪︎ Git Repo 만들기
- SpringBoot로 “hello” GET 요청이 들어오면 “Hello World!” 문자열을 반환하는 아아아주 간단한 애플리케이션 구현
- Intellij에서 Github Commit 해보기
- Help → Find Action..
mac 단축기 ‘command + shift + a’ 라는데 이상한 terminal만 뜸..
- 그리고 만들고자 하는 Repo 이름 적고 설명 적고 ‘Share’로 동기화한 후에 Commit 하고자 하는 폴더 지정 후에 ‘Commit’!
▪︎ Github Action 구성해보기
- 깃허브 레포의 Action - Java with Maven
- maven.yml 작성
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: <https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven>
name: Java CI with Maven
on:
push:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 17
uses: actions/setup-java@v1
with:
java-version: 17
- name: Build with Maven
run: mvn -B package --file pom.xml -DskipTests
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
- name: Build and push
env:
NAME: uh2959
REPO: cn-action
run: |
docker build -t $REPO .
docker tag $REPO:latest $NAME/$REPO:latest
docker push $NAME/$REPO:latest
- 도커 허브 계정 같은 민감한 정보인 경우 하드코딩의 보안 취약점을 보완하기 위해 github의 secrets로 설정하여 인자 값 전달\
- 그리고 start commit
- 가보자 가보자!!
- …는 실패의 연속
- 보이십니까.. 연속된 빨간불..
- 울고 싶었습니다..🥲 아니 울었습니다
- 그래도 불굴의 의지🔥를 가지고..
- 결국 초록불 성공!!!
- 위 과정의 트러블 슈팅은 맨 마지막에서 →→
- 도커 허브에 정상적으로 Push 되었는지도 확인!!
▪︎ 소스코드 수정 커밋 발생 시 자동 빌드 확인
- HelloController.java에서 Get 메소드의 “Hello World!” → “Hello the new World!” 로 수정
- Commit → Push
- 자동 빌드 확인
- 성공!!
▪︎ 트러블 슈팅
▪︎ 아 물론 야믈파일 작성 잘못
- Workflow
→ Github repo의 ‘master’ 브랜치에 무언가 push가 된다면
→ 스프링 부트 애플리케이션을 jar 파일로 maven 빌드하고
→ jar 파일을 도커 image로 빌드하고
→ docker hub에 push 한다.
를 Github Action에 yaml 파일로 정의를 하여 자동화를 구현한다.
- maven.yml
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: <https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven>
name: Java CI with Maven
on:
push:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 17
uses: actions/setup-java@v1
with:
java-version: 17
- name: Build with Maven
run: mvn -B package --file pom.xml -DskipTests
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
- name: Build and push
env:
NAME: uh2959
REPO: cn-action
run: |
docker build -t $REPO .
docker tag $REPO:latest $NAME/$REPO:latest
docker push $NAME/$REPO:latest
- 템플릿 라인별 해석
- name : action의 이름 정의 (workflow의 이름) / 명령어 이름
- on : workflow의 이벤트 방식을 정의 (push, MR, PR 이벤트 등등..)
- jobs : 단계적인 job을 정의
- 여러 가지를 정의할 시 수평적(parallel)으로 동작
- need를 명시하면 순차적으로 수행
- build : job의 이름
- runs-on : job을 실행할 환경 (windows, mac, ubuntu..)
- steps : job의 명령 집합
- uses : 또 다른 템플릿의 action 호출
- run : 실행할 명령어 라인
▪︎ Dockerfile 미작성 - 왜 만들지 않았을까..
- Dockerfile
FROM openjdk:15.0.2
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","app.jar"]
'CI/CD' 카테고리의 다른 글
Jenkins Back-End Gradle Build (0) | 2022.12.13 |
---|---|
Jenkins Webhook 연동 (0) | 2022.12.12 |
ArgoCD Helm 설치 & 테스트 (0) | 2022.12.10 |
Jenkins 환경 설정 및 빌드 테스트 (0) | 2022.12.09 |
Jenkins Helm 설치 (0) | 2022.12.09 |