-
Notifications
You must be signed in to change notification settings - Fork 1
109 lines (95 loc) · 3.52 KB
/
build-deploy.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
name: Docker Build and Deploy
on:
push:
branches:
- master
- dev
tags:
- "*"
jobs:
build_on_push:
runs-on: ubuntu-latest
strategy:
matrix:
service:
- agent-manager
- api
- agent-node
- frontend
- dbsync-api
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
registry: ${{ vars.DOCKER_REGISTRY_HOST }}
username: ${{ secrets.DOCKER_REGISTRY_USERNAME }}
password: ${{ secrets.DOCKER_REGISTRY_SECRET }}
- name: Build and push Docker image
id: docker_build
env:
SERVICE_NAME: ${{ matrix.service }}
run: |
REPO_NAME="${GITHUB_REPOSITORY##*/}"
COMMON_TAG="${{ vars.DEV_IMAGE_TAG }}"
API_ENDPOINT_HOST=${{ vars.DEV_API }}
WS_URL=${{ vars.DEV_WS_URL }}
if [[ "${{ github.ref }}" == "refs/heads/master" ]]; then
COMMON_TAG="latest"
API_ENDPOINT_HOST=${{ vars.PROD_API }}
fi
IMAGE_NAME="${{ vars.DOCKER_REGISTRY_HOST }}/${{ vars.DOCKER_IMAGE_PREFIX }}/${REPO_NAME}-${SERVICE_NAME}"
if [[ "${SERVICE_NAME}" == "frontend" ]]; then
docker build --build-arg NEXT_PUBLIC_WS_URL=${WS_URL} --build-arg NEXT_PUBLIC_API_ENDPOINT_HOST=${API_ENDPOINT_HOST} -t "$IMAGE_NAME:${{ github.sha }}" -t "$IMAGE_NAME:$COMMON_TAG" ${SERVICE_NAME}
docker push "$IMAGE_NAME:${{ github.sha }}"
docker push "$IMAGE_NAME:$COMMON_TAG"
else
# use buildx
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t "$IMAGE_NAME:${{ github.sha }}" \
-t "$IMAGE_NAME:$COMMON_TAG" \
${SERVICE_NAME} \
--push
fi
deploy_services:
needs: build_on_push
strategy:
matrix:
service:
- agent-manager
- api
- frontend
- dbsync-api
max-parallel: 1
runs-on: ubuntu-latest
env:
SERVICE_NAME: ${{ matrix.service }}
GITHUB_REPOSITORY: ${{ github.repository }}
steps:
- name: Deploy built Image
id: docker_deploy
uses: appleboy/[email protected]
with:
host: ${{ secrets.BASTION_IPV4 }}
username: ${{ secrets.BASTION_SSH_USER }}
key: ${{ secrets.BASTION_SSH_KEY }}
port: ${{ secrets.BASTION_SSH_PORT }}
script: |
SERVICE_NAME=$(echo ${{ matrix.service }})
GITHUB_REPOSITORY="${{ github.repository }}"
REPO_NAME="${GITHUB_REPOSITORY##*/}"
IMAGE_NAME="${{ vars.DOCKER_REGISTRY_HOST }}/${{ vars.DOCKER_IMAGE_PREFIX }}/${REPO_NAME}-${SERVICE_NAME}"
DEPLOY_TAG="${{ github.sha }}"
if [[ "${{ github.ref }}" == "refs/heads/dev" ]]; then
DOCKER_HOST="${{ vars.DEV_HOST }}"
DOCKER_STACK="${{ vars.DEV_STACK }}"
elif [[ "${{ github.ref }}" == "refs/heads/master" ]]; then
DOCKER_HOST="${{ vars.PROD_HOST }}"
DOCKER_STACK="${{ vars.PROD_STACK }}"
fi
echo docker --host "$DOCKER_HOST" service update --image $IMAGE_NAME:$DEPLOY_TAG ${DOCKER_STACK}_${SERVICE_NAME}
docker --host "$DOCKER_HOST" service update --image $IMAGE_NAME:$DEPLOY_TAG ${DOCKER_STACK}_${SERVICE_NAME}