Skip to content

Refactor/use docker swarm #18

Refactor/use docker swarm

Refactor/use docker swarm #18

# This is a basic workflow to help you get started with Actions
name: CI/CD For docker deploy
# Controls when the action will run.
on:
# Triggers the workflow on push or pull request events but only for the main branch
pull_request:
# 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:
build-push-docker:
runs-on: ubuntu-latest
environment: dev
steps:
- uses: actions/checkout@v2
- name: Get github branch name
id: get-github-ref
run: |
echo "github_ref=${{ github.head_ref }}" >> $GITHUB_OUTPUT
shell: bash
- name: Cache build output
id: next-build-cache
uses: actions/cache@v3
with:
path: .next
key: ${{ runner.os }}-next-build-cache-${{ steps.get-github-ref.outputs.github_ref }}
restore-keys: |
${{ runner.os }}-next-build-cache-${{ steps.get-github-ref.outputs.github_ref }}
- uses: whoan/docker-build-with-cache-action@v5
with:
username: fredkiss3
password: ${{ secrets.DCR_PASSWD }}
image_name: gh-next
image_tag: dev
push_git_tag: true
registry: dcr.fredkiss.dev
dockerfile: docker/Dockerfile.prod
context: .
build_extra_args: "--build-arg NEXT_PUBLIC_VERCEL_URL=dev-gh.fredkiss.dev --build-arg GITHUB_REDIRECT_URI=https://dev-gh.fredkiss.dev/api/auth/callback --build-arg SESSION_SECRET=${{ secrets.SESSION_SECRET }} --build-arg DATABASE_URL=${{ secrets.POSTGRES_DB_URL }} --build-arg GITHUB_CLIENT_ID=${{ secrets.GH_CLIENT_ID }} --build-arg GITHUB_SECRET=${{ secrets.GH_SECRET }} --build-arg GITHUB_PERSONAL_ACCESS_TOKEN=${{ secrets.GH_PERSONAL_ACCESS_TOKEN }} --build-arg --build-arg REDIS_HTTP_USERNAME=${{ secrets.REDIS_HTTP_USERNAME }} --build-arg REDIS_HTTP_PASSWORD=${{ secrets.REDIS_HTTP_PASSWORD }} --build-arg KV_PREFIX=__gh_next__cache_dev_"
- name: copy build cache
run: |
ls -l ./.next/cache 2> /dev/null || true
echo ${{ secrets.DCR_PASSWD }} | docker login --username=fredkiss3 --password-stdin dcr.fredkiss.dev
docker pull dcr.fredkiss.dev/gh-next:dev
CONTAINER_ID=$(docker create dcr.fredkiss.dev/gh-next:dev)
mkdir -p .next/
docker cp ${CONTAINER_ID}:/app/.next/cache .next/
docker rm ${CONTAINER_ID}
ls -l ./.next/cache
deploy:
# The type of runner that the job will run on
needs:
- build-push-docker
runs-on: ubuntu-latest
environment: dev
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- uses: actions/checkout@v2
- name: Install SSH key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SSH_SERVER_KEY }}
name: id_rsa # optional
known_hosts: ${{ secrets.KNOWN_HOSTS }}
- name: Restart docker-stack
run: |
scp -P $DEPLOY_PORT ./docker/docker-stack.dev.yaml $DEPLOY_USER@$DEPLOY_DOMAIN:$DCR_DEPLOY_DIR/docker-stack.dev.yaml
ssh -p $DEPLOY_PORT $DEPLOY_USER@$DEPLOY_DOMAIN "
cd $DCR_DEPLOY_DIR
echo updating docker services for dev environment...
echo ${{ secrets.DCR_PASSWD }} | docker login --username=fredkiss3 --password-stdin dcr.fredkiss.dev
docker stack deploy --with-registry-auth --compose-file ./docker-stack.dev.yaml gh-stack-dev
echo services updated succesfully ✅
"
env:
DCR_DEPLOY_DIR: ${{ secrets.DCR_DEPLOY_DIR }}
DEPLOY_PORT: ${{ secrets.DEPLOY_PORT }}
DEPLOY_DOMAIN: ${{ secrets.DEPLOY_DOMAIN }}
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
DCR_PASSWD: ${{ secrets.DCR_PASSWD }}
DCR_USER: ${{ secrets.DCR_USER }}