용어
CI : 지속 통합
CD : 지속 배포
작동 순서
- 어떤 프로그램을 버젼업등 손 좀 보고 github에 push하면
- github action이 도커 이미지를 만들고
그걸 도커허브에 push하고 - aws등 클라우드 컴퓨터에 접근해서 위의 해당 도커 이미지를 docker- compose로 실행시킨다.
이렇게 하면 개발자는 git에 push만하면 그 다음 단계인
이미지 빌드랑 배포는 워크플로우 파일에 작성된데로 진행된다
이걸 하기위해서 프로잭트 폴더 안에
위의 작업이 명시된 yaml파일(워크플로우)을 작성해야된다.
아래가 이번 프로잭트 때 작성한 yaml파일이고 이 파일은 반드시 .github폴더안에 workflows폴더안에 있어야한다.
.github/workflows
name: ci-pipeline
on:
push:
branches:
- main
- dev
jobs:
#Image Build하여 DockerHub에 Push
continuos-integration:
runs-on: ubuntu-latest
steps:
- 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.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
id: docker_build
uses: docker/build-push-action@v4
with:
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/nest-ms:latest
#platforms: linux/arm64
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
#CD
continuos-deploy:
needs: [continuos-integration]
name: continuos deploy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: copy file via ssh password
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ec2-user
key: ${{ secrets.PRIVATE_KEY }}
port: 22
source: 'docker-compose.yaml'
target: '/home/ec2-user/'
- name: executing remote ssh commands using password
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ec2-user
key: ${{ secrets.PRIVATE_KEY }}
port: 22
script: 'docker-compose pull && docker-compose up -d'
일단 시작하면 name 키를 작성해준다 (name: 워크플로우 이름)
name 키를 생략하면 파일 경로가 워크플로우 이름으로 사용되기 때문에 반드시 설정해줘야하는 것은 아니지만 name키를 명시하여 워크플로우에 알맞은 이름을 부여해주는 것이 일반적이다.
왜냐하면 하나의 코드 저장소에는 여러 개의 워크플로우를 추가할 수 있어서
워크플로우의 이름이 모호하면 여러 워크플로우를 빠르게 식별하기가 어렵기 때문이다.
그다음은 on키를 작성해야 언제 git action workflow가 동작할지 명시해준다.
에제에는 main이나 dev브랜치에 push를 했을때 동작하라고 되어있다.
그다음은 jobs키로 어떤 작업을 할지 작성해준다.
jobs바로 밑에 쓴게 그 작업의 이름이다.
jobs:
my_first_job
name: my_first_job
이런식으로 name을 써주어도 되는데 이렇게하면 github action의 작업 로그 화면에서 볼 수 있다.
그리고 job 아래에 steps들이 있고
실제로 어떤 동작을 하는 것은 step들이다
위 사진은
1. checkout step을 통해 특정 브랜치의 파일들을 가져오고
2. pnpm/action-setup으로 pnpm 설치해주고
등등 이런 내용이다
'programming > docker' 카테고리의 다른 글
[docker] docker sudo 없이 실행하는법 (0) | 2023.11.06 |
---|---|
docker 컨테이너에 몽고디비 설치하여 사용하기 (0) | 2023.05.12 |