Node.js Koa 배포할 때 사용했던 액션파일
name: Docker CI/CD
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Make env
run: |
touch ./.env
echo "${{ secrets.ENV }}" > ./.env
echo .env
shell: sh
- name: Create firesbase key json
id: create-json
uses: jsdaniell/[email protected]
with:
name: "firebase-key.json"
json: ${{ secrets.FIREBASE }}
dir: 'src/'
- name: Login to DockerHub
if: github.event_name != 'pull_request'
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Docker meta
id: meta
uses: docker/metadata-action@v4
with:
images: |
${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO }}
tags: |
type=ref,event=branch
type=semver,pattern={{version}}
- name: Build and push
uses: docker/build-push-action@v4
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
- name: Deploy
uses: appleboy/[email protected]
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.AWS_USERNAME }}
password: ${{ secrets.AWS_PASSWORD }}
script: |
docker stop server
docker rm server
docker pull ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO }}:main
docker run -d -p 80:8080 --name server ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO }}:main
docker image prune -f
스프링 배포
name: Java CI with Maven
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
cache: maven
- name: make application.properties
run: |
cd ./doormate/src/main/resources
touch ./application.properties
echo "${{ secrets.PROPERTIES }}" > ./application.properties
shell: bash
- name: Make firebase folder
run: |
cd doormate/src/main/resources/
mkdir firebase
shell: bash
- name: Create firebase key json
id: create-json
uses: jsdaniell/[email protected]
with:
name: "firebase_service_key.json"
json: ${{ secrets.FIREBASE }}
dir: 'doormate/src/main/resources/firebase/'
- name: Build with Maven
run: |
cd ./doormate
ls
mvn -B package --file pom.xml
# Docker Hub에 이미지 push
- name: Docker build & push
run: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -t ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO }} --platform linux/amd64 .
docker push ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO }}
# deploy
- name: Deploy
uses: appleboy/[email protected]
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.AWS_USERNAME }}
password: ${{ secrets.AWS_PASSWORD }}
script: |
docker stop server
docker rm server
docker pull ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO }}
docker run -d -p 80:8080 -e TZ=Asia/Seoul --name server ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO }}
docker image prune -f
사용할 CI/CD 스크립트
CI
name: BE CI
on:
pull_request:
branches: [main, dev]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: 20.x
- name: Install Dependencies
run: npm install
- name: Make .env
run: |
cd BE
touch ./.env
echo "${{ secrets.BE_ENV }}" > ./.env
- name: Make Cors Config
run: |
cd src/config
touch ./cors.secure.ts
echo "${{ secrets.BE_CONFIG }}" > ./cors.secure.ts
shell: sh
- name: Run Tests
run: npm test
CD
name: BE CD
on:
push:
branches:
- dev
jobs:
build:
runs-on: self-hosted
steps:
- name: Stop Server
run: sudo docker stop ${{secrets.BE_DOCKER_CONTAINER}}
- name: Delete Old Docker Container
run: sudo docker rm ${{secrets.BE_DOCKER_CONTAINER}}
- name: Pull Docker Image
run: sudo docker pull ${{secrets.BE_DOCKER_USERNAME}}/${{secrets.BE_DOCKER_REPO}}:latest
- name: Build and Push Docker Image
run: |
sudo docker build -t ${{secrets.BE_DOCKER_USERNAME}}/${{secrets.BE_DOCKER_REPO}}:latest --platform linux/amd64 .
sudo docker push ${{secrets.BE_DOCKER_USERNAME}}/${{secrets.BE_DOCKER_REPO}}:latest
- name: Run Docker Container
run: sudo docker run -d -p 8080:8080 -e TZ=Asia/Seoul --name ${{secrets.BE_DOCKER_CONTAINER}} ${{secrets.BE_DOCKER_USERNAME}}/${{secrets.BE_DOCKER_REPO}}