Skip to content

[#7] ci: docker 이미지 다중 아키텍처 빌드 추가 #1

[#7] ci: docker 이미지 다중 아키텍처 빌드 추가

[#7] ci: docker 이미지 다중 아키텍처 빌드 추가 #1

Workflow file for this run

name: CD Pipeline
on:
push:
branches:
- main
env:
NCP_ACCESS_KEY: ${{ secrets.NCP_ACCESS_KEY }}
NCP_SECRET_KEY: ${{ secrets.NCP_SECRET_KEY }}
NCP_API_URL: https://ncloud.apigw.ntruss.com
NCP_VPC_ID: ${{ secrets.NCP_VPC_ID }}
NCP_AGC_ID: ${{ secrets.NCP_AGC_ID }}
SERVICE_NAME: jaknaeso
REGISTRY_URL: ${{ secrets.NCP_CONTAINER_REGISTRY_URL }}
NCP_SERVER_HOST: ${{ secrets.NCP_SERVER_HOST }}
NCP_SERVER_USERNAME: ${{ secrets.NCP_SERVER_USERNAME }}
NCP_SERVER_PASSWORD: ${{ secrets.NCP_SERVER_PASSWORD }}
SSH_PORT: 22
BUILD_NUMBER: ${{ github.sha }}-${{ github.run_id }}
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get Github Actions IP
id: ip
run: |
PUBLIC_IP=$(curl -s https://ifconfig.me)
echo "::set-output name=public_ip::$PUBLIC_IP"
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to NCP Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY_URL }}
username: ${{ env.NCP_ACCESS_KEY }}
password: ${{ env.NCP_SECRET_KEY }}
- name: Build and Push Docker Image
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
push: true
platforms: linux/amd64,linux/arm64
tags: |
${{ env.REGISTRY_URL }}/${{ env.SERVICE_NAME }}:${{ env.BUILD_NUMBER }}
${{ env.REGISTRY_URL }}/${{ env.SERVICE_NAME }}:latest
build-args: SPRING_PROFILES_ACTIVE=dev
cache-from: type=registry,ref=${{ env.REGISTRY_URL }}/${{ env.SERVICE_NAME}}:latest
cache-to: type=inline
- name: Setting NCP CLI & Credentials
run: |
cd ~
wget https://www.ncloud.com/api/support/download/5/65
unzip 65
mkdir ~/.ncloud
echo -e "[DEFAULT]\nncloud_access_key_id = ${{ env.NCP_ACCESS_KEY }}\nncloud_secret_access_key = ${{ env.NCP_SECRET_KEY }}\nncloud_api_url = ${{ env.NCP_API_URL }}" >> ~/.ncloud/configure
- name: Add Github Action Ip to Security group
run: |
chmod -R 777 ~/cli_linux
cd ~/cli_linux
./ncloud vserver getAccessControlGroupList --regionCode KR --vpcNo ${{ env.NCP_VPC_ID }} || true
./ncloud vserver addAccessControlGroupInboundRule \
--regionCode KR \
--vpcNo ${{ env.NCP_VPC_ID }} \
--accessControlGroupNo ${{ env.NCP_AGC_ID }} \
--accessControlGroupRuleList "protocolTypeCode=TCP,ipBlock=${{ steps.ip.outputs.public_ip }}/32,portRange=22" \
|| echo "Failed to add rule with exit code $?"
- name: Create .env file
run: |
echo "DATABASE_NAME=${{ secrets.DATABASE_NAME }}" >> .env
echo "DATABASE_USER=${{ secrets.DATABASE_USER }}" >> .env
echo "DATABASE_PASSWORD=${{ secrets.DATABASE_PASSWORD }}" >> .env
echo "DATABASE_ROOT_PASSWORD=${{ secrets.DATABASE_ROOT_PASSWORD }}" >> .env
- name: Transfer files to Server
uses: appleboy/scp-action@master
with:
host: ${{ env.NCP_SERVER_HOST}}
username: ${{ env.NCP_SERVER_USERNAME }}
password: ${{ env.NCP_SERVER_PASSWORD }}
port: ${{ env.SSH_PORT }}
source: "docker-compose.yml,.env"
target: "~/"
- name: Deploy to Server
uses: appleboy/ssh-action@master
with:
host: ${{ env.NCP_SERVER_HOST }}
username: ${{ env.NCP_SERVER_USERNAME }}
password: ${{ env.NCP_SERVER_PASSWORD }}
port: ${{ env.SSH_PORT }}
script: |
docker login ${{ env.REGISTRY_URL }} -u ${{ env.NCP_ACCESS_KEY }} -p ${{ env.NCP_SECRET_KEY }}
docker-compose -f ~/docker-compose.yml pull
docker-compose -f ~/docker-compose.yml up -d
- name: Remove Github Action Ip from Security group
if: always()
run: |
chmod -R 777 ~/cli_linux
cd ~/cli_linux
./ncloud vserver removeAccessControlGroupInboundRule \
--regionCode KR \
--vpcNo ${{ env.NCP_VPC_ID }} \
--accessControlGroupNo ${{ env.NCP_AGC_ID }} \
--accessControlGroupRuleList "protocolTypeCode=TCP,ipBlock=${{ steps.ip.outputs.public_ip }}/32,portRange=22" \
|| echo "Failed to remove rule with exit code $?"