@catladder/pipeline 3.34.2 → 3.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants.js +1 -1
- package/dist/deploy/base/deploy.js +7 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/examples/__snapshots__/cloud-run-existing-image.test.ts.snap +665 -0
- package/examples/cloud-run-existing-image.test.ts +12 -0
- package/examples/cloud-run-existing-image.ts +26 -0
- package/package.json +1 -1
- package/src/deploy/base/deploy.ts +37 -32
|
@@ -0,0 +1,665 @@
|
|
|
1
|
+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
|
+
|
|
3
|
+
exports[`matches snapshot for cloud-run-existing-image local pipeline YAML 1`] = `
|
|
4
|
+
"image: path/to/docker/jobs-default:the-version
|
|
5
|
+
stages:
|
|
6
|
+
- setup
|
|
7
|
+
- setup dev
|
|
8
|
+
- setup review
|
|
9
|
+
- setup stage
|
|
10
|
+
- setup prod
|
|
11
|
+
- test
|
|
12
|
+
- test dev
|
|
13
|
+
- test review
|
|
14
|
+
- test stage
|
|
15
|
+
- test prod
|
|
16
|
+
- build
|
|
17
|
+
- build dev
|
|
18
|
+
- build review
|
|
19
|
+
- build stage
|
|
20
|
+
- build prod
|
|
21
|
+
- deploy
|
|
22
|
+
- deploy dev
|
|
23
|
+
- deploy review
|
|
24
|
+
- deploy stage
|
|
25
|
+
- deploy prod
|
|
26
|
+
- verify
|
|
27
|
+
- verify dev
|
|
28
|
+
- verify review
|
|
29
|
+
- verify stage
|
|
30
|
+
- verify prod
|
|
31
|
+
- agents
|
|
32
|
+
- agents dev
|
|
33
|
+
- agents review
|
|
34
|
+
- agents stage
|
|
35
|
+
- agents prod
|
|
36
|
+
- rollback
|
|
37
|
+
- rollback dev
|
|
38
|
+
- rollback review
|
|
39
|
+
- rollback stage
|
|
40
|
+
- rollback prod
|
|
41
|
+
- stop
|
|
42
|
+
- stop dev
|
|
43
|
+
- stop review
|
|
44
|
+
- stop stage
|
|
45
|
+
- stop prod
|
|
46
|
+
- release
|
|
47
|
+
variables:
|
|
48
|
+
FF_USE_FASTZIP: 'true'
|
|
49
|
+
ARTIFACT_COMPRESSION_LEVEL: fast
|
|
50
|
+
CACHE_COMPRESSION_LEVEL: fast
|
|
51
|
+
TRANSFER_METER_FREQUENCY: 5s
|
|
52
|
+
GIT_DEPTH: '1'
|
|
53
|
+
workflow:
|
|
54
|
+
name: $PIPELINE_ICON $PIPELINE_NAME
|
|
55
|
+
rules:
|
|
56
|
+
- if: $CI_PIPELINE_SOURCE == "trigger"
|
|
57
|
+
variables:
|
|
58
|
+
PIPELINE_ICON: 🤖
|
|
59
|
+
PIPELINE_NAME: Thinking...
|
|
60
|
+
- if: $CI_MERGE_REQUEST_ID
|
|
61
|
+
variables:
|
|
62
|
+
PIPELINE_ICON: 🐱🔨
|
|
63
|
+
PIPELINE_NAME: mr$CI_MERGE_REQUEST_IID - $CI_MERGE_REQUEST_TITLE
|
|
64
|
+
- if: $CI_COMMIT_TAG
|
|
65
|
+
variables:
|
|
66
|
+
PIPELINE_ICON: 🐱📦
|
|
67
|
+
PIPELINE_NAME: Release $CI_COMMIT_TAG
|
|
68
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_COMMIT_MESSAGE !~ /^chore\\(release\\).*/
|
|
69
|
+
variables:
|
|
70
|
+
PIPELINE_ICON: 🐱🔨
|
|
71
|
+
PIPELINE_NAME: Main - $CI_COMMIT_TITLE
|
|
72
|
+
- when: always
|
|
73
|
+
variables:
|
|
74
|
+
PIPELINE_ICON: 🐱❓
|
|
75
|
+
PIPELINE_NAME: Default
|
|
76
|
+
before_script:
|
|
77
|
+
- |-
|
|
78
|
+
function escapeForDotEnv () {
|
|
79
|
+
input="\${1:-$(cat)}"
|
|
80
|
+
input="\${input//$'\\n'/\\\\n}"
|
|
81
|
+
if [[ "$input" == *\\\\n* ]]; then
|
|
82
|
+
if [[ "$input" == *\\"* && "$input" == *\\'* && "$input" == *\\\`* ]]; then
|
|
83
|
+
printf "\\"%s\\"\\n" "$input"
|
|
84
|
+
elif [[ "$input" == *\\"* && "$input" == *\\'* ]]; then
|
|
85
|
+
printf "\`%s\`\\n" "$input"
|
|
86
|
+
elif [[ "$input" == *\\"* ]]; then
|
|
87
|
+
printf "'%s'\\n" "$input"
|
|
88
|
+
else
|
|
89
|
+
printf "\\"%s\\"\\n" "$input"
|
|
90
|
+
fi
|
|
91
|
+
else
|
|
92
|
+
printf "%s\\n" "$input"
|
|
93
|
+
fi
|
|
94
|
+
}
|
|
95
|
+
- |-
|
|
96
|
+
function collapseable_section_start () {
|
|
97
|
+
local section_title="\${1}"
|
|
98
|
+
local section_description="\${2:-$section_title}"
|
|
99
|
+
echo -e "section_start:\`date +%s\`:\${section_title}[collapsed=true]\\r\\e[0K\${section_description}"
|
|
100
|
+
}
|
|
101
|
+
- |-
|
|
102
|
+
function collapseable_section_end () {
|
|
103
|
+
local section_title="\${1}"
|
|
104
|
+
echo -e "section_end:\`date +%s\`:\${section_title}\\r\\e[0K"
|
|
105
|
+
}
|
|
106
|
+
'www 🚀 Deploy | dev ':
|
|
107
|
+
stage: deploy dev
|
|
108
|
+
image: path/to/docker/gcloud:the-version
|
|
109
|
+
variables:
|
|
110
|
+
KUBERNETES_CPU_REQUEST: '0.22'
|
|
111
|
+
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
112
|
+
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
113
|
+
script:
|
|
114
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
115
|
+
- export ENV_SHORT="dev"
|
|
116
|
+
- export APP_DIR="app"
|
|
117
|
+
- export ENV_TYPE="dev"
|
|
118
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
119
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
120
|
+
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
121
|
+
- export HOSTNAME="$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
122
|
+
- export ROOT_URL="https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
123
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
124
|
+
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
125
|
+
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
126
|
+
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
127
|
+
- export GCLOUD_DEPLOY_credentialsKey="$CL_dev_www_GCLOUD_DEPLOY_credentialsKey"
|
|
128
|
+
- export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix"
|
|
129
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
130
|
+
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
131
|
+
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/www"
|
|
132
|
+
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www"
|
|
133
|
+
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
134
|
+
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
135
|
+
- collapseable_section_end "injectvars"
|
|
136
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
137
|
+
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_www_GCLOUD_DEPLOY_credentialsKey")
|
|
138
|
+
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
139
|
+
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
140
|
+
- collapseable_section_end "prepare"
|
|
141
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
142
|
+
- |
|
|
143
|
+
cat > ____envvars.yaml <<EOF
|
|
144
|
+
ENV_SHORT: |-
|
|
145
|
+
dev
|
|
146
|
+
APP_DIR: |-
|
|
147
|
+
app
|
|
148
|
+
ENV_TYPE: |-
|
|
149
|
+
dev
|
|
150
|
+
BUILD_INFO_BUILD_ID: |-
|
|
151
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
152
|
+
BUILD_INFO_BUILD_TIME: |-
|
|
153
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
154
|
+
BUILD_INFO_CURRENT_VERSION: |-
|
|
155
|
+
$(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed '1!s/^/ /')
|
|
156
|
+
HOSTNAME: |-
|
|
157
|
+
$(printf %s "$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
158
|
+
ROOT_URL: |-
|
|
159
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
160
|
+
HOSTNAME_INTERNAL: |-
|
|
161
|
+
$(printf %s "$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
162
|
+
ROOT_URL_INTERNAL: |-
|
|
163
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
164
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
165
|
+
google-project-id
|
|
166
|
+
DEPLOY_CLOUD_RUN_REGION: |-
|
|
167
|
+
europe-west6
|
|
168
|
+
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
169
|
+
$(printf %s "$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
170
|
+
_ALL_ENV_VAR_KEYS: |-
|
|
171
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
172
|
+
|
|
173
|
+
EOF
|
|
174
|
+
- collapseable_section_end "writeenvvars"
|
|
175
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
176
|
+
- gcloud run deploy pan-test-app-dev-www --command="" --image=gcr.io/google-project-id/my-image:latest --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=dev,env-name=dev,build-type=disabled,cloud-run-service-name=pan-test-app-dev-www --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
177
|
+
- collapseable_section_end "deploy"
|
|
178
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
179
|
+
- set +e
|
|
180
|
+
- gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-dev-www --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=google-project-id --region=europe-west6 --quiet $revisionname ; done
|
|
181
|
+
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/www@$version --quiet --delete-tags; done
|
|
182
|
+
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www@$version --quiet --delete-tags; done
|
|
183
|
+
- set -e
|
|
184
|
+
- collapseable_section_end "cleanup"
|
|
185
|
+
- echo "CL_GITLAB_ENVIRONMENT_URL=$ROOT_URL" >> gitlab_environment.env
|
|
186
|
+
environment:
|
|
187
|
+
name: dev/www
|
|
188
|
+
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
189
|
+
on_stop: 'www 🛑 Stop ⚠️ | dev '
|
|
190
|
+
auto_stop_in: 4 weeks
|
|
191
|
+
artifacts:
|
|
192
|
+
reports:
|
|
193
|
+
dotenv: gitlab_environment.env
|
|
194
|
+
rules:
|
|
195
|
+
- when: never
|
|
196
|
+
if: $CI_PIPELINE_SOURCE == "trigger"
|
|
197
|
+
- when: on_success
|
|
198
|
+
if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_COMMIT_MESSAGE !~ /^chore\\(release\\).*/
|
|
199
|
+
needs: []
|
|
200
|
+
retry: &a1
|
|
201
|
+
max: 2
|
|
202
|
+
interruptible: true
|
|
203
|
+
allow_failure: false
|
|
204
|
+
'www 🛑 Stop ⚠️ | dev ':
|
|
205
|
+
stage: stop dev
|
|
206
|
+
image: path/to/docker/gcloud:the-version
|
|
207
|
+
variables:
|
|
208
|
+
KUBERNETES_CPU_REQUEST: '0.22'
|
|
209
|
+
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
210
|
+
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
211
|
+
GIT_STRATEGY: none
|
|
212
|
+
script:
|
|
213
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
214
|
+
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
215
|
+
- collapseable_section_end "injectvars"
|
|
216
|
+
- set +e
|
|
217
|
+
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_www_GCLOUD_DEPLOY_credentialsKey")
|
|
218
|
+
- gcloud run services delete pan-test-app-dev-www --project=google-project-id --region=europe-west6
|
|
219
|
+
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/www --quiet --delete-tags
|
|
220
|
+
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www@$version --quiet --delete-tags; done
|
|
221
|
+
- set -e
|
|
222
|
+
environment:
|
|
223
|
+
name: dev/www
|
|
224
|
+
action: stop
|
|
225
|
+
rules:
|
|
226
|
+
- if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
|
|
227
|
+
when: on_success
|
|
228
|
+
- when: never
|
|
229
|
+
if: $CI_PIPELINE_SOURCE == "trigger"
|
|
230
|
+
- when: manual
|
|
231
|
+
if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_COMMIT_MESSAGE !~ /^chore\\(release\\).*/
|
|
232
|
+
needs: []
|
|
233
|
+
retry: *a1
|
|
234
|
+
interruptible: true
|
|
235
|
+
allow_failure: true
|
|
236
|
+
'www 🚀 Deploy | review ':
|
|
237
|
+
stage: deploy review
|
|
238
|
+
image: path/to/docker/gcloud:the-version
|
|
239
|
+
variables:
|
|
240
|
+
KUBERNETES_CPU_REQUEST: '0.22'
|
|
241
|
+
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
242
|
+
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
243
|
+
script:
|
|
244
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
245
|
+
- export ENV_SHORT="review"
|
|
246
|
+
- export APP_DIR="app"
|
|
247
|
+
- export ENV_TYPE="review"
|
|
248
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
249
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
250
|
+
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
251
|
+
- export HOSTNAME="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
252
|
+
- export ROOT_URL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
253
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
254
|
+
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
255
|
+
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
256
|
+
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
257
|
+
- export GCLOUD_DEPLOY_credentialsKey="$CL_review_www_GCLOUD_DEPLOY_credentialsKey"
|
|
258
|
+
- export GCLOUD_RUN_canonicalHostSuffix="$CL_review_www_GCLOUD_RUN_canonicalHostSuffix"
|
|
259
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
260
|
+
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
261
|
+
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })"
|
|
262
|
+
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www"
|
|
263
|
+
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
264
|
+
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
265
|
+
- collapseable_section_end "injectvars"
|
|
266
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
267
|
+
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_www_GCLOUD_DEPLOY_credentialsKey")
|
|
268
|
+
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
269
|
+
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
270
|
+
- collapseable_section_end "prepare"
|
|
271
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
272
|
+
- |
|
|
273
|
+
cat > ____envvars.yaml <<EOF
|
|
274
|
+
ENV_SHORT: |-
|
|
275
|
+
review
|
|
276
|
+
APP_DIR: |-
|
|
277
|
+
app
|
|
278
|
+
ENV_TYPE: |-
|
|
279
|
+
review
|
|
280
|
+
BUILD_INFO_BUILD_ID: |-
|
|
281
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
282
|
+
BUILD_INFO_BUILD_TIME: |-
|
|
283
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
284
|
+
BUILD_INFO_CURRENT_VERSION: |-
|
|
285
|
+
$(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed '1!s/^/ /')
|
|
286
|
+
HOSTNAME: |-
|
|
287
|
+
$(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
288
|
+
ROOT_URL: |-
|
|
289
|
+
$(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
290
|
+
HOSTNAME_INTERNAL: |-
|
|
291
|
+
$(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
292
|
+
ROOT_URL_INTERNAL: |-
|
|
293
|
+
$(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
294
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
295
|
+
google-project-id
|
|
296
|
+
DEPLOY_CLOUD_RUN_REGION: |-
|
|
297
|
+
europe-west6
|
|
298
|
+
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
299
|
+
$(printf %s "$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
300
|
+
_ALL_ENV_VAR_KEYS: |-
|
|
301
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
302
|
+
|
|
303
|
+
EOF
|
|
304
|
+
- collapseable_section_end "writeenvvars"
|
|
305
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
306
|
+
- gcloud run deploy $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www" | awk '{print tolower($0)}') --command="" --image=gcr.io/google-project-id/my-image:latest --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=review,env-name=review,build-type=disabled,cloud-run-service-name=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www" | awk '{print tolower($0)}') --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
307
|
+
- collapseable_section_end "deploy"
|
|
308
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
309
|
+
- set +e
|
|
310
|
+
- gcloud run revisions list --project=google-project-id --region=europe-west6 --service=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www" | awk '{print tolower($0)}') --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=google-project-id --region=europe-west6 --quiet $revisionname ; done
|
|
311
|
+
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }) --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })@$version --quiet --delete-tags; done
|
|
312
|
+
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www@$version --quiet --delete-tags; done
|
|
313
|
+
- set +e
|
|
314
|
+
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www --quiet --delete-tags
|
|
315
|
+
- set -e
|
|
316
|
+
- set -e
|
|
317
|
+
- collapseable_section_end "cleanup"
|
|
318
|
+
- echo "CL_GITLAB_ENVIRONMENT_URL=$ROOT_URL" >> gitlab_environment.env
|
|
319
|
+
environment:
|
|
320
|
+
name: review/$CI_COMMIT_REF_NAME/www
|
|
321
|
+
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
322
|
+
on_stop: 'www 🛑 Stop ⚠️ | review '
|
|
323
|
+
auto_stop_in: 1 week
|
|
324
|
+
artifacts:
|
|
325
|
+
reports:
|
|
326
|
+
dotenv: gitlab_environment.env
|
|
327
|
+
rules:
|
|
328
|
+
- when: never
|
|
329
|
+
if: $CI_PIPELINE_SOURCE == "trigger"
|
|
330
|
+
- when: on_success
|
|
331
|
+
if: $CI_MERGE_REQUEST_ID
|
|
332
|
+
needs: []
|
|
333
|
+
retry: *a1
|
|
334
|
+
interruptible: true
|
|
335
|
+
allow_failure: false
|
|
336
|
+
'www 🛑 Stop ⚠️ | review ':
|
|
337
|
+
stage: stop review
|
|
338
|
+
image: path/to/docker/gcloud:the-version
|
|
339
|
+
variables:
|
|
340
|
+
KUBERNETES_CPU_REQUEST: '0.22'
|
|
341
|
+
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
342
|
+
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
343
|
+
GIT_STRATEGY: none
|
|
344
|
+
script:
|
|
345
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
346
|
+
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
347
|
+
- collapseable_section_end "injectvars"
|
|
348
|
+
- set +e
|
|
349
|
+
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_www_GCLOUD_DEPLOY_credentialsKey")
|
|
350
|
+
- gcloud run services delete $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www" | awk '{print tolower($0)}') --project=google-project-id --region=europe-west6
|
|
351
|
+
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }) --quiet --delete-tags
|
|
352
|
+
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www@$version --quiet --delete-tags; done
|
|
353
|
+
- set +e
|
|
354
|
+
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www --quiet --delete-tags
|
|
355
|
+
- set -e
|
|
356
|
+
- set -e
|
|
357
|
+
environment:
|
|
358
|
+
name: review/$CI_COMMIT_REF_NAME/www
|
|
359
|
+
action: stop
|
|
360
|
+
rules:
|
|
361
|
+
- if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
|
|
362
|
+
when: on_success
|
|
363
|
+
- when: never
|
|
364
|
+
if: $CI_PIPELINE_SOURCE == "trigger"
|
|
365
|
+
- when: manual
|
|
366
|
+
if: $CI_MERGE_REQUEST_ID
|
|
367
|
+
needs: []
|
|
368
|
+
retry: *a1
|
|
369
|
+
interruptible: true
|
|
370
|
+
allow_failure: true
|
|
371
|
+
'www 🚀 Deploy | stage ':
|
|
372
|
+
stage: deploy stage
|
|
373
|
+
image: path/to/docker/gcloud:the-version
|
|
374
|
+
variables:
|
|
375
|
+
KUBERNETES_CPU_REQUEST: '0.22'
|
|
376
|
+
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
377
|
+
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
378
|
+
script:
|
|
379
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
380
|
+
- export ENV_SHORT="stage"
|
|
381
|
+
- export APP_DIR="app"
|
|
382
|
+
- export ENV_TYPE="stage"
|
|
383
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
384
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
385
|
+
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
386
|
+
- export HOSTNAME="$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
387
|
+
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
388
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
389
|
+
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
390
|
+
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
391
|
+
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
392
|
+
- export GCLOUD_DEPLOY_credentialsKey="$CL_stage_www_GCLOUD_DEPLOY_credentialsKey"
|
|
393
|
+
- export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix"
|
|
394
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
395
|
+
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
396
|
+
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/www"
|
|
397
|
+
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www"
|
|
398
|
+
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
399
|
+
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
400
|
+
- collapseable_section_end "injectvars"
|
|
401
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
402
|
+
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_www_GCLOUD_DEPLOY_credentialsKey")
|
|
403
|
+
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
404
|
+
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
405
|
+
- collapseable_section_end "prepare"
|
|
406
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
407
|
+
- |
|
|
408
|
+
cat > ____envvars.yaml <<EOF
|
|
409
|
+
ENV_SHORT: |-
|
|
410
|
+
stage
|
|
411
|
+
APP_DIR: |-
|
|
412
|
+
app
|
|
413
|
+
ENV_TYPE: |-
|
|
414
|
+
stage
|
|
415
|
+
BUILD_INFO_BUILD_ID: |-
|
|
416
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
417
|
+
BUILD_INFO_BUILD_TIME: |-
|
|
418
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
419
|
+
BUILD_INFO_CURRENT_VERSION: |-
|
|
420
|
+
$(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed '1!s/^/ /')
|
|
421
|
+
HOSTNAME: |-
|
|
422
|
+
$(printf %s "$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
423
|
+
ROOT_URL: |-
|
|
424
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
425
|
+
HOSTNAME_INTERNAL: |-
|
|
426
|
+
$(printf %s "$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
427
|
+
ROOT_URL_INTERNAL: |-
|
|
428
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
429
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
430
|
+
google-project-id
|
|
431
|
+
DEPLOY_CLOUD_RUN_REGION: |-
|
|
432
|
+
europe-west6
|
|
433
|
+
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
434
|
+
$(printf %s "$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
435
|
+
_ALL_ENV_VAR_KEYS: |-
|
|
436
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
437
|
+
|
|
438
|
+
EOF
|
|
439
|
+
- collapseable_section_end "writeenvvars"
|
|
440
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
441
|
+
- gcloud run deploy pan-test-app-stage-www --command="" --image=gcr.io/google-project-id/my-image:latest --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=stage,env-name=stage,build-type=disabled,cloud-run-service-name=pan-test-app-stage-www --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
442
|
+
- collapseable_section_end "deploy"
|
|
443
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
444
|
+
- set +e
|
|
445
|
+
- gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-stage-www --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=google-project-id --region=europe-west6 --quiet $revisionname ; done
|
|
446
|
+
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/www@$version --quiet --delete-tags; done
|
|
447
|
+
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www@$version --quiet --delete-tags; done
|
|
448
|
+
- set -e
|
|
449
|
+
- collapseable_section_end "cleanup"
|
|
450
|
+
- echo "CL_GITLAB_ENVIRONMENT_URL=$ROOT_URL" >> gitlab_environment.env
|
|
451
|
+
environment:
|
|
452
|
+
name: stage/www
|
|
453
|
+
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
454
|
+
on_stop: 'www 🛑 Stop ⚠️ | stage '
|
|
455
|
+
artifacts:
|
|
456
|
+
reports:
|
|
457
|
+
dotenv: gitlab_environment.env
|
|
458
|
+
rules:
|
|
459
|
+
- when: never
|
|
460
|
+
if: $CI_PIPELINE_SOURCE == "trigger"
|
|
461
|
+
- when: on_success
|
|
462
|
+
if: $CI_COMMIT_TAG
|
|
463
|
+
needs: []
|
|
464
|
+
retry: *a1
|
|
465
|
+
interruptible: true
|
|
466
|
+
allow_failure: false
|
|
467
|
+
'www 🛑 Stop ⚠️ | stage ':
|
|
468
|
+
stage: stop stage
|
|
469
|
+
image: path/to/docker/gcloud:the-version
|
|
470
|
+
variables:
|
|
471
|
+
KUBERNETES_CPU_REQUEST: '0.22'
|
|
472
|
+
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
473
|
+
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
474
|
+
GIT_STRATEGY: none
|
|
475
|
+
script:
|
|
476
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
477
|
+
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
478
|
+
- collapseable_section_end "injectvars"
|
|
479
|
+
- set +e
|
|
480
|
+
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_www_GCLOUD_DEPLOY_credentialsKey")
|
|
481
|
+
- gcloud run services delete pan-test-app-stage-www --project=google-project-id --region=europe-west6
|
|
482
|
+
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/www --quiet --delete-tags
|
|
483
|
+
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www@$version --quiet --delete-tags; done
|
|
484
|
+
- set -e
|
|
485
|
+
environment:
|
|
486
|
+
name: stage/www
|
|
487
|
+
action: stop
|
|
488
|
+
rules:
|
|
489
|
+
- if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
|
|
490
|
+
when: on_success
|
|
491
|
+
- when: never
|
|
492
|
+
if: $CI_PIPELINE_SOURCE == "trigger"
|
|
493
|
+
- when: manual
|
|
494
|
+
if: $CI_COMMIT_TAG
|
|
495
|
+
needs: []
|
|
496
|
+
retry: *a1
|
|
497
|
+
interruptible: true
|
|
498
|
+
allow_failure: true
|
|
499
|
+
'www 🚀 Deploy | prod ':
|
|
500
|
+
stage: deploy prod
|
|
501
|
+
image: path/to/docker/gcloud:the-version
|
|
502
|
+
variables:
|
|
503
|
+
KUBERNETES_CPU_REQUEST: '0.22'
|
|
504
|
+
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
505
|
+
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
506
|
+
script:
|
|
507
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
508
|
+
- export ENV_SHORT="prod"
|
|
509
|
+
- export APP_DIR="app"
|
|
510
|
+
- export ENV_TYPE="prod"
|
|
511
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
512
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
513
|
+
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
514
|
+
- export HOSTNAME="$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
515
|
+
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
516
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
517
|
+
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
518
|
+
- export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
|
|
519
|
+
- export DEPLOY_CLOUD_RUN_REGION="europe-west6"
|
|
520
|
+
- export GCLOUD_DEPLOY_credentialsKey="$CL_prod_www_GCLOUD_DEPLOY_credentialsKey"
|
|
521
|
+
- export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix"
|
|
522
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
|
|
523
|
+
- export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
|
|
524
|
+
- export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/www"
|
|
525
|
+
- export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www"
|
|
526
|
+
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
527
|
+
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
528
|
+
- collapseable_section_end "injectvars"
|
|
529
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
530
|
+
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_www_GCLOUD_DEPLOY_credentialsKey")
|
|
531
|
+
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
|
|
532
|
+
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
533
|
+
- collapseable_section_end "prepare"
|
|
534
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
535
|
+
- |
|
|
536
|
+
cat > ____envvars.yaml <<EOF
|
|
537
|
+
ENV_SHORT: |-
|
|
538
|
+
prod
|
|
539
|
+
APP_DIR: |-
|
|
540
|
+
app
|
|
541
|
+
ENV_TYPE: |-
|
|
542
|
+
prod
|
|
543
|
+
BUILD_INFO_BUILD_ID: |-
|
|
544
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
545
|
+
BUILD_INFO_BUILD_TIME: |-
|
|
546
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
547
|
+
BUILD_INFO_CURRENT_VERSION: |-
|
|
548
|
+
$(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed '1!s/^/ /')
|
|
549
|
+
HOSTNAME: |-
|
|
550
|
+
$(printf %s "$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
551
|
+
ROOT_URL: |-
|
|
552
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
553
|
+
HOSTNAME_INTERNAL: |-
|
|
554
|
+
$(printf %s "$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
555
|
+
ROOT_URL_INTERNAL: |-
|
|
556
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
557
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
558
|
+
google-project-id
|
|
559
|
+
DEPLOY_CLOUD_RUN_REGION: |-
|
|
560
|
+
europe-west6
|
|
561
|
+
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
562
|
+
$(printf %s "$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
563
|
+
_ALL_ENV_VAR_KEYS: |-
|
|
564
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
|
|
565
|
+
|
|
566
|
+
EOF
|
|
567
|
+
- collapseable_section_end "writeenvvars"
|
|
568
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
569
|
+
- gcloud run deploy pan-test-app-prod-www --command="" --image=gcr.io/google-project-id/my-image:latest --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=prod,env-name=prod,build-type=disabled,cloud-run-service-name=pan-test-app-prod-www --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
570
|
+
- collapseable_section_end "deploy"
|
|
571
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
572
|
+
- set +e
|
|
573
|
+
- gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-prod-www --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | tail -n +6 | while read -r revisionname; do gcloud run revisions delete --project=google-project-id --region=europe-west6 --quiet $revisionname ; done
|
|
574
|
+
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +7 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/www@$version --quiet --delete-tags; done
|
|
575
|
+
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www@$version --quiet --delete-tags; done
|
|
576
|
+
- set -e
|
|
577
|
+
- collapseable_section_end "cleanup"
|
|
578
|
+
- echo "CL_GITLAB_ENVIRONMENT_URL=$ROOT_URL" >> gitlab_environment.env
|
|
579
|
+
environment:
|
|
580
|
+
name: prod/www
|
|
581
|
+
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
582
|
+
on_stop: 'www 🛑 Stop ⚠️ | prod '
|
|
583
|
+
artifacts:
|
|
584
|
+
reports:
|
|
585
|
+
dotenv: gitlab_environment.env
|
|
586
|
+
rules:
|
|
587
|
+
- when: never
|
|
588
|
+
if: $CI_PIPELINE_SOURCE == "trigger"
|
|
589
|
+
- when: manual
|
|
590
|
+
if: $CI_COMMIT_TAG
|
|
591
|
+
needs: []
|
|
592
|
+
retry: *a1
|
|
593
|
+
interruptible: true
|
|
594
|
+
allow_failure: true
|
|
595
|
+
'www 🛑 Stop ⚠️ | prod ':
|
|
596
|
+
stage: stop prod
|
|
597
|
+
image: path/to/docker/gcloud:the-version
|
|
598
|
+
variables:
|
|
599
|
+
KUBERNETES_CPU_REQUEST: '0.22'
|
|
600
|
+
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
601
|
+
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
602
|
+
GIT_STRATEGY: none
|
|
603
|
+
script:
|
|
604
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
605
|
+
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
606
|
+
- collapseable_section_end "injectvars"
|
|
607
|
+
- set +e
|
|
608
|
+
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_www_GCLOUD_DEPLOY_credentialsKey")
|
|
609
|
+
- gcloud run services delete pan-test-app-prod-www --project=google-project-id --region=europe-west6
|
|
610
|
+
- gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/www --quiet --delete-tags
|
|
611
|
+
- gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www@$version --quiet --delete-tags; done
|
|
612
|
+
- set -e
|
|
613
|
+
environment:
|
|
614
|
+
name: prod/www
|
|
615
|
+
action: stop
|
|
616
|
+
rules:
|
|
617
|
+
- if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
|
|
618
|
+
when: on_success
|
|
619
|
+
- when: never
|
|
620
|
+
if: $CI_PIPELINE_SOURCE == "trigger"
|
|
621
|
+
- when: manual
|
|
622
|
+
if: $CI_COMMIT_TAG
|
|
623
|
+
needs: []
|
|
624
|
+
retry: *a1
|
|
625
|
+
interruptible: true
|
|
626
|
+
allow_failure: true
|
|
627
|
+
create release:
|
|
628
|
+
stage: release
|
|
629
|
+
image: path/to/docker/semantic-release:the-version
|
|
630
|
+
script:
|
|
631
|
+
- semanticRelease
|
|
632
|
+
after_script:
|
|
633
|
+
- echo '👉 If this job failed with access denied, the project access token might be invald - run \`project-renew-token\` in catladder CLI to fix.'
|
|
634
|
+
rules:
|
|
635
|
+
- &a2
|
|
636
|
+
if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
|
|
637
|
+
when: never
|
|
638
|
+
- &a3
|
|
639
|
+
if: $CI_PIPELINE_SOURCE == "trigger"
|
|
640
|
+
when: never
|
|
641
|
+
- &a4
|
|
642
|
+
if: $CI_PIPELINE_SOURCE == "schedule"
|
|
643
|
+
when: never
|
|
644
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
645
|
+
when: manual
|
|
646
|
+
- if: $CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/
|
|
647
|
+
when: manual
|
|
648
|
+
⚠️ force create release:
|
|
649
|
+
stage: release
|
|
650
|
+
image: path/to/docker/semantic-release:the-version
|
|
651
|
+
script:
|
|
652
|
+
- semanticRelease
|
|
653
|
+
after_script:
|
|
654
|
+
- echo '👉 If this job failed with access denied, the project access token might be invald - run \`project-renew-token\` in catladder CLI to fix.'
|
|
655
|
+
rules:
|
|
656
|
+
- *a2
|
|
657
|
+
- *a3
|
|
658
|
+
- *a4
|
|
659
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
660
|
+
when: manual
|
|
661
|
+
- if: $CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/
|
|
662
|
+
when: manual
|
|
663
|
+
needs: []
|
|
664
|
+
"
|
|
665
|
+
`;
|