자동화는 깃 push 하면 깃에서 도커 이미지를 빌드하고, 도커 이미지를 서버컴퓨터에 pull한다.
이후 서버 컴퓨터에 해당 이미지가 서비스가 가능한지 아닌지 판단이후 가능하다가면 해당 이미지로 적용후 예전 이미지는 지운다. 이게 자동 배포의 방법. (port는 예를 들자면 구형 8082, 신형 8083으로 번갈아가면서 사용되게함.) 그니까 신형이 나중에 구형이 된다면 새로들어온 놈은 8082에 들어가게 됨.
그니까 이게 자동으로 되게 해야됨.
자동화를 위해서 socat
과 python
설치
yum install socat -y
yum install python -y
그리고 기존 이미지 삭제
git action으로 동작하기 때문에
프로젝트 루트 디렉토리에 github/workflows/deploy.yml
name: 'deploy'
on:
push:
paths:
- '.github/workflows/**'
- 'src/**'
- 'build.gradle'
- 'Dockerfile'
- 'readme.md'
- 'infraScript/**'
branches:
- 'main'
jobs:
makeTagAndRelease:
runs-on: ubuntu-latest
outputs:
tag_name: ${{ steps.create_tag.outputs.new_tag }}
steps:
- uses: actions/checkout@v4
- name: Create Tag
id: create_tag
uses: mathieudutour/github-tag-action@v6.1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.create_tag.outputs.new_tag }}
release_name: Release ${{ steps.create_tag.outputs.new_tag }}
body: ${{ steps.create_tag.outputs.changelog }}
draft: false
prerelease: false
buildImageAndPush:
name: 도커 이미지 빌드와 푸시
needs: makeTagAndRelease
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Docker Buildx 설치
uses: docker/setup-buildx-action@v2
- name: 레지스트리 로그인
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: set lower case owner name
run: |
echo "OWNER_LC=${OWNER,,}" >> ${GITHUB_ENV}
env:
OWNER: "${{ github.repository_owner }}"
- name: application-secret.yml 생성
env:
ACTIONS_STEP_DEBUG: true
APPLICATION_SECRET: ${{ secrets.APPLICATION_SECRET_YML }}
run: echo "$APPLICATION_SECRET" > src/main/resources/application-secret.yml
- name: 빌드 앤 푸시
uses: docker/build-push-action@v3
with:
context: .
push: true
tags: |
ghcr.io/${{ env.OWNER_LC }}/${도커이미지명}:${{ needs.makeTagAndRelease.outputs.tag_name }},
ghcr.io/${{ env.OWNER_LC }}/${도커이미지명}:latest
deploy:
runs-on: ubuntu-latest
needs: [ buildImageAndPush ]
steps:
- name: AWS SSM Send-Command
uses: peterkimzz/aws-ssm-send-command@master
id: ssm
with:
aws-region: ${{ secrets.AWS_REGION }}
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
instance-ids: "${AWS-EC2-인스턴스-ID}"
working-directory: /
comment: Deploy
command: |
mkdir -p /dockerProjects/${도커이미지명}
curl -o /dockerProjects/${도커이미지명}/zero_downtime_deploy.py https://raw.githubusercontent.com/${깃허브-아이디}/${깃허브-리포지터리명}/main/infraScript/zero_downtime_deploy.py
chmod +x /dockerProjects/${도커이미지명}/zero_downtime_deploy.py
/dockerProjects/${도커이미지명}/zero_downtime_deploy.py
기본 틀이고
여기서 다 쓰면 된다.
그래서 난 이렇게 다 입력해서 저장함.
이제 push 하면 action으로 저 친구를 읽고 실행하고 이미지 빌드하겠지.
여튼 그렇게 하고,
루트 디렉토리에서 파이썬 코드도 추가함.
그리고 시도해봤는데,
도커 이미지 빌드에서 문제가 생김. 의존성 주입을 세개정도 했었는데 거기서 문제가 생긴 것 같기도 하고..
의존성 수정 후에 다시 시도했는데
됐음.
여기 릴리즈랑 패키지 생김.
이걸로 버전관리를 한다고 함!
그리고 서버 컴퓨터와 만든 도메인으로 접속해서 확인해보면 된다..
'Coding History' 카테고리의 다른 글
내 소개 사이트 제작중 생긴 문제 해결.nginx 도메인 설정, https 적용 후 재배포 (1) | 2024.12.20 |
---|---|
DB 효율 테스트 (JMeter) (1) | 2024.12.15 |
AWS 서버 구성, 도메인 연결. (1) | 2024.11.13 |
서버 DB 영속성 부여 -> 그냥 연습용 예제 (0) | 2024.11.11 |
git hub action (CI / CD) (1) | 2024.11.07 |