개요
CI/CD 파이프라인 구축 과정에서 발생한 다양한 실수와 오류, 문제의 원인, 그리고 이를 해결한 방법에 대해 상세하게 설명합니다. 주된 목적은 GitHub Actions를 활용하여 애플리케이션의 자동화된 빌드, 테스트, 배포 파이프라인을 구축하는 것입니다. 본 보고서는 구축 과정에서 발생한 문제들을 체계적으로 정리하여 유사한 프로젝트를 진행하는 개발자들에게 도움이 되고자 합니다.
실수 사항, 문제의 원인 및 해결 방법
- Docker 빌드 오류: JAR 파일을 찾을 수 없음
- 오류 메시지:
failed to calculate checksum of ref ... lstat /tmp/buildkit-mount.../build/libs: no such file or directory
- 문제의 원인: Docker 빌드 중 지정한 경로에 JAR 파일이 존재하지 않음.
- 해결 방법:
- JAR 파일이 올바르게 빌드되고 있는지 확인하기 위해 빌드 과정을 추가.
- GitHub Actions 스크립트에 프로젝트 빌드 명령어 추가:
- 코드
- name: Build the project run: ./gradlew build
- Docker Compose 명령어 오류
- 문제의 원인: Docker Compose 파일이 없거나 잘못된 경로에 존재함.
- 해결 방법: EC2 인스턴스에서 올바른 디렉토리로 이동하여 Docker Compose 명령어를 실행.
- 코드
- name: SSH into EC2 and deploy uses: appleboy/ssh-action@v0.1.5 with: host: ${{ secrets.AWS_EC2_HOST }} username: ${{ secrets.AWS_EC2_USER }} key: ${{ secrets.AWS_EC2_KEY }} script: | echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin cd ~/cicd-demo docker rm -f $(docker ps -qa) docker-compose down -v docker-compose up -d docker image prune -f
- DockerHub 로그인 오류
- 문제의 원인: 잘못된 DockerHub 자격 증명 또는 환경 변수 설정 문제.
- 해결 방법: GitHub Secrets에 올바른 DockerHub 사용자 이름과 비밀번호 설정. GitHub Actions에서 이를 사용하여 로그인.
- 코드
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- QEMU 및 Buildx 설정 문제
- 문제의 원인: 다중 아키텍처 빌드를 지원하기 위한 설정 누락.
- 해결 방법: QEMU 및 Buildx 설정 단계를 추가하여 다중 아키텍처 빌드를 지원.
- 코드
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- 환경 변수 누락 및 잘못된 참조
- 문제의 원인: 환경 변수 및 비밀 키 참조 오류.
- 해결 방법: GitHub Secrets에 올바르게 설정된 환경 변수 사용.
- 코드
host: ${{ secrets.AWS_EC2_HOST }}
username: ${{ secrets.AWS_EC2_USER }}
key: ${{ secrets.AWS_EC2_KEY }}
Github Action for deoploy.yaml
name: CI/CD Pipeline
on:
push:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up JDK
uses: actions/setup-java@v2
with:
distribution: 'adopt'
java-version: '17'
- name: Build the project
run: ./gradlew build
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push Docker image
run: |
docker buildx create --use
docker buildx build --platform linux/amd64,linux/arm64 -t hyeseong43/cicd-demo:latest --push .
- name: SSH into EC2 and deploy
uses: appleboy/ssh-action@v0.1.5
with:
host: ${{ secrets.AWS_EC2_HOST }}
username: ${{ secrets.AWS_EC2_USER }}
key: ${{ secrets.AWS_EC2_KEY }}
script: |
echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
cd ~/cicd-demo
docker rm -f $(docker ps -qa)
docker-compose down -v
docker-compose up -d
docker image prune -f
Dockerfile
FROM openjdk:17-jdk-slim-buster
VOLUME /tmp
ARG JAR_FILE=build/libs/cicd-demo-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
docker-compose.yml in Local
version: '3'
services:
web:
image: hyeseong-dev/cicd-demo:latest
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080"
docker-compose.yml in EC2
version: '3.9'
services:
web:
image: hyeseong43/cicd-demo:latest
platform: linux/arm64
ports:
- "8080:8080"
위의 문제들을 해결한 후 CI/CD 파이프라인이 성공적으로 구축되었습니다. 각 단계에서 발생한 문제를 분석하고 해결함으로써 전체 프로세스를 최적화할 수 있었습니다. CI/CD 파이프라인을 구축하는 동안 발생한 실수와 그 해결책을 통해 배운 점이 많습니다.
'여러가지 > 오류' 카테고리의 다른 글
[트러블슈팅] EC2 재시동 후 iptable 맵핑 정보 사라지는 현상 해결 (0) | 2024.06.16 |
---|---|
[트러블슈팅] 80포트 요청을 8080포트로 리다이렉션하기(feat. AWS) (1) | 2024.06.16 |
pyenv 실행 오류 (0) | 2024.03.10 |