Skip to content

deploy_all_demos

deploy_all_demos #36

# ubuntu permissions
# sudo groupadd docker
# sudo gpasswd -a $USER docker
# newgrp docker
name: deploy_all_demos
on: workflow_dispatch
env:
REPOSITORY: "adnc"
RUNNER_DEMO_SOURCE_ROOT: /home/runner/work/adnc/adnc/src
PUBLISH_PATH: bin/Release/net8.0/linux-x64/publish
USR_IMAGE_NAME: adnc-demo-admin-api
USR_PROJECT_PATH: Demo/Admin/Admin.Api
USR_START_FILE: "Adnc.Demo.Admin.Api.dll"
MAINT_IMAGE_NAME: adnc-demo-maint-api
MAINT_PROJECT_PATH: Demo/Maint/Maint.Api
MAINT_START_FILE: "Adnc.Demo.Maint.Api.dll"
CUST_IMAGE_NAME: adnc-demo-cust-api
CUST_PROJECT_PATH: Demo/Cust/Cust.Api
CUST_START_FILE: "Adnc.Demo.Cust.Api.dll"
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
- name: Publish Solution
run: dotnet publish ${RUNNER_DEMO_SOURCE_ROOT}/Adnc.sln --configuration Release --runtime linux-x64 --self-contained false
- name: Build && Push images
run: |
echo "---demo-admin-api---"
IMAGE_NAME=$USR_IMAGE_NAME
PROJECT_PATH=$USR_PROJECT_PATH
cd ${RUNNER_DEMO_SOURCE_ROOT}/${PROJECT_PATH}/${PUBLISH_PATH}
touch Dockerfile
echo '' > Dockerfile
echo "FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base" >> Dockerfile
echo "WORKDIR /app" >> Dockerfile
echo "COPY . /app" >> Dockerfile
echo "ENTRYPOINT [ \"dotnet\",\"${USR_START_FILE}\" ]" >> Dockerfile
echo "build image"
docker build . --file Dockerfile --tag $IMAGE_NAME
echo "Login to registry"
echo "${{ secrets.DOCKER_API_KEY }}" | docker login -u ${REPOSITORY} --password-stdin
IMAGE_ID=${REPOSITORY}/${IMAGE_NAME}
IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]')
VERSION=$(date +%s)
docker tag $IMAGE_NAME $IMAGE_ID:$VERSION
docker tag $IMAGE_NAME $IMAGE_ID:latest
docker push $IMAGE_ID:$VERSION
docker push $IMAGE_ID:latest
echo "---demo-maint---"
IMAGE_NAME=$MAINT_IMAGE_NAME
PROJECT_PATH=$MAINT_PROJECT_PATH
cd ${RUNNER_DEMO_SOURCE_ROOT}/${PROJECT_PATH}/${PUBLISH_PATH}
touch Dockerfile
echo '' > Dockerfile
echo "FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base" >> Dockerfile
echo "WORKDIR /app" >> Dockerfile
echo "COPY . /app" >> Dockerfile
echo "ENTRYPOINT [ \"dotnet\",\"${MAINT_START_FILE}\" ]" >> Dockerfile
echo "build image"
docker build . --file Dockerfile --tag $IMAGE_NAME
echo "Login to registry"
echo "${{ secrets.DOCKER_API_KEY }}" | docker login -u ${REPOSITORY} --password-stdin
IMAGE_ID=${REPOSITORY}/${IMAGE_NAME}
IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]')
VERSION=$(date +%s)
docker tag $IMAGE_NAME $IMAGE_ID:$VERSION
docker tag $IMAGE_NAME $IMAGE_ID:latest
docker push $IMAGE_ID:$VERSION
docker push $IMAGE_ID:latest
echo "---demo-cust---"
IMAGE_NAME=$CUST_IMAGE_NAME
PROJECT_PATH=$CUST_PROJECT_PATH
cd ${RUNNER_DEMO_SOURCE_ROOT}/${PROJECT_PATH}/${PUBLISH_PATH}
touch Dockerfile
echo '' > Dockerfile
echo "FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base" >> Dockerfile
echo "WORKDIR /app" >> Dockerfile
echo "COPY . /app" >> Dockerfile
echo "ENTRYPOINT [ \"dotnet\",\"${CUST_START_FILE}\" ]" >> Dockerfile
echo "build image"
docker build . --file Dockerfile --tag $IMAGE_NAME
echo "Login to registry"
echo "${{ secrets.DOCKER_API_KEY }}" | docker login -u ${REPOSITORY} --password-stdin
IMAGE_ID=${REPOSITORY}/${IMAGE_NAME}
IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]')
VERSION=$(date +%s)
docker tag $IMAGE_NAME $IMAGE_ID:$VERSION
docker tag $IMAGE_NAME $IMAGE_ID:latest
docker push $IMAGE_ID:$VERSION
docker push $IMAGE_ID:latest
- name: Deploy all
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.DEPLOY_HOST }}
username: ${{ secrets.DEPLOY_USERNAME }}
password: ${{ secrets.DEPLOY_PASSWORD }}
port: ${{ secrets.DEPLOY_PORT }}
script: |
REPOSITORY="adnc"
IMAGE_NAME="${REPOSITORY}-demo-admin-api"
IMAGE_ID="${REPOSITORY}/${IMAGE_NAME}"
docker stop $(docker ps -a | grep "${IMAGE_ID}" | awk '{print $1 }')
docker rm $(docker ps -a | grep "${IMAGE_ID}" | awk '{print $1 }')
docker rmi $(docker images | grep "${IMAGE_ID}" | awk '{print $3}')
docker pull $IMAGE_ID
docker run \
-d \
--name=${IMAGE_NAME}-${RANDOM} \
-e ASPNETCORE_ENVIRONMENT=Staging \
-e TZ=Asia/Shanghai \
-e DEMO_SERVER=true \
$IMAGE_ID
IMAGE_NAME="${REPOSITORY}-demo-maint-api"
IMAGE_ID="${REPOSITORY}/${IMAGE_NAME}"
docker stop $(docker ps -a | grep "${IMAGE_ID}" | awk '{print $1 }')
docker rm $(docker ps -a | grep "${IMAGE_ID}" | awk '{print $1 }')
docker rmi $(docker images | grep "${IMAGE_ID}" | awk '{print $3}')
docker pull $IMAGE_ID
docker run \
-d \
--name=${IMAGE_NAME}-${RANDOM} \
-e ASPNETCORE_ENVIRONMENT=Staging \
-e TZ=Asia/Shanghai \
-e DEMO_SERVER=true \
$IMAGE_ID
IMAGE_NAME="${REPOSITORY}-demo-cust-api"
IMAGE_ID="${REPOSITORY}/${IMAGE_NAME}"
docker stop $(docker ps -a | grep "${IMAGE_ID}" | awk '{print $1 }')
docker rm $(docker ps -a | grep "${IMAGE_ID}" | awk '{print $1 }')
docker rmi $(docker images | grep "${IMAGE_ID}" | awk '{print $3}')
docker pull $IMAGE_ID
docker run \
-d \
--name=${IMAGE_NAME}-${RANDOM} \
-e ASPNETCORE_ENVIRONMENT=Staging \
-e TZ=Asia/Shanghai \
$IMAGE_ID