이번편에서는 지난 CI/CD 구축하기(1) - Github Action 이란? 에서 빌드한 결과를 Docker 이미지로 만들어서 Docker Hub에 push 해보는 과정까지 진행해보겠다.
1. Docker Hub 회원 가입 및 토큰 발행
먼저 Docker Hub에 접속해서 회원 가입 및 로그인을 한다.
Docker Hub에서는 소스 코드를 깃허브에 올려서 관리하는 것 처럼, 빌드한 도커 이미지를 Docker Hub에 저장해서 사용할 수 있도록한다.
Github Action에서 Docker에 이미지를 올리기 위해서 인증 token을 발행한다. 토큰 발행하는 방법은 여기를 참고한다.
2. Github Action Docker 이미지 PUSH
github repository의 Settings -> Secrets 메뉴에 접속하여 New repository secret을 클릭하고 secrets를 등록한다.
- DOCKERHUB_USERNAME : Docker Hub에 등록된 유저 이름을 등록한다.
- DOCKERHUB_TOKEN : Docker Hub에서 발행한 token 값을 등록한다.
다음으로 Github Action에서 기존에 작성한 yml 파일을 수정한다. Login to DockerHub step을 추가하였다.
name: Java CI with Gradle
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{secrets.DOCKERHUB_USERNAME}}
password: ${{secrets.DOCKERHUB_TOKEN}}
파일 수정 후 build 과정을 보면 Login to DockerHub가 성공한 것을 볼 수 있다.
이제 도커 이미지를 빌드하고 push하는 step을 추가한다. 도커 이미지를 빌드하기 위해서는 Dockerfile이 프로젝트에 먼저 작성되어 있어야한다.
gradle로 빌드 시 jar 파일은 build\libs 폴더 아래에 생성된다. build.gradle에 bootJar 영역에 jar 파일 이름을 설정해 두었는데 jar 이름을 "springboot-template"로 설정해두었다.
#실행하기 위한 환경만 필요하면 jre, 개발까지면 jdk
FROM openjdk:11-jdk
#컨테이너 안에 jar 파일은 app.jar 될꺼임
COPY build/libs/springboot-template.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
이제 Github action의 yml 파일에 도커 이미지를 빌드하고 Docker Hub에 push 하는 내용을 추가한다.
name: Java CI with Gradle
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{secrets.DOCKERHUB_USERNAME}}
password: ${{secrets.DOCKERHUB_TOKEN}}
- name: build and release to DockerHub
env:
NAME: goohoon # 계정 명
REPO: spring-template # 레포 이름
run: |
docker build -t $REPO .
docker tag $REPO:latest $NAME/$REPO:latest
docker push $NAME/$REPO:latest
빌드 결과를 확인해보면 성공한 것을 알 수 있다.
Docker Hub repository에 실제로 올라왔는지 확인해보자. 올라왔다면 아래처럼 latest라는 태그가 생긴것을 볼 수 있다.
'DevOps' 카테고리의 다른 글
AWS Elastic Beanstalk (1) - 구축 (0) | 2021.12.12 |
---|---|
Elastic Stack(ELK Stack) 설치 (0) | 2021.11.28 |
CI/CD 구축하기(4) - 애플리케이션 배포 (0) | 2021.09.01 |
CI/CD 구축하기(3) - 텔레그램 알림 설정 (0) | 2021.08.25 |
CI/CD 구축하기(1) - Github Action 이란? (3) | 2021.08.25 |