Notice
Recent Posts
Recent Comments
Link
celina의 이것저것
[cicd] 깃허브액션 cicd구축 본문
반응형
1. 워크플로우 파일 생성: .github/workflows/ 디렉터리 안에 작성해야한다.
name: CI/CD using GitHub Actions & Docker
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- name: Print working directory
run: pwd
# 1. Set up JDK 17
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Set Properties
run: |
mkdir -p src/main/resources
echo "${{ secrets.APPLICATION_YML }}" | base64 --decode > src/main/resources/application.properties
find src
# 2. Build the Spring Boot application
- name: Grant execute permission for gradlew
run: chmod +x ./gradlew
- name: Clean and Build with Gradle Wrapper
run: ./gradlew bootJar
# 3. Get current time
- name: Get current time
uses: 1466587594/get-current-time@v2
id: current-time
with:
format: YYYY-MM-DDTHH-mm-ss
utcOffset: "+09:00"
- name: Show Current Time
run: echo "CurrentTime=${{ steps.current-time.outputs.formatted }}"
# 4. Docker image build
- name: docker image build
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/munhwahansang_server:latest .
# 5. DockerHub login
- name: docker login
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
# 6. DockerHub image push
- name: docker Hub push
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/munhwahansang_server:latest
- name: AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-2
# 7. EC2 인스턴스 접속 및 애플리케이션 실행
- name: Application Run
uses: appleboy/ssh-action@v0.1.6
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_SSH_PRIVATE_KEY }}
script: |
sudo docker ps -q | xargs --no-run-if-empty sudo docker stop
sudo docker ps -a -q | xargs --no-run-if-empty sudo docker rm
sudo docker rmi ${{ secrets.DOCKERHUB_USERNAME }}/munhwahansang_server || true
sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/munhwahansang_server:latest
sudo docker run -d -p 443:443 \
--name munhwahansang_server \
-v /etc/letsencrypt:/etc/letsencrypt:ro \
-e SPRING_DATASOURCE_URL=${{ secrets.DB_URL }} \
-e SPRING_DATASOURCE_USERNAME=${{ secrets.DB_USERNAME }} \
-e SPRING_DATASOURCE_PASSWORD=${{ secrets.DB_PASSWORD }} \
${{ secrets.DOCKERHUB_USERNAME }}/munhwahansang_server:latest
2. GitHub Secrets 설정
이걸 해주는 이유는 저 yml파일에서 비밀번호, 같은 민감한 정보가 외부에 노출되지 않게 하기위해 따로 관리를 하는것이다.

3. Dockerfile 작성: Spring Boot 애플리케이션을 Docker 컨테이너로 실행하기 위한 기본 설정이 필요하다.
FROM openjdk:17
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
4. ec2인스턴스에 도커설치
Docker Hub Push 워크플로 vs EC2 배포 워크플로
| 목적 | 이미지를 Docker Hub에 저장 | 이미지를 EC2에 배포 및 실행 |
| Docker Hub 사용 | 최종 결과물을 저장소로 업로드 | EC2가 이미지를 가져오기 위한 중간 저장소 |
| EC2 연결 | 필요 없음 | 필요 (SSH 연결 등) |
| Docker 컨테이너 실행 | 로컬 또는 다른 환경에서 수동 실행 | EC2 서버에서 컨테이너 자동 실행 |
| 복잡도 | 상대적으로 단순 | 비교적 복잡 (EC2 설정 및 연결 필요) |
| CI/CD 파이프라인 수준 | CI만 포함 (배포는 수동) | CI/CD 모두 포함 (자동 배포) |
참고
GitHub Action으로 CI/CD 구축하기
GitHub Action을 통해 이미지 빌드 및 업로드, 컨테이너 배포를 수행하는 파이프라인을 구축해보겠습니다.
velog.io
https://growth-coder.tistory.com/220
[Spring] 깃허브 액션으로 CI/CD 구축해보기 (스프링 부트)
CI/CD는 Continuous Integration/Continuous Delivery의 준말로 지속적인 통합과 지속적인 전달을 의미한다. 지속적인 통합(CI)은 지속적으로 품질 관리를 적용하는 프로세스를 실행시키는 것이다. 작은 단위
growth-coder.tistory.com
'9oormthonUNIV > [kakao x goorm] 구름톤 유니브 단풍톤' 카테고리의 다른 글
| Spring Boot에서 파라미터 스토어 사용 (1) | 2024.11.27 |
|---|---|
| [s3] action does not apply to any resource(s) in statement (0) | 2024.11.27 |
| docker와 ec2의 관계 (1) | 2024.11.27 |
| Failed to determine a suitable driver class, rds생성 및 ec2연동 (0) | 2024.11.27 |
| [ssh] Permission denied (publickey) 에러 (0) | 2024.11.27 |