· 6 years ago · Jul 17, 2019, 01:04 PM
1steps:
2# slack deployment status
3- name: 'gcr.io/cloud-builders/curl'
4 args: [ '-X', 'POST', '-H', 'Content-type: application/json', '--data',
5 '{"text":"`gcr.io/$PROJECT_ID/$_DEPLOYMENT:$BRANCH_NAME$TAG_NAME` build started!"}', '${_WEBHOOK_URL}' ]
6
7# build docker image
8- name: 'gcr.io/cloud-builders/docker'
9 args: [ 'build', '--build-arg', 'TOKEN=${_OAUTH_TOKEN}',
10 '-t', 'gcr.io/$PROJECT_ID/$_DEPLOYMENT:$BRANCH_NAME$TAG_NAME', '.' ]
11
12# push docker image to the repository
13- name: 'gcr.io/cloud-builders/docker'
14 args: [ 'push', 'gcr.io/$PROJECT_ID/$_DEPLOYMENT:$BRANCH_NAME$TAG_NAME' ]
15
16# patch kubernetes deployment to trigger rolling update
17- name: 'gcr.io/cloud-builders/kubectl'
18 args: [ 'patch', 'deployment', '${_DEPLOYMENT}', '-n', '${_NAMESPACE}', '-p',
19 '{"spec": {"template": {"metadata": {"annotations": {"build":"$BUILD_ID"}}, "spec": {"initContainers": [{"name": "app","image": "gcr.io/$PROJECT_ID/$_DEPLOYMENT:$BRANCH_NAME$TAG_NAME"}]}}}}' ]
20 env:
21 # required K8s cluster env variables
22 - 'CLOUDSDK_COMPUTE_ZONE=${_K8S_ZONE}'
23 - 'CLOUDSDK_CONTAINER_CLUSTER=${_K8S_CLUSTER}'
24
25# check rolling deployment status
26- name: 'gcr.io/cloud-builders/kubectl'
27 args: [ '-n', '${_NAMESPACE}', 'rollout', 'status', 'deploy/${_DEPLOYMENT}' ]
28 env:
29 # required K8s cluster env variables
30 - 'CLOUDSDK_COMPUTE_ZONE=${_K8S_ZONE}'
31 - 'CLOUDSDK_CONTAINER_CLUSTER=${_K8S_CLUSTER}'
32
33# slack deployment status
34- name: 'gcr.io/cloud-builders/curl'
35 args: [ '-X', 'POST', '-H', 'Content-type: application/json', '--data',
36 '{"text":"${_DEPLOYMENT} deployment completed!"}', '${_WEBHOOK_URL}' ]
37
38# store artifact
39images: ['gcr.io/$PROJECT_ID/$_DEPLOYMENT:$BRANCH_NAME$TAG_NAME']
40
41# arguments
42substitutions:
43 _K8S_ZONE: us-central1-a # K8s zone
44 _K8S_CLUSTER: cluster_name # K8s cluster name
45 _NAMESPACE: default # K8s namespace
46 _DEPLOYMENT: deployment_name # K8s deployment name
47 _WEBHOOK_URL: slack_notification_webhook # slack notifications
48 _OAUTH_TOKEN: composer_github_oauth_token # access to private code repos