-
Notifications
You must be signed in to change notification settings - Fork 9
117 lines (100 loc) · 4.49 KB
/
prod-ci.yaml
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
110
111
112
113
114
115
116
117
name: ITVR new-pipeline Prod CI
on:
workflow_dispatch:
env:
GIT_URL: https://github.com/bcgov/itvr.git
TEST_NAMESPACE: ${{ secrets.OPENSHIFT_NAMESPACE_PLATE }}-test
PROD_NAMESPACE: ${{ secrets.OPENSHIFT_NAMESPACE_PLATE }}-prod
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
get-build-suffix:
name: Find Dev deployment build suffix
runs-on: ubuntu-latest
outputs:
BUILD_SUFFIX: ${{ steps.get-build-suffix.outputs.BUILD_SUFFIX }}
steps:
- name: Log in to Openshift
uses: redhat-actions/[email protected]
with:
openshift_server_url: ${{ secrets.OPENSHIFT_SERVER }}
openshift_token: ${{ secrets.OPENSHIFT_TOKEN }}
insecure_skip_tls_verify: true
namespace: ${{ env.TEST_NAMESPACE }}
- id: get-build-suffix
run: |
build_suffix=$(oc -n ${{ env.TEST_NAMESPACE }} describe deployment/itvr-test-frontend | grep Image | awk -F ':' '{print $NF}')
echo "Validating $build_suffix"
if [[ "$build_suffix" =~ ^[0-9]+\.[0-9]+\.[0-9]+-[0-9]{14}$ ]]; then
echo "Build suffix $build_suffix format is valid."
echo "BUILD_SUFFIX=$build_suffix" >> $GITHUB_OUTPUT
else
echo "Error: Build suffix $build_suffix format is invalid!"
exit 1
fi
approval-deploy-on-prod:
name: Approval the deployment on Pest
needs: get-build-suffix
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Ask for approval for ITVR Prod deployment
uses: trstringer/[email protected]
with:
secret: ${{ github.TOKEN }}
approvers: emi-hi,tim738745,kuanfandevops,JulianForeman,rogerlcleung
minimum-approvals: 2
issue-title: "ITVR ${{ needs.get-build-suffix.outputs.BUILD_SUFFIX }} Prod Deployment"
deploy:
name: Deploy ITVR on Prod
runs-on: ubuntu-latest
timeout-minutes: 60
needs: [get-build-suffix, approval-deploy-on-prod]
env:
BUILD_SUFFIX: ${{ needs.get-build-suffix.outputs.BUILD_SUFFIX }}
steps:
- name: Checkout Manifest repository
uses: actions/[email protected]
with:
repository: bcgov-c/tenant-gitops-ac294c
ref: main
ssh-key: ${{ secrets.MANIFEST_REPO_DEPLOY_KEY }}
- name: Update tags
uses: mikefarah/[email protected]
with:
cmd: |
yq -i '.frontend.image.tag = "${{ env.BUILD_SUFFIX }}"' itvr/values-prod.yaml
yq -i '.backend.image.tag = "${{ env.BUILD_SUFFIX }}"' itvr/values-prod.yaml
yq -i '.cra.image.tag = "${{ env.BUILD_SUFFIX }}"' itvr/values-prod.yaml
yq -i '.task-queue.image.tag = "${{ env.BUILD_SUFFIX }}"' itvr/values-prod.yaml
- name: GitHub Commit & Push
shell: bash {0}
run: |
git config --global user.email "[email protected]"
git config --global user.name "GitHub Actions"
git add itvr/values-prod.yaml
git commit -m "Update the image tag to ${{ env.BUILD_SUFFIX }} on Prod"
git push
- name: Log in to Openshift
uses: redhat-actions/[email protected]
with:
openshift_server_url: ${{ secrets.OPENSHIFT_SERVER }}
openshift_token: ${{ secrets.OPENSHIFT_TOKEN }}
insecure_skip_tls_verify: true
namespace: ${{ env.TEST_NAMESPACE }}
- name: Tag and deploy to Prod
run: |
helm -n ${{ env.PROD_NAMESPACE }} list
oc tag ${{ env.TEST_NAMESPACE }}/itvr-backend:${{ env.BUILD_SUFFIX }} ${{ env.PROD_NAMESPACE }}/itvr-backend:${{ env.BUILD_SUFFIX }}
oc tag ${{ env.TEST_NAMESPACE }}/itvr-frontend:${{ env.BUILD_SUFFIX }} ${{ env.PROD_NAMESPACE }}/itvr-frontend:${{ env.BUILD_SUFFIX }}
oc tag ${{ env.TEST_NAMESPACE }}/itvr-cra:${{ env.BUILD_SUFFIX }} ${{ env.PROD_NAMESPACE }}/itvr-cra:${{ env.BUILD_SUFFIX }}
oc tag ${{ env.TEST_NAMESPACE }}/itvr-task-queue:${{ env.BUILD_SUFFIX }} ${{ env.PROD_NAMESPACE }}/itvr-task-queue:${{ env.BUILD_SUFFIX }}
- name: Helm Deployment
run: |
cd itvr
helm -n ${{ env.PROD_NAMESPACE }} -f ./values-prod.yaml upgrade --install itvr-prod . \
--set frontend.podAnnotations.rolloutTriggered="A$(date +%s)E" \
--set backend.podAnnotations.rolloutTriggered="A$(date +%s)E" \
--set cra.podAnnotations.rolloutTriggered="A$(date +%s)E" \
--set task-queue.podAnnotations.rolloutTriggered="A$(date +%s)E"