fix: CD workflow #62
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: NextJS CD | |
on: | |
release: | |
types: [created] | |
push: | |
branches: | |
- MF-361-Next.js-CD-Github-Action | |
workflow_dispatch: | |
repository_dispatch: | |
env: | |
KCR_REGISTRY: dkation.kr-central-2.kcr.dev | |
KCR_REPOSITORY: dkation-prod-front/dkation-prod-fe | |
jobs: | |
deploy: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v2 | |
with: | |
fetch-depth: 0 | |
- name: Get release tag or commit hash | |
id: get_version | |
run: | | |
if [[ ${{ github.event_name }} == 'release' ]]; then | |
echo "version=${{ github.event.release.tag_name }}" >> $GITHUB_OUTPUT | |
else | |
git fetch --tags | |
latest_tag=$(git describe --tags --abbrev=0) | |
echo "version=$latest_tag" >> $GITHUB_OUTPUT | |
fi | |
- name: Deploy to FE | |
uses: appleboy/ssh-action@master | |
with: | |
host: ${{ secrets.BASTION_IP }} | |
username: ${{ secrets.USER }} | |
key: ${{ secrets.SSH_KEY }} | |
script: | | |
mkdir -p ~/.ssh | |
echo "${{ secrets.SSH_KEY }}" > ~/.ssh/id_rsa | |
chmod 600 ~/.ssh/id_rsa | |
IFS=',' read -r -a HOSTS <<< "${{ secrets.WEB_IPS }}" | |
KCR_REGISTRY='${{ env.KCR_REGISTRY }}' | |
KCR_REPOSITORY='${{ env.KCR_REPOSITORY }}' | |
ACCESS_KEY='${{ secrets.ACCESS_KEY }}' | |
ACCESS_SECRET_KEY='${{ secrets.ACCESS_SECRET_KEY }}' | |
for host in "${HOSTS[@]}" | |
do | |
echo "Deploying to $host" | |
ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no ${{ secrets.USER }}@$host << 'EOF' | |
set -e | |
echo "Stopping and removing existing containers" | |
docker ps -q --filter ancestor=$KCR_REGISTRY/$KCR_REPOSITORY | xargs -r docker stop || true | |
docker ps -aq --filter ancestor=$KCR_REGISTRY/$KCR_REPOSITORY | xargs -r docker rm || true | |
echo "Removing old Docker images" | |
docker images $KCR_REGISTRY/$KCR_REPOSITORY --format '{{.ID}}' | xargs -r docker rmi || true | |
echo "Login to KCR" | |
echo $ACCESS_SECRET_KEY | docker login $KCR_REGISTRY --username $ACCESS_KEY --password-stdin | |
echo "Pulling new Docker image" | |
docker pull $KCR_REGISTRY/$KCR_REPOSITORY:${{ steps.get_version.outputs.version }} | |
echo "Running new Docker container" | |
docker run -d -p 80:3000 --name frontend $KCR_REGISTRY/$KCR_REPOSITORY:${{ steps.get_version.outputs.version }} | |
echo "Checking container health" | |
max_retries=5 | |
retries=0 | |
until docker ps | grep frontend | grep -q "Up" || [ $retries -eq $max_retries ] | |
do | |
echo "Waiting for container to be healthy..." | |
sleep 5 | |
retries=$((retries+1)) | |
done | |
if [ $retries -eq $max_retries ]; then | |
echo "Container failed to start properly" | |
exit 1 | |
fi | |
echo "Container is up and running" | |
EOF | |
if [ $? -ne 0 ]; then | |
echo "Deployment to $host failed" | |
exit 1 | |
fi | |
echo "Deployment completed successfully" | |
done |