auto deploy 예시
# This is a basic workflow to help you get started with Actions
name: auto deploy example
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the J14B branch
push:
branches: [main]
# Allows you to run this workflow manually from the Actions tab
# workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-18.04
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- name: Deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USERNAME }}
password: ${{ secrets.SSH_PASSWORD }}
port: ${{ secrets.SSH_PORT }}
script: |
echo hi
CD용 스크립트(dev 서버에서 실행할 명령어)
# 전제 조건
# dev 서버에 git clone이 된 프로젝트가 있어야 한다.
# .env.production이 서버에 작성되어 있을 것.
cd web04-canyoufixme
git pull origin main
#docker build -t cnh0214/canyoufixme . # docker build
#docker build \
# -t canyoufixme .
docker build \
--build-arg API_URL=$API_URL \
--build-arg CLIENT_ID=$CLIENT_ID \
--build-arg API_HOST=$API_HOST \
--build-arg API_PORT=$API_PORT \
-t canyoufixme .
# docker push cnh0214/canyoufixme # docker push (이미지 docker에 저장)
# docker pull cnh0214/canyoufixme #
docker stop cyfm # 기존 컨테이너를 끈다.
docker rm cyfm
docker run -it -d -p 3001:3001 -p 80:80 \
-v packages/backend/.env.production:/app/packages/backend/.env.development
--name cyfm cnh0214/canyoufixme
#!/bin/bash -e
cd web04-canyoufixme
git pull origin main
docker build \
--build-arg API_URL=$API_URL \
--build-arg CLIENT_ID=$CLIENT_ID \
--build-arg API_HOST=$API_HOST \
--build-arg API_PORT=$API_PORT \
--build-arg PM2_PUBLIC_KEY=$PM2_PUBLIC_KEY \
--build-arg PM2_SECRET_KEY=$PM2_SECRET_KEY \
-t canyoufixme .
docker stop cyfm
docker rm cyfm
docker run -it -d -p 3001:3001 -p 80:80 \
-v $PWD/packages/backend/.env.production:/app/packages/backend/.env.production \
--name cyfm canyoufixme
yes | docker container prune --filter until=24h
yes | docker image prune --filter until=24h
#!/bin/bash
cd web04-canyoufixme
git pull origin dev
docker build \
--build-arg API_URL=$API_URL \
--build-arg CLIENT_ID=$CLIENT_ID \
-t canyoufixme .
docker stop cyfm
docker rm cyfm
docker run -it -d -p 3001:3001 -p 80:80 \
-v $PWD/packages/backend/.env.production:/app/.env.production \
--name cyfm canyoufixme
deploy.yml
name: canyoufixme-auto-deploy
on:
push:
branches: [dev]
jobs:
check-bats-version:
runs-on: ubuntu-18.04
steps:
- name: deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USERNAME }}
password: ${{ secrets.SSH_PASSWORD }}
port: ${{ secrets.SSH_PORT }}
script: |
cd /root
echo "${{ secrets.BE_DOT_ENV }}" > ./web04-canyoufixme/packages/backend/.env.production
API_URL=${{ secrets.API_URL }} CLIENT_ID=${{ secrets.CLIENT_ID }} ./deploy.sh
발생 이슈
Dockerfile 에서 ARG로 값을 받으 ENV 로 환경변수 설정이 가능하다.
- 루트 경로를 제대로 설정하자.
Dockerfile 경로 설정 시에 동일 경로를 사용하는 경우에는 /를 붙여줘야한다.
docker (image | container) prune : 사용하지 않는 이미지 또는 컨테이너 전체 제거