
우선 도커 허브 계정이 필요하므로
깃허브 접속 -> 코드 저장소 이동후 settings -> Secrets and variables -> Actions -> New repository secret -> DOCKER_PASSWORD,DOCKER_USERNAME 하고 각자 유저이름과 비밀번호 작성후 생성

.github/workflow/deploy.yml 생성 후 작성
name: Build and Push Docker Image
on:
push:
branches:
- main # main 브랜치에 푸시될 때 트리거
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out the repository
uses: actions/checkout@v2
- name: Set working directory # 작업 디렉토리를 명시적으로 설정
run: cd ${{ github.workspace }}
- name: Verify nginx.docker.conf exists
run: ls -l ${{ github.workspace }}/nginx.docker.conf
- name: Log in to Docker Hub
run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
- name: Build the Docker image
run: docker build --no-cache -f ./Dockerfile . -t khm0930/cloud_storage_web:${{ github.sha }}
- name: Push the Docker image to Docker Hub
run: docker push khm0930/cloud_storage_web:${{ github.sha }}
- name: Set latest tag on Docker Hub
run: docker tag khm0930/cloud_storage_web:${{ github.sha }} khm0930/cloud_storage_web:latest
- name: Push latest tag to Docker Hub
run: docker push khm0930/cloud_storage_web:latest
- name: Check out Kubernetes deployment repo
uses: actions/checkout@v2
with:
repository: khm0930/cloud_storge-Kubernetes-deployment
token: ${{ secrets.K8S_DEPLOY_REPO_TOKEN }}
path: kubernetes-deployment
- name: Update Deployment YAML with new image
run: |
sed -i 's|khm0930/cloud_storage_web:.*|khm0930/cloud_storage_web:${{ github.sha }}|g' kubernetes-deployment/cloudstorge-deployment.yml
- name: Commit and Push changes to deployment repo
run: |
cd kubernetes-deployment
git config --global user.name "github-actions"
git config --global user.email "actions@github.com"
git add cloudstorge-deployment.yml
git commit -m "Update deployment image to ${{ github.sha }}"
git push https://x-access-token:${{ secrets.K8S_DEPLOY_REPO_TOKEN }}@github.com/khm0930/cloud_storge-Kubernetes-deployment.git
1) 워크플로우 트리거 설정
on:
push:
branches:
- main
main 브랜치에 코드가 푸시될 때마다 이 워크플로우가 자동으로 실행됩니다. 이를 통해 코드 변경이 있을 때마다 최신 상태의 애플리케이션이 빌드 및 배포되도록 설정합니다.
2) 작업(job) 설정
jobs:
build:
runs-on: ubuntu-latest
이 워크플로우는 build라는 작업(job)으로 구성되어 있으며, ubuntu-latest 환경에서 실행됩니다.
3)작업 단계별 설명
3-1) 리포지토리 체크아웃
- name: Checkout the repository
uses: actions/checkout@v2
현재 리포지토리의 코드를 가져옵니다.
3-2) 작업 디렉토리 설정 및 nginx 설정 파일 검증
- name: Set working directory
run: cd ${{ github.workspace }}
- name: Verify nginx.docker.conf exists
run: ls -l ${{ github.workspace }}/nginx.docker.conf
3-3) Docker Hub 로그인
- name: Log in to Docker Hub
run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
GitHub Secrets에 저장된 Docker Hub 자격 증명을 사용하여 로그인합니다.
3-4) Docker 이미지 빌드 및 푸시
- name: Build the Docker image
run: docker build --no-cache -f ./Dockerfile -t khm0930/cloud_storage_web:${{ github.sha }} .
- name: Push the Docker image to Docker Hub
run: docker push khm0930/cloud_storage_web:${{ github.sha }}
- name: Set latest tag on Docker Hub
run: docker tag khm0930/cloud_storage_web:${{ github.sha }} khm0930/cloud_storage_web:latest
- name: Push latest tag to Docker Hub
run: docker push khm0930/cloud_storage_web:latest
- name: Checkout Kubernetes deployment repo
uses: actions/checkout@v2
with:
repository: khm0930/cloud_storge-Kubernetes-deployment
token: ${{ secrets.K8S_DEPLOY_REPO_TOKEN }}
path: kubernetes-deployment
deployment.yml 파일에서 Docker 이미지 태그를 새로 빌드된 이미지의 태그로 업데이트합니다.
3-6) 업데이트된 파일을 GitHub에 푸시
- name: Commit and Push changes to deployment repo
run: |
cd kubernetes-deployment
git config --global user.name "github-actions"
git config --global user.email "actions@github.com"
git commit -am "Update deployment image to ${{ github.sha }}"
git push https://x-access-token:${{ secrets.K8S_DEPLOY_REPO_TOKEN }}@github.com/khm0930/cloud_storge-Kubernetes-deployment.git
업데이트된 deployment.yml 파일을 배포 리포지토리에 커밋하고 푸시하여, Argo CD와 같은 GitOps 도구가 이를 자동으로 Kubernetes 클러스터에 반영할 수 있도록 합니다.
4) 워크플로우의 작동 방식 요약
GitHub Action

DockerHub

Argo CD UI

이렇게 푸시 한번으로 자동으로 최신 이미지로 업데이트하여 배포되는 자동화 CI/CD를 구축하였습니다.