Runner
먼저 코드를 입력하기 전에 Git Bash를 통해 EC2 서버에 접속해 다음과 같은 과정을 실행한다.
Setting -> Actions -> Runner -> New self-hosted runner 이후 아래의 코드를 하나씩 입력해준다.
CI/CD
이후 아래와 같은 코드를 작성해준다. Actions -> new workflow에서 자신의 환경에 맞는 workfolw를 선택해준다.
name: Spring Boot Gradle CI/CD
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
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
run: ./gradlew build
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{secrets.DOCKERHUB_USERNAME}}
password: ${{secrets.DOCKERHUB_TOKEN}}
# Docker 이미지 빌드
- name: Docker Image Build
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/dockeract .
# DockerHub Push
- name: DockerHub Push
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/dockeract
# EC2 인스턴스 접속 및 애플리케이션 실행
- name: Application Run
uses: appleboy/ssh-action@v0.1.6
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_KEY }}
script: |
sudo docker kill xenodochial_swirles
sudo docker rm -f xenodochial_swirles
sudo docker rmi ${{ secrets.DOCKERHUB_USERNAME }}/dockeract
sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/dockeract
sudo docker run -p 8080:8080 --name xenodochial_swirles -d ${{ secrets.DOCKERHUB_USERNAME }}/dockeract
각각의 secret key에 대한 설명은 아래와 같다.
DOCKERHUB_USERNAME:
Docker Hub 계정의 사용자 이름을 나타냅니다. Docker 이미지를 빌드하고 푸시할 때 사용됩니다.
Docker Hub에 로그인하고 이미지를 업로드하려면 필요합니다.
DOCKERHUB_TOKEN:
Docker Hub 계정의 액세스 토큰 또는 패스워드를 나타냅니다. 이는 Docker Hub에 로그인할 때 사용됩니다.
보안을 위해 액세스 토큰을 사용하는 것이 좋습니다.
EC2_HOST:
EC2 인스턴스의 호스트 주소(IP 주소 또는 도메인 이름)를 나타냅니다.
SSH 연결을 설정하고 EC2 인스턴스로 접속할 때 사용됩니다.
EC2_USERNAME:
EC2 인스턴스에 SSH로 접속할 때 사용될 유저 이름을 나타냅니다.
대부분의 경우 이는 "ubuntu" 또는 "ec2-user"가 될 것입니다.
EC2_KEY:
EC2 인스턴스에 SSH로 접속할 때 사용될 프라이빗 키파일의 내용입니다.
SSH 연결을 설정하고 EC2 인스턴스로 안전하게 접속할 수 있도록 합니다.
과정
Step 1: 코드 체크아웃
- uses: actions/checkout@v3
Step 2: JDK 설치
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
Step 3: Gradle build
- name: Build with Gradle
run: ./gradlew build
Step 4: Docker login
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{secrets.DOCKERHUB_USERNAME}}
password: ${{secrets.DOCKERHUB_TOKEN}}
Step 5: Docker 이미지 빌드 및 푸시
- name: Docker Image Build
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/dockeract .
- name: DockerHub Push
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/dockeract
Step 6: EC2 인스턴스에 접속해 애플리케이션 실행
- name: Application Run
uses: appleboy/ssh-action@v0.1.6
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_KEY }}
script: |
sudo docker kill xenodochial_swirles
sudo docker rm -f xenodochial_swirles
sudo docker rmi ${{ secrets.DOCKERHUB_USERNAME }}/dockeract
sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/dockeract
sudo docker run -p 8080:8080 --name xenodochial_swirles -d ${{ secrets.DOCKERHUB_USERNAME }}/dockeract
위의 sudo docker kill xenodochial_swirles 등에서 보이는 xenodochial_swirles는 컨테이너의 이름이다. 그냥 이미지 이름과는 다르다.
처음에 Git Bash로 접속한 EC2 환경에거 sudo docker ps를 쳐보면 맨 마지막 부분에 Names가 있는데, 바로 그 부분이다.
주의할 점
EC2를 삭제 후 재구매시 그에 맞는 환경을 secret key에 잘 저장해 놓도록 하자.
'프로젝트 > RanDrive' 카테고리의 다른 글
Random-Drive-Project 기본 MVC 구현(기본 네비게이션) (1) | 2023.10.14 |
---|---|
팀 Repo에 Docker및 CI/CD 구축 (1) | 2023.10.11 |
Docker와 EC2 사용한 배포 (0) | 2023.10.08 |
Docker 적용 (1) | 2023.10.07 |
SA 설계 마치기 (0) | 2023.10.06 |