@catladder/pipeline 1.144.1 โ†’ 1.145.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.
Files changed (307) hide show
  1. package/dist/bash/BashExpression.d.ts +40 -0
  2. package/dist/bash/BashExpression.js +124 -0
  3. package/dist/bash/bashExpressionPerPipelineType.d.ts +6 -0
  4. package/dist/bash/bashExpressionPerPipelineType.js +11 -0
  5. package/dist/bash/bashYaml.d.ts +10 -0
  6. package/dist/bash/bashYaml.js +46 -0
  7. package/dist/bash/getInjectVarsScript.d.ts +2 -0
  8. package/dist/bash/getInjectVarsScript.js +45 -0
  9. package/dist/bash/replaceAsync.d.ts +2 -0
  10. package/dist/{pipeline/commitInfo/getCommitInfo.js โ†’ bash/replaceAsync.js} +49 -21
  11. package/dist/build/base/__tests__/createArtifactsConfig.test.js +3 -1
  12. package/dist/build/base/constants.js +3 -1
  13. package/dist/build/base/createAppBuildJob.d.ts +2 -1
  14. package/dist/build/base/createAppBuildJob.js +10 -6
  15. package/dist/build/base/createArtifactsConfig.d.ts +1 -1
  16. package/dist/build/base/createArtifactsConfig.js +3 -1
  17. package/dist/build/base/index.js +3 -1
  18. package/dist/build/base/writeBuildInfo.js +4 -3
  19. package/dist/build/base/writeDotEnv.js +12 -3
  20. package/dist/build/custom/__tests__/testJob.test.js +3 -1
  21. package/dist/build/custom/buildJob.js +4 -12
  22. package/dist/build/custom/index.js +3 -1
  23. package/dist/build/custom/testJob.d.ts +1 -1
  24. package/dist/build/custom/testJob.js +18 -14
  25. package/dist/build/docker.d.ts +5 -31
  26. package/dist/build/docker.js +16 -9
  27. package/dist/build/index.d.ts +1 -1
  28. package/dist/build/index.js +13 -7
  29. package/dist/build/node/buildJob.js +4 -12
  30. package/dist/build/node/cache.js +6 -3
  31. package/dist/build/node/constants.js +3 -1
  32. package/dist/build/node/index.js +3 -1
  33. package/dist/build/node/meteor.js +5 -2
  34. package/dist/build/node/testJob.js +18 -14
  35. package/dist/build/node/yarn.d.ts +3 -2
  36. package/dist/build/node/yarn.js +6 -3
  37. package/dist/build/rails/build.js +3 -1
  38. package/dist/build/rails/index.js +3 -1
  39. package/dist/build/rails/test.js +15 -11
  40. package/dist/build/sbom.js +3 -1
  41. package/dist/build/types.d.ts +24 -18
  42. package/dist/build/types.js +3 -1
  43. package/dist/bundles/catladder-gitlab/index.js +3 -3
  44. package/dist/catladder-gitlab.js +10 -54
  45. package/dist/config/__tests__/configruedEnvs.test.js +3 -1
  46. package/dist/config/configruedEnvs.js +3 -1
  47. package/dist/config/index.js +13 -7
  48. package/dist/config/readConfig.js +6 -5
  49. package/dist/constants.js +5 -3
  50. package/dist/context/__tests__/resolveReferences.test.js +40 -8
  51. package/dist/context/getBuildInfoVariables.d.ts +7 -0
  52. package/dist/context/getBuildInfoVariables.js +29 -0
  53. package/dist/context/getEnvConfig.js +3 -1
  54. package/dist/context/getEnvType.js +3 -1
  55. package/dist/context/getEnvironment.d.ts +3 -3
  56. package/dist/context/getEnvironment.js +10 -14
  57. package/dist/context/getEnvironmentContext.d.ts +7 -3
  58. package/dist/context/getEnvironmentContext.js +21 -11
  59. package/dist/context/getEnvironmentVariables.d.ts +26 -5
  60. package/dist/context/getEnvironmentVariables.js +41 -25
  61. package/dist/context/getLabels.js +4 -2
  62. package/dist/context/getReviewSlug.d.ts +4 -0
  63. package/dist/context/getReviewSlug.js +22 -0
  64. package/dist/context/index.d.ts +12 -3
  65. package/dist/context/index.js +21 -15
  66. package/dist/context/resolveReferences.d.ts +3 -1
  67. package/dist/context/resolveReferences.js +53 -21
  68. package/dist/context/transformJobOnlyVars.d.ts +5 -2
  69. package/dist/context/transformJobOnlyVars.js +4 -2
  70. package/dist/context/utils/envVars.d.ts +1 -1
  71. package/dist/context/utils/envVars.js +5 -2
  72. package/dist/defaults/index.js +3 -1
  73. package/dist/deploy/base/deploy.d.ts +1 -1
  74. package/dist/deploy/base/deploy.js +12 -11
  75. package/dist/deploy/base/index.js +3 -1
  76. package/dist/deploy/base/rollback.d.ts +1 -1
  77. package/dist/deploy/base/rollback.js +13 -9
  78. package/dist/deploy/base/stop.d.ts +1 -1
  79. package/dist/deploy/base/stop.js +16 -11
  80. package/dist/deploy/base/types.d.ts +1 -1
  81. package/dist/deploy/base/types.js +3 -1
  82. package/dist/deploy/base/variables.js +3 -1
  83. package/dist/deploy/cloudRun/artifactsRegistry.d.ts +2 -1
  84. package/dist/deploy/cloudRun/artifactsRegistry.js +6 -4
  85. package/dist/deploy/cloudRun/cleanup.js +3 -1
  86. package/dist/deploy/cloudRun/cloudRunRevisions.js +3 -1
  87. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.js +8 -5
  88. package/dist/deploy/cloudRun/createJobs/cloudRunServices.d.ts +2 -2
  89. package/dist/deploy/cloudRun/createJobs/cloudRunServices.js +6 -3
  90. package/dist/deploy/cloudRun/createJobs/common.d.ts +3 -3
  91. package/dist/deploy/cloudRun/createJobs/common.js +3 -1
  92. package/dist/deploy/cloudRun/createJobs/constants.d.ts +1 -0
  93. package/dist/deploy/cloudRun/createJobs/constants.js +7 -0
  94. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +9 -2
  95. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.js +3 -1
  96. package/dist/deploy/cloudRun/createJobs/index.js +25 -8
  97. package/dist/deploy/cloudRun/createJobs/volumes.js +3 -1
  98. package/dist/deploy/cloudRun/index.js +5 -3
  99. package/dist/deploy/cloudRun/utils/createArgsString.d.ts +2 -1
  100. package/dist/deploy/cloudRun/utils/createArgsString.js +3 -1
  101. package/dist/deploy/cloudRun/utils/database.js +13 -13
  102. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.js +3 -1
  103. package/dist/deploy/cloudRun/utils/getServiceName.d.ts +1 -1
  104. package/dist/deploy/cloudRun/utils/getServiceName.js +3 -1
  105. package/dist/deploy/cloudRun/utils/jobName.d.ts +2 -1
  106. package/dist/deploy/cloudRun/utils/jobName.js +4 -2
  107. package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.js +3 -1
  108. package/dist/deploy/cloudSql/utils.d.ts +2 -1
  109. package/dist/deploy/cloudSql/utils.js +7 -2
  110. package/dist/deploy/custom/deployJob.js +3 -1
  111. package/dist/deploy/custom/index.js +3 -1
  112. package/dist/deploy/dockerTag/deployJob.js +3 -1
  113. package/dist/deploy/dockerTag/index.js +3 -1
  114. package/dist/deploy/index.d.ts +4 -3
  115. package/dist/deploy/index.js +13 -7
  116. package/dist/deploy/kubernetes/additionalSecretKeys.js +3 -1
  117. package/dist/deploy/kubernetes/cloudSql/index.d.ts +3 -2
  118. package/dist/deploy/kubernetes/cloudSql/index.js +6 -4
  119. package/dist/deploy/kubernetes/deployJob.js +22 -15
  120. package/dist/deploy/kubernetes/index.js +51 -14
  121. package/dist/deploy/kubernetes/kubeEnv.d.ts +3 -2
  122. package/dist/deploy/kubernetes/kubeEnv.js +7 -4
  123. package/dist/deploy/kubernetes/kubeValues.d.ts +2 -2
  124. package/dist/deploy/kubernetes/kubeValues.js +3 -2
  125. package/dist/deploy/kubernetes/mongodb.js +3 -1
  126. package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +2 -1
  127. package/dist/deploy/kubernetes/processSecretsAsFiles.js +3 -1
  128. package/dist/deploy/sbom.js +3 -1
  129. package/dist/deploy/types/base.d.ts +8 -2
  130. package/dist/deploy/types/base.js +3 -1
  131. package/dist/deploy/types/custom.d.ts +1 -1
  132. package/dist/deploy/types/custom.js +3 -1
  133. package/dist/deploy/types/dockerTag.d.ts +1 -1
  134. package/dist/deploy/types/dockerTag.js +3 -1
  135. package/dist/deploy/types/googleCloudRun.d.ts +19 -18
  136. package/dist/deploy/types/googleCloudRun.js +3 -1
  137. package/dist/deploy/types/index.d.ts +6 -6
  138. package/dist/deploy/types/index.js +13 -7
  139. package/dist/deploy/types/kubernetes.d.ts +22 -22
  140. package/dist/deploy/types/kubernetes.js +3 -1
  141. package/dist/deploy/utils.js +3 -1
  142. package/dist/index.d.ts +3 -2
  143. package/dist/index.js +16 -9
  144. package/dist/packageInfos.d.ts +2 -0
  145. package/dist/packageInfos.js +14 -0
  146. package/dist/pipeline/createAllJobs.d.ts +13 -5
  147. package/dist/pipeline/createAllJobs.js +21 -10
  148. package/dist/pipeline/createChildPipeline.d.ts +1 -1
  149. package/dist/pipeline/createChildPipeline.js +24 -7
  150. package/dist/pipeline/createJobsForComponent.d.ts +3 -3
  151. package/dist/pipeline/createJobsForComponent.js +19 -18
  152. package/dist/pipeline/createMainPipeline.d.ts +3 -0
  153. package/dist/pipeline/createMainPipeline.js +248 -0
  154. package/dist/pipeline/generatePipelineFiles.d.ts +2 -0
  155. package/dist/pipeline/generatePipelineFiles.js +178 -0
  156. package/dist/pipeline/getPipelineStages.js +3 -1
  157. package/dist/pipeline/gitlab/createGitlabJobs.d.ts +15 -5
  158. package/dist/pipeline/gitlab/createGitlabJobs.js +98 -25
  159. package/dist/pipeline/gitlab/createGitlabPipeline.d.ts +7 -2
  160. package/dist/pipeline/gitlab/createGitlabPipeline.js +34 -17
  161. package/dist/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.d.ts +1 -0
  162. package/dist/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.js +29 -0
  163. package/dist/pipeline/gitlab/gitlabReleaseJobs.d.ts +33 -0
  164. package/dist/pipeline/gitlab/gitlabReleaseJobs.js +24 -0
  165. package/dist/pipeline/index.d.ts +3 -1
  166. package/dist/pipeline/index.js +16 -8
  167. package/dist/pipeline/packageManager.js +4 -2
  168. package/dist/pipeline/yarn/yarnUtils.js +6 -4
  169. package/dist/rules/index.d.ts +4 -1
  170. package/dist/rules/index.js +25 -18
  171. package/dist/runner/index.d.ts +1 -1
  172. package/dist/runner/index.js +3 -1
  173. package/dist/tsconfig.tsbuildinfo +1 -1
  174. package/dist/types/config.d.ts +18 -15
  175. package/dist/types/config.js +5 -2
  176. package/dist/types/context.d.ts +37 -32
  177. package/dist/types/context.js +3 -1
  178. package/dist/types/environmentContext.d.ts +11 -7
  179. package/dist/types/environmentContext.js +3 -1
  180. package/dist/types/gitlab-ci-yml.d.ts +30 -30
  181. package/dist/types/gitlab-ci-yml.js +3 -2
  182. package/dist/types/gitlab-types.d.ts +4 -6
  183. package/dist/types/gitlab-types.js +3 -1
  184. package/dist/types/index.js +13 -7
  185. package/dist/types/jobs.d.ts +23 -6
  186. package/dist/types/jobs.js +3 -1
  187. package/dist/types/pipeline.d.ts +4 -3
  188. package/dist/types/pipeline.js +3 -1
  189. package/dist/types/utils.d.ts +1 -1
  190. package/dist/types/utils.js +3 -1
  191. package/dist/utils/gitlab.js +3 -1
  192. package/dist/utils/index.d.ts +1 -1
  193. package/dist/utils/index.js +3 -1
  194. package/dist/utils/writeFiles.d.ts +7 -0
  195. package/dist/{pipeline/commitInfo/getBuildId.js โ†’ utils/writeFiles.js} +39 -22
  196. package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +480 -384
  197. package/examples/__snapshots__/cloud-run-meteor-with-worker.ts.snap +462 -366
  198. package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +480 -384
  199. package/examples/__snapshots__/cloud-run-no-service.ts.snap +501 -393
  200. package/examples/__snapshots__/cloud-run-non-public.ts.snap +480 -384
  201. package/examples/__snapshots__/cloud-run-post-stop-job.ts.snap +489 -392
  202. package/examples/__snapshots__/cloud-run-service-gen2.ts.snap +480 -384
  203. package/examples/__snapshots__/cloud-run-service-with-volumes.ts.snap +501 -401
  204. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +1155 -915
  205. package/examples/__snapshots__/cloud-run-with-sql.ts.snap +1116 -888
  206. package/examples/__snapshots__/cloud-run-with-worker.ts.snap +482 -386
  207. package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +452 -356
  208. package/examples/__snapshots__/custom-build-job.ts.snap +434 -350
  209. package/examples/__snapshots__/custom-deploy.ts.snap +319 -223
  210. package/examples/__snapshots__/custom-envs.ts.snap +123 -81
  211. package/examples/__snapshots__/custom-sbom-java.ts.snap +434 -350
  212. package/examples/__snapshots__/kubernetes-application-customization.ts.snap +846 -969
  213. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +886 -957
  214. package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +894 -969
  215. package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +1626 -1728
  216. package/examples/__snapshots__/kubernetes-with-mongodb.ts.snap +974 -1137
  217. package/examples/__snapshots__/local-dot-env.ts.snap +480 -384
  218. package/examples/__snapshots__/meteor-kubernetes.ts.snap +906 -1069
  219. package/examples/__snapshots__/multiline-var.ts.snap +4500 -0
  220. package/examples/__snapshots__/native-app.ts.snap +706 -578
  221. package/examples/__snapshots__/node-build-with-custom-image.ts.snap +480 -384
  222. package/examples/__snapshots__/node-build-with-docker-additions.ts.snap +488 -384
  223. package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +1656 -1942
  224. package/examples/__snapshots__/wait-for-other-deploy.ts.snap +287 -231
  225. package/examples/custom-deploy.ts +7 -7
  226. package/examples/multiline-var.ts +64 -0
  227. package/package.json +5 -8
  228. package/src/bash/BashExpression.ts +81 -0
  229. package/src/bash/bashExpressionPerPipelineType.ts +16 -0
  230. package/src/bash/bashYaml.ts +46 -0
  231. package/src/bash/getInjectVarsScript.ts +12 -0
  232. package/src/bash/replaceAsync.ts +50 -0
  233. package/src/build/base/createAppBuildJob.ts +6 -2
  234. package/src/build/base/writeBuildInfo.ts +1 -1
  235. package/src/build/base/writeDotEnv.ts +6 -1
  236. package/src/build/custom/buildJob.ts +2 -4
  237. package/src/build/custom/testJob.ts +3 -2
  238. package/src/build/docker.ts +15 -7
  239. package/src/build/node/buildJob.ts +1 -3
  240. package/src/build/node/testJob.ts +3 -2
  241. package/src/build/node/yarn.ts +9 -4
  242. package/src/build/rails/test.ts +2 -1
  243. package/src/build/types.ts +8 -1
  244. package/src/catladder-gitlab.ts +8 -55
  245. package/src/config/readConfig.ts +2 -3
  246. package/src/constants.ts +5 -2
  247. package/src/context/__tests__/resolveReferences.test.ts +11 -6
  248. package/src/context/getBuildInfoVariables.ts +40 -0
  249. package/src/context/getEnvironment.ts +7 -30
  250. package/src/context/getEnvironmentContext.ts +25 -29
  251. package/src/context/getEnvironmentVariables.ts +61 -36
  252. package/src/context/getReviewSlug.ts +27 -0
  253. package/src/context/index.ts +24 -23
  254. package/src/context/resolveReferences.ts +28 -8
  255. package/src/context/transformJobOnlyVars.ts +5 -2
  256. package/src/context/utils/envVars.ts +2 -1
  257. package/src/deploy/base/deploy.ts +20 -18
  258. package/src/deploy/base/rollback.ts +8 -10
  259. package/src/deploy/base/stop.ts +8 -9
  260. package/src/deploy/cloudRun/artifactsRegistry.ts +9 -4
  261. package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +12 -7
  262. package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +3 -2
  263. package/src/deploy/cloudRun/createJobs/constants.ts +1 -0
  264. package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +20 -2
  265. package/src/deploy/cloudRun/createJobs/index.ts +17 -8
  266. package/src/deploy/cloudRun/index.ts +14 -6
  267. package/src/deploy/cloudRun/utils/createArgsString.ts +2 -1
  268. package/src/deploy/cloudRun/utils/database.ts +2 -2
  269. package/src/deploy/cloudRun/utils/jobName.ts +7 -2
  270. package/src/deploy/cloudSql/utils.ts +12 -9
  271. package/src/deploy/index.ts +2 -1
  272. package/src/deploy/kubernetes/cloudSql/index.ts +3 -2
  273. package/src/deploy/kubernetes/deployJob.ts +24 -10
  274. package/src/deploy/kubernetes/index.ts +15 -8
  275. package/src/deploy/kubernetes/kubeEnv.ts +8 -6
  276. package/src/deploy/kubernetes/kubeValues.ts +0 -1
  277. package/src/deploy/kubernetes/processSecretsAsFiles.ts +2 -1
  278. package/src/deploy/types/base.ts +6 -0
  279. package/src/deploy/types/googleCloudRun.ts +2 -0
  280. package/src/index.ts +2 -1
  281. package/src/packageInfos.ts +10 -0
  282. package/src/pipeline/createAllJobs.ts +24 -10
  283. package/src/pipeline/createChildPipeline.ts +19 -8
  284. package/src/pipeline/createJobsForComponent.ts +14 -22
  285. package/src/pipeline/createMainPipeline.ts +88 -0
  286. package/src/pipeline/generatePipelineFiles.ts +29 -0
  287. package/src/pipeline/gitlab/createGitlabJobs.ts +174 -51
  288. package/src/pipeline/gitlab/createGitlabPipeline.ts +16 -14
  289. package/src/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.ts +46 -0
  290. package/src/pipeline/gitlab/gitlabReleaseJobs.ts +20 -0
  291. package/src/pipeline/index.ts +2 -0
  292. package/src/rules/index.ts +15 -9
  293. package/src/types/config.ts +11 -2
  294. package/src/types/context.ts +39 -26
  295. package/src/types/environmentContext.ts +12 -6
  296. package/src/types/gitlab-ci-yml.ts +0 -1
  297. package/src/types/gitlab-types.ts +5 -4
  298. package/src/types/jobs.ts +28 -3
  299. package/src/types/pipeline.ts +4 -0
  300. package/src/utils/writeFiles.ts +40 -0
  301. package/dist/deploy/cloudRun/createJobs/variables.d.ts +0 -5
  302. package/dist/deploy/cloudRun/createJobs/variables.js +0 -19
  303. package/dist/pipeline/commitInfo/getBuildId.d.ts +0 -6
  304. package/dist/pipeline/commitInfo/getCommitInfo.d.ts +0 -2
  305. package/src/deploy/cloudRun/createJobs/variables.ts +0 -21
  306. package/src/pipeline/commitInfo/getBuildId.ts +0 -17
  307. package/src/pipeline/commitInfo/getCommitInfo.ts +0 -15
@@ -6,10 +6,16 @@ exports[`matches snapshot 1`] = `
6
6
  "image": "path/to/docker/jobs-default:the-version",
7
7
  "jobs": {
8
8
  "web โ†ฉ๏ธ Rollback โš ๏ธ | dev ": {
9
+ "allow_failure": true,
10
+ "artifacts": {
11
+ "reports": {
12
+ "dotenv": "gitlab_environment.env",
13
+ },
14
+ },
9
15
  "environment": {
10
16
  "action": "access",
11
17
  "name": "dev/web",
12
- "url": "https://web.dev.my-app.pan.panter.cloud",
18
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
13
19
  },
14
20
  "image": "path/to/docker/kubernetes:the-version",
15
21
  "interruptible": true,
@@ -23,97 +29,48 @@ exports[`matches snapshot 1`] = `
23
29
  },
24
30
  "rules": [
25
31
  {
26
- "allow_failure": true,
27
32
  "when": "manual",
28
33
  },
29
34
  ],
30
35
  "script": [
36
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
37
+ "export ENV_SHORT="dev"",
38
+ "export APP_DIR="app"",
39
+ "export ENV_TYPE="dev"",
40
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
41
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
42
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
43
+ "export HOST="web.dev.my-app.pan.panter.cloud"",
44
+ "export ROOT_URL="https://web.dev.my-app.pan.panter.cloud"",
45
+ "export HOST_INTERNAL="web.dev.my-app.pan.panter.cloud"",
46
+ "export HOST_CANONICAL="web.dev.my-app.pan.panter.cloud"",
47
+ "export ROOT_URL_INTERNAL="https://web.dev.my-app.pan.panter.cloud"",
48
+ "export KUBE_NAMESPACE="pan-my-app-dev"",
49
+ "export KUBE_APP_NAME="web"",
50
+ "export KUBE_APP_NAME_PREFIX=""",
51
+ "export MONGODB_ROOT_PASSWORD="$CL_dev_web_MONGODB_ROOT_PASSWORD"",
52
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"",
53
+ "export RELEASE_NAME="pan-my-app-dev-web"",
54
+ "export HELM_EXPERIMENTAL_OCI="1"",
55
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"",
56
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
57
+ "export HELM_ARGS=""",
58
+ "export COMPONENT_NAME="web"",
59
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
60
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
31
61
  "kubectl config set-cluster "kube-pan-my-app-dev-web" --server="$CL_dev_web_KUBE_URL" --certificate-authority <(echo $CL_dev_web_KUBE_CA_PEM | base64 -d) --embed-certs=true",
32
62
  "kubectl config set-credentials "kube-pan-my-app-dev-web" --token="$CL_dev_web_KUBE_TOKEN"",
33
63
  "kubectl config set-context "kube-pan-my-app-dev-web" --cluster="kube-pan-my-app-dev-web" --user="kube-pan-my-app-dev-web" --namespace="pan-my-app-dev"",
34
64
  "kubectl config use-context "kube-pan-my-app-dev-web"",
35
65
  "kubernetesRollback",
66
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://web.dev.my-app.pan.panter.cloud" >> gitlab_environment.env",
36
67
  ],
37
68
  "stage": "rollback dev",
38
69
  "variables": {
39
- "APP_DIR": "app",
40
- "BUILD_ID": "some-id",
41
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
42
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
43
- "BUILD_INFO_ID": "some-id",
44
- "COMPONENT_NAME": "web",
45
- "ENV_SHORT": "dev",
46
- "ENV_TYPE": "dev",
47
70
  "GIT_STRATEGY": "none",
48
- "HELM_ARGS": "",
49
- "HELM_EXPERIMENTAL_OCI": "1",
50
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
51
- "HOST": "web.dev.my-app.pan.panter.cloud",
52
- "HOST_CANONICAL": "web.dev.my-app.pan.panter.cloud",
53
- "HOST_INTERNAL": "web.dev.my-app.pan.panter.cloud",
54
71
  "KUBERNETES_CPU_REQUEST": "0.5",
55
72
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
56
73
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
57
- "KUBE_APP_NAME": "web",
58
- "KUBE_APP_NAME_PREFIX": "",
59
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-web",
60
- "KUBE_NAMESPACE": "pan-my-app-dev",
61
- "KUBE_VALUES": "env:
62
- secret:
63
- MONGODB_ROOT_PASSWORD: '$CL_dev_web_MONGODB_ROOT_PASSWORD'
64
- MONGO_URL: 'mongodb://root:$CL_dev_web_MONGODB_ROOT_PASSWORD@web-mongodb.pan-my-app-dev.svc.cluster.local:27017/app?authSource=admin'
65
- public:
66
- ENV_SHORT: 'dev'
67
- APP_DIR: 'app'
68
- ENV_TYPE: 'dev'
69
- BUILD_INFO_ID: 'some-id'
70
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
71
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
72
- HOST: 'web.dev.my-app.pan.panter.cloud'
73
- ROOT_URL: 'https://web.dev.my-app.pan.panter.cloud'
74
- HOST_CANONICAL: 'web.dev.my-app.pan.panter.cloud'
75
- ROOT_URL_INTERNAL: 'https://web.dev.my-app.pan.panter.cloud'
76
- KUBE_NAMESPACE: 'pan-my-app-dev'
77
- KUBE_APP_NAME: 'web'
78
- KUBE_APP_NAME_PREFIX: ''
79
- HOST_INTERNAL: 'web.dev.my-app.pan.panter.cloud'
80
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]'
81
- application:
82
- host: 'web.dev.my-app.pan.panter.cloud'
83
- command: 'node main.js'
84
- livenessProbe:
85
- httpGet:
86
- path: '__health'
87
- readinessProbe:
88
- httpGet:
89
- path: '__health'
90
- startupProbe:
91
- httpGet:
92
- path: '__health'
93
- worker:
94
- enabled: true
95
- mongodb:
96
- enabled: true
97
- auth:
98
- enabled: true
99
- rootPassword: '$CL_dev_web_MONGODB_ROOT_PASSWORD'
100
- replicaSetKey: '$CL_dev_web_MONGODB_REPLICASET_KEY'
101
- persistence:
102
- storageClass: 'standard-rwo'
103
- backup:
104
- enabled: false
105
- hostToBackup: 'web-mongodb.pan-my-app-dev.svc.cluster.local:27017'
106
- pvcToBackup: 'web-mongodb'
107
- image: 'mrelite/kubectlmongoshell:v1.0'
108
- schedule: '0 4 * * *'
109
- volumeSnapshotClass: 'snapshotclass'
110
- architecture: 'standalone'
111
- ",
112
- "MONGODB_ROOT_PASSWORD": "$CL_dev_web_MONGODB_ROOT_PASSWORD",
113
- "RELEASE_NAME": "pan-my-app-dev-web",
114
- "ROOT_URL": "https://web.dev.my-app.pan.panter.cloud",
115
- "ROOT_URL_INTERNAL": "https://web.dev.my-app.pan.panter.cloud",
116
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]",
117
74
  },
118
75
  },
119
76
  "web ๐Ÿ‘ฎ lint": {
@@ -144,6 +101,9 @@ mongodb:
144
101
  ],
145
102
  },
146
103
  "script": [
104
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
105
+ "export APP_PATH="app"",
106
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
147
107
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
148
108
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
149
109
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -160,7 +120,6 @@ mongodb:
160
120
  ],
161
121
  "stage": "test",
162
122
  "variables": {
163
- "APP_PATH": "app",
164
123
  "KUBERNETES_CPU_REQUEST": "0.5",
165
124
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
166
125
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -213,7 +172,26 @@ mongodb:
213
172
  ],
214
173
  },
215
174
  "script": [
216
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > app/__build_info.json",
175
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
176
+ "export METEOR_DISABLE_OPTIMISTIC_CACHING="1"",
177
+ "export ENV_SHORT="dev"",
178
+ "export APP_DIR="app"",
179
+ "export ENV_TYPE="dev"",
180
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
181
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
182
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
183
+ "export HOST="web.dev.my-app.pan.panter.cloud"",
184
+ "export ROOT_URL="https://web.dev.my-app.pan.panter.cloud"",
185
+ "export HOST_INTERNAL="web.dev.my-app.pan.panter.cloud"",
186
+ "export HOST_CANONICAL="web.dev.my-app.pan.panter.cloud"",
187
+ "export ROOT_URL_INTERNAL="https://web.dev.my-app.pan.panter.cloud"",
188
+ "export KUBE_NAMESPACE="pan-my-app-dev"",
189
+ "export KUBE_APP_NAME="web"",
190
+ "export KUBE_APP_NAME_PREFIX=""",
191
+ "export MONGODB_ROOT_PASSWORD="$CL_dev_web_MONGODB_ROOT_PASSWORD"",
192
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"",
193
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
194
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app/__build_info.json",
217
195
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
218
196
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
219
197
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -234,26 +212,9 @@ mongodb:
234
212
  ],
235
213
  "stage": "build",
236
214
  "variables": {
237
- "APP_DIR": "app",
238
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
239
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
240
- "BUILD_INFO_ID": "some-id",
241
- "ENV_SHORT": "dev",
242
- "ENV_TYPE": "dev",
243
- "HOST": "web.dev.my-app.pan.panter.cloud",
244
- "HOST_CANONICAL": "web.dev.my-app.pan.panter.cloud",
245
- "HOST_INTERNAL": "web.dev.my-app.pan.panter.cloud",
246
215
  "KUBERNETES_CPU_REQUEST": "0.5",
247
216
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
248
217
  "KUBERNETES_MEMORY_REQUEST": "1Gi",
249
- "KUBE_APP_NAME": "web",
250
- "KUBE_APP_NAME_PREFIX": "",
251
- "KUBE_NAMESPACE": "pan-my-app-dev",
252
- "METEOR_DISABLE_OPTIMISTIC_CACHING": "1",
253
- "MONGODB_ROOT_PASSWORD": "$CL_dev_web_MONGODB_ROOT_PASSWORD",
254
- "ROOT_URL": "https://web.dev.my-app.pan.panter.cloud",
255
- "ROOT_URL_INTERNAL": "https://web.dev.my-app.pan.panter.cloud",
256
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]",
257
218
  },
258
219
  },
259
220
  "web ๐Ÿ”จ docker | dev ": {
@@ -270,6 +231,16 @@ mongodb:
270
231
  ],
271
232
  },
272
233
  "script": [
234
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
235
+ "export APP_DIR="app"",
236
+ "export DOCKER_DIR="."",
237
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
238
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/web"",
239
+ "export DOCKER_IMAGE_NAME="dev/web"",
240
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
241
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
242
+ "export METEOR_INSTALL_SCRIPTS=""",
243
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
273
244
  "ensureMeteorDockerfile",
274
245
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
275
246
  "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
@@ -293,32 +264,27 @@ mongodb:
293
264
  ],
294
265
  "stage": "build",
295
266
  "variables": {
296
- "APP_DIR": "app",
297
- "DOCKERFILE_ADDITIONS": undefined,
298
- "DOCKERFILE_ADDITIONS_END": undefined,
299
267
  "DOCKER_BUILDKIT": "1",
300
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/web",
301
- "DOCKER_DIR": ".",
302
268
  "DOCKER_DRIVER": "overlay2",
303
269
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
304
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
305
- "DOCKER_IMAGE_NAME": "dev/web",
306
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
307
- "DOCKER_REGISTRY": "$CI_REGISTRY",
308
270
  "DOCKER_TLS_CERTDIR": "",
309
271
  "KUBERNETES_CPU_REQUEST": "0.5",
310
272
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
311
273
  "KUBERNETES_MEMORY_REQUEST": "1Gi",
312
- "METEOR_INSTALL_SCRIPTS": "",
313
274
  },
314
275
  },
315
276
  "web ๐Ÿš€ Deploy | dev ": {
316
277
  "allow_failure": false,
278
+ "artifacts": {
279
+ "reports": {
280
+ "dotenv": "gitlab_environment.env",
281
+ },
282
+ },
317
283
  "environment": {
318
284
  "auto_stop_in": "4 weeks",
319
285
  "name": "dev/web",
320
286
  "on_stop": "web ๐Ÿ›‘ Stop โš ๏ธ | dev ",
321
- "url": "https://web.dev.my-app.pan.panter.cloud",
287
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
322
288
  },
323
289
  "image": "path/to/docker/kubernetes:the-version",
324
290
  "interruptible": true,
@@ -361,107 +327,151 @@ mongodb:
361
327
  },
362
328
  ],
363
329
  "script": [
330
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
331
+ "export ENV_SHORT="dev"",
332
+ "export APP_DIR="app"",
333
+ "export ENV_TYPE="dev"",
334
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
335
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
336
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
337
+ "export HOST="web.dev.my-app.pan.panter.cloud"",
338
+ "export ROOT_URL="https://web.dev.my-app.pan.panter.cloud"",
339
+ "export HOST_INTERNAL="web.dev.my-app.pan.panter.cloud"",
340
+ "export HOST_CANONICAL="web.dev.my-app.pan.panter.cloud"",
341
+ "export ROOT_URL_INTERNAL="https://web.dev.my-app.pan.panter.cloud"",
342
+ "export KUBE_NAMESPACE="pan-my-app-dev"",
343
+ "export KUBE_APP_NAME="web"",
344
+ "export KUBE_APP_NAME_PREFIX=""",
345
+ "export MONGODB_ROOT_PASSWORD="$CL_dev_web_MONGODB_ROOT_PASSWORD"",
346
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"",
347
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
348
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/web"",
349
+ "export DOCKER_IMAGE_NAME="dev/web"",
350
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
351
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
352
+ "export RELEASE_NAME="pan-my-app-dev-web"",
353
+ "export HELM_EXPERIMENTAL_OCI="1"",
354
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"",
355
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
356
+ "export HELM_ARGS=""",
357
+ "export COMPONENT_NAME="web"",
358
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
359
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
364
360
  "kubectl config set-cluster "kube-pan-my-app-dev-web" --server="$CL_dev_web_KUBE_URL" --certificate-authority <(echo $CL_dev_web_KUBE_CA_PEM | base64 -d) --embed-certs=true",
365
361
  "kubectl config set-credentials "kube-pan-my-app-dev-web" --token="$CL_dev_web_KUBE_TOKEN"",
366
362
  "kubectl config set-context "kube-pan-my-app-dev-web" --cluster="kube-pan-my-app-dev-web" --user="kube-pan-my-app-dev-web" --namespace="pan-my-app-dev"",
367
363
  "kubectl config use-context "kube-pan-my-app-dev-web"",
368
- "kubernetesCreateSecret",
369
- "kubernetesDeploy",
370
- "echo Uploading SBOM to Dependency Track",
371
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-my-app/web" "https://web.dev.my-app.pan.panter.cloud" "__sbom.json" vex.json || true",
372
- "echo deployment successful ๐Ÿ˜ป",
373
- ],
374
- "stage": "deploy dev",
375
- "variables": {
376
- "APP_DIR": "app",
377
- "BUILD_ID": "some-id",
378
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
379
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
380
- "BUILD_INFO_ID": "some-id",
381
- "COMPONENT_NAME": "web",
382
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/web",
383
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
384
- "DOCKER_IMAGE_NAME": "dev/web",
385
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
386
- "DOCKER_REGISTRY": "$CI_REGISTRY",
387
- "ENV_SHORT": "dev",
388
- "ENV_TYPE": "dev",
389
- "HELM_ARGS": "",
390
- "HELM_EXPERIMENTAL_OCI": "1",
391
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
392
- "HOST": "web.dev.my-app.pan.panter.cloud",
393
- "HOST_CANONICAL": "web.dev.my-app.pan.panter.cloud",
394
- "HOST_INTERNAL": "web.dev.my-app.pan.panter.cloud",
395
- "KUBERNETES_CPU_REQUEST": "0.5",
396
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
397
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
398
- "KUBE_APP_NAME": "web",
399
- "KUBE_APP_NAME_PREFIX": "",
400
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-web",
401
- "KUBE_NAMESPACE": "pan-my-app-dev",
402
- "KUBE_VALUES": "env:
364
+ "echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
365
+ "cat > __all_values.yml <<EOF
366
+ env:
403
367
  secret:
404
- MONGODB_ROOT_PASSWORD: '$CL_dev_web_MONGODB_ROOT_PASSWORD'
405
- MONGO_URL: 'mongodb://root:$CL_dev_web_MONGODB_ROOT_PASSWORD@web-mongodb.pan-my-app-dev.svc.cluster.local:27017/app?authSource=admin'
368
+ MONGODB_ROOT_PASSWORD: |-
369
+ $(printf %s "$CL_dev_web_MONGODB_ROOT_PASSWORD" | sed 's/^/ /')
370
+ MONGO_URL: |-
371
+ mongodb://root:$CL_dev_web_MONGODB_ROOT_PASSWORD@web-mongodb.pan-my-app-dev.svc.cluster.local:27017/app?authSource=admin
406
372
  public:
407
- ENV_SHORT: 'dev'
408
- APP_DIR: 'app'
409
- ENV_TYPE: 'dev'
410
- BUILD_INFO_ID: 'some-id'
411
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
412
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
413
- HOST: 'web.dev.my-app.pan.panter.cloud'
414
- ROOT_URL: 'https://web.dev.my-app.pan.panter.cloud'
415
- HOST_CANONICAL: 'web.dev.my-app.pan.panter.cloud'
416
- ROOT_URL_INTERNAL: 'https://web.dev.my-app.pan.panter.cloud'
417
- KUBE_NAMESPACE: 'pan-my-app-dev'
418
- KUBE_APP_NAME: 'web'
419
- KUBE_APP_NAME_PREFIX: ''
420
- HOST_INTERNAL: 'web.dev.my-app.pan.panter.cloud'
421
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]'
373
+ ENV_SHORT: |-
374
+ dev
375
+ APP_DIR: |-
376
+ app
377
+ ENV_TYPE: |-
378
+ dev
379
+ BUILD_INFO_BUILD_ID: |-
380
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
381
+ BUILD_INFO_BUILD_TIME: |-
382
+ $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
383
+ BUILD_INFO_CURRENT_VERSION: |-
384
+ $(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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")" | sed 's/^/ /')
385
+ HOST: |-
386
+ web.dev.my-app.pan.panter.cloud
387
+ ROOT_URL: |-
388
+ https://web.dev.my-app.pan.panter.cloud
389
+ HOST_INTERNAL: |-
390
+ web.dev.my-app.pan.panter.cloud
391
+ HOST_CANONICAL: |-
392
+ web.dev.my-app.pan.panter.cloud
393
+ ROOT_URL_INTERNAL: |-
394
+ https://web.dev.my-app.pan.panter.cloud
395
+ KUBE_NAMESPACE: |-
396
+ pan-my-app-dev
397
+ KUBE_APP_NAME: |-
398
+ web
399
+ KUBE_APP_NAME_PREFIX: ""
400
+ _ALL_ENV_VAR_KEYS: |-
401
+ ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","MONGODB_ROOT_PASSWORD"]
422
402
  application:
423
- host: 'web.dev.my-app.pan.panter.cloud'
424
- command: 'node main.js'
403
+ host: |-
404
+ web.dev.my-app.pan.panter.cloud
405
+ command: |-
406
+ node main.js
425
407
  livenessProbe:
426
408
  httpGet:
427
- path: '__health'
409
+ path: |-
410
+ __health
428
411
  readinessProbe:
429
412
  httpGet:
430
- path: '__health'
413
+ path: |-
414
+ __health
431
415
  startupProbe:
432
416
  httpGet:
433
- path: '__health'
417
+ path: |-
418
+ __health
434
419
  worker:
435
420
  enabled: true
436
421
  mongodb:
437
422
  enabled: true
438
423
  auth:
439
424
  enabled: true
440
- rootPassword: '$CL_dev_web_MONGODB_ROOT_PASSWORD'
441
- replicaSetKey: '$CL_dev_web_MONGODB_REPLICASET_KEY'
425
+ rootPassword: |-
426
+ $CL_dev_web_MONGODB_ROOT_PASSWORD
427
+ replicaSetKey: |-
428
+ $CL_dev_web_MONGODB_REPLICASET_KEY
442
429
  persistence:
443
- storageClass: 'standard-rwo'
430
+ storageClass: |-
431
+ standard-rwo
444
432
  backup:
445
433
  enabled: false
446
- hostToBackup: 'web-mongodb.pan-my-app-dev.svc.cluster.local:27017'
447
- pvcToBackup: 'web-mongodb'
448
- image: 'mrelite/kubectlmongoshell:v1.0'
449
- schedule: '0 4 * * *'
450
- volumeSnapshotClass: 'snapshotclass'
451
- architecture: 'standalone'
434
+ hostToBackup: |-
435
+ web-mongodb.pan-my-app-dev.svc.cluster.local:27017
436
+ pvcToBackup: |-
437
+ web-mongodb
438
+ image: |-
439
+ mrelite/kubectlmongoshell:v1.0
440
+ schedule: |-
441
+ 0 4 * * *
442
+ volumeSnapshotClass: |-
443
+ snapshotclass
444
+ architecture: |-
445
+ standalone
446
+
447
+ EOF
452
448
  ",
453
- "MONGODB_ROOT_PASSWORD": "$CL_dev_web_MONGODB_ROOT_PASSWORD",
454
- "RELEASE_NAME": "pan-my-app-dev-web",
455
- "ROOT_URL": "https://web.dev.my-app.pan.panter.cloud",
456
- "ROOT_URL_INTERNAL": "https://web.dev.my-app.pan.panter.cloud",
457
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]",
449
+ "echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
450
+ "kubernetesCreateSecret",
451
+ "kubernetesDeploy",
452
+ "echo Uploading SBOM to Dependency Track",
453
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-my-app/web" "https://web.dev.my-app.pan.panter.cloud" "__sbom.json" vex.json || true",
454
+ "echo deployment successful ๐Ÿ˜ป",
455
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://web.dev.my-app.pan.panter.cloud" >> gitlab_environment.env",
456
+ ],
457
+ "stage": "deploy dev",
458
+ "variables": {
459
+ "KUBERNETES_CPU_REQUEST": "0.5",
460
+ "KUBERNETES_MEMORY_LIMIT": "400Mi",
461
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
458
462
  },
459
463
  },
460
464
  "web ๐Ÿ›‘ Stop โš ๏ธ | dev ": {
465
+ "allow_failure": true,
466
+ "artifacts": {
467
+ "reports": {
468
+ "dotenv": "gitlab_environment.env",
469
+ },
470
+ },
461
471
  "environment": {
462
472
  "action": "stop",
463
473
  "name": "dev/web",
464
- "url": "https://web.dev.my-app.pan.panter.cloud",
474
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
465
475
  },
466
476
  "image": "path/to/docker/kubernetes:the-version",
467
477
  "interruptible": true,
@@ -475,16 +485,39 @@ mongodb:
475
485
  },
476
486
  "rules": [
477
487
  {
478
- "allow_failure": true,
479
488
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
480
489
  "when": "on_success",
481
490
  },
482
491
  {
483
- "allow_failure": true,
484
492
  "when": "manual",
485
493
  },
486
494
  ],
487
495
  "script": [
496
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
497
+ "export ENV_SHORT="dev"",
498
+ "export APP_DIR="app"",
499
+ "export ENV_TYPE="dev"",
500
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
501
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
502
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
503
+ "export HOST="web.dev.my-app.pan.panter.cloud"",
504
+ "export ROOT_URL="https://web.dev.my-app.pan.panter.cloud"",
505
+ "export HOST_INTERNAL="web.dev.my-app.pan.panter.cloud"",
506
+ "export HOST_CANONICAL="web.dev.my-app.pan.panter.cloud"",
507
+ "export ROOT_URL_INTERNAL="https://web.dev.my-app.pan.panter.cloud"",
508
+ "export KUBE_NAMESPACE="pan-my-app-dev"",
509
+ "export KUBE_APP_NAME="web"",
510
+ "export KUBE_APP_NAME_PREFIX=""",
511
+ "export MONGODB_ROOT_PASSWORD="$CL_dev_web_MONGODB_ROOT_PASSWORD"",
512
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"",
513
+ "export RELEASE_NAME="pan-my-app-dev-web"",
514
+ "export HELM_EXPERIMENTAL_OCI="1"",
515
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"",
516
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
517
+ "export HELM_ARGS=""",
518
+ "export COMPONENT_NAME="web"",
519
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
520
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
488
521
  "kubectl config set-cluster "kube-pan-my-app-dev-web" --server="$CL_dev_web_KUBE_URL" --certificate-authority <(echo $CL_dev_web_KUBE_CA_PEM | base64 -d) --embed-certs=true",
489
522
  "kubectl config set-credentials "kube-pan-my-app-dev-web" --token="$CL_dev_web_KUBE_TOKEN"",
490
523
  "kubectl config set-context "kube-pan-my-app-dev-web" --cluster="kube-pan-my-app-dev-web" --user="kube-pan-my-app-dev-web" --namespace="pan-my-app-dev"",
@@ -492,87 +525,14 @@ mongodb:
492
525
  "kubernetesDelete",
493
526
  "echo Disabling component in Dependency Track",
494
527
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-my-app/web" "https://web.dev.my-app.pan.panter.cloud" || true",
528
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://web.dev.my-app.pan.panter.cloud" >> gitlab_environment.env",
495
529
  ],
496
530
  "stage": "stop dev",
497
531
  "variables": {
498
- "APP_DIR": "app",
499
- "BUILD_ID": "some-id",
500
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
501
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
502
- "BUILD_INFO_ID": "some-id",
503
- "COMPONENT_NAME": "web",
504
- "ENV_SHORT": "dev",
505
- "ENV_TYPE": "dev",
506
532
  "GIT_STRATEGY": "none",
507
- "HELM_ARGS": "",
508
- "HELM_EXPERIMENTAL_OCI": "1",
509
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
510
- "HOST": "web.dev.my-app.pan.panter.cloud",
511
- "HOST_CANONICAL": "web.dev.my-app.pan.panter.cloud",
512
- "HOST_INTERNAL": "web.dev.my-app.pan.panter.cloud",
513
533
  "KUBERNETES_CPU_REQUEST": "0.5",
514
534
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
515
535
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
516
- "KUBE_APP_NAME": "web",
517
- "KUBE_APP_NAME_PREFIX": "",
518
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-web",
519
- "KUBE_NAMESPACE": "pan-my-app-dev",
520
- "KUBE_VALUES": "env:
521
- secret:
522
- MONGODB_ROOT_PASSWORD: '$CL_dev_web_MONGODB_ROOT_PASSWORD'
523
- MONGO_URL: 'mongodb://root:$CL_dev_web_MONGODB_ROOT_PASSWORD@web-mongodb.pan-my-app-dev.svc.cluster.local:27017/app?authSource=admin'
524
- public:
525
- ENV_SHORT: 'dev'
526
- APP_DIR: 'app'
527
- ENV_TYPE: 'dev'
528
- BUILD_INFO_ID: 'some-id'
529
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
530
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
531
- HOST: 'web.dev.my-app.pan.panter.cloud'
532
- ROOT_URL: 'https://web.dev.my-app.pan.panter.cloud'
533
- HOST_CANONICAL: 'web.dev.my-app.pan.panter.cloud'
534
- ROOT_URL_INTERNAL: 'https://web.dev.my-app.pan.panter.cloud'
535
- KUBE_NAMESPACE: 'pan-my-app-dev'
536
- KUBE_APP_NAME: 'web'
537
- KUBE_APP_NAME_PREFIX: ''
538
- HOST_INTERNAL: 'web.dev.my-app.pan.panter.cloud'
539
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]'
540
- application:
541
- host: 'web.dev.my-app.pan.panter.cloud'
542
- command: 'node main.js'
543
- livenessProbe:
544
- httpGet:
545
- path: '__health'
546
- readinessProbe:
547
- httpGet:
548
- path: '__health'
549
- startupProbe:
550
- httpGet:
551
- path: '__health'
552
- worker:
553
- enabled: true
554
- mongodb:
555
- enabled: true
556
- auth:
557
- enabled: true
558
- rootPassword: '$CL_dev_web_MONGODB_ROOT_PASSWORD'
559
- replicaSetKey: '$CL_dev_web_MONGODB_REPLICASET_KEY'
560
- persistence:
561
- storageClass: 'standard-rwo'
562
- backup:
563
- enabled: false
564
- hostToBackup: 'web-mongodb.pan-my-app-dev.svc.cluster.local:27017'
565
- pvcToBackup: 'web-mongodb'
566
- image: 'mrelite/kubectlmongoshell:v1.0'
567
- schedule: '0 4 * * *'
568
- volumeSnapshotClass: 'snapshotclass'
569
- architecture: 'standalone'
570
- ",
571
- "MONGODB_ROOT_PASSWORD": "$CL_dev_web_MONGODB_ROOT_PASSWORD",
572
- "RELEASE_NAME": "pan-my-app-dev-web",
573
- "ROOT_URL": "https://web.dev.my-app.pan.panter.cloud",
574
- "ROOT_URL_INTERNAL": "https://web.dev.my-app.pan.panter.cloud",
575
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]",
576
536
  },
577
537
  },
578
538
  "web ๐Ÿ›ก audit": {
@@ -588,12 +548,14 @@ mongodb:
588
548
  ],
589
549
  },
590
550
  "script": [
551
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
552
+ "export APP_PATH="app"",
553
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
591
554
  "cd app",
592
555
  "yarn npm audit --environment production",
593
556
  ],
594
557
  "stage": "test",
595
558
  "variables": {
596
- "APP_PATH": "app",
597
559
  "KUBERNETES_CPU_REQUEST": "0.5",
598
560
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
599
561
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -627,6 +589,9 @@ mongodb:
627
589
  ],
628
590
  },
629
591
  "script": [
592
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
593
+ "export APP_PATH="app"",
594
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
630
595
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
631
596
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
632
597
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -643,7 +608,6 @@ mongodb:
643
608
  ],
644
609
  "stage": "test",
645
610
  "variables": {
646
- "APP_PATH": "app",
647
611
  "KUBERNETES_CPU_REQUEST": "0.5",
648
612
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
649
613
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -667,6 +631,8 @@ mongodb:
667
631
  ],
668
632
  },
669
633
  "script": [
634
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
635
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
670
636
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" app",
671
637
  ],
672
638
  "stage": "build",
@@ -719,7 +685,7 @@ mongodb:
719
685
  ],
720
686
  "variables": {
721
687
  "FF_USE_FASTZIP": "true",
722
- "GIT_DEPTH": 1,
688
+ "GIT_DEPTH": "1",
723
689
  },
724
690
  "workflow": {
725
691
  "rules": [
@@ -750,10 +716,16 @@ mongodb:
750
716
  "image": "path/to/docker/jobs-default:the-version",
751
717
  "jobs": {
752
718
  "web โ†ฉ๏ธ Rollback โš ๏ธ | review ": {
719
+ "allow_failure": true,
720
+ "artifacts": {
721
+ "reports": {
722
+ "dotenv": "gitlab_environment.env",
723
+ },
724
+ },
753
725
  "environment": {
754
726
  "action": "access",
755
- "name": "review/some-commit/web",
756
- "url": "https://web.mr1234.review.my-app.pan.panter.cloud",
727
+ "name": "review/$CI_COMMIT_REF_NAME/web",
728
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
757
729
  },
758
730
  "image": "path/to/docker/kubernetes:the-version",
759
731
  "interruptible": true,
@@ -767,97 +739,48 @@ mongodb:
767
739
  },
768
740
  "rules": [
769
741
  {
770
- "allow_failure": true,
771
742
  "when": "manual",
772
743
  },
773
744
  ],
774
745
  "script": [
775
- "kubectl config set-cluster "kube-pan-my-app-review-mr1234-web" --server="$CL_review_web_KUBE_URL" --certificate-authority <(echo $CL_review_web_KUBE_CA_PEM | base64 -d) --embed-certs=true",
776
- "kubectl config set-credentials "kube-pan-my-app-review-mr1234-web" --token="$CL_review_web_KUBE_TOKEN"",
777
- "kubectl config set-context "kube-pan-my-app-review-mr1234-web" --cluster="kube-pan-my-app-review-mr1234-web" --user="kube-pan-my-app-review-mr1234-web" --namespace="pan-my-app-review"",
778
- "kubectl config use-context "kube-pan-my-app-review-mr1234-web"",
746
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
747
+ "export ENV_SHORT="review"",
748
+ "export APP_DIR="app"",
749
+ "export ENV_TYPE="review"",
750
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
751
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
752
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
753
+ "export HOST="web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"",
754
+ "export ROOT_URL="https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"",
755
+ "export HOST_INTERNAL="web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"",
756
+ "export HOST_CANONICAL="web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"",
757
+ "export ROOT_URL_INTERNAL="https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"",
758
+ "export KUBE_NAMESPACE="pan-my-app-review"",
759
+ "export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web"",
760
+ "export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"",
761
+ "export MONGODB_ROOT_PASSWORD="$CL_review_web_MONGODB_ROOT_PASSWORD"",
762
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"",
763
+ "export RELEASE_NAME="pan-my-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"; })-web"",
764
+ "export HELM_EXPERIMENTAL_OCI="1"",
765
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"",
766
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
767
+ "export HELM_ARGS=""",
768
+ "export COMPONENT_NAME="web"",
769
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
770
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
771
+ "kubectl config set-cluster "kube-pan-my-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"; })-web" --server="$CL_review_web_KUBE_URL" --certificate-authority <(echo $CL_review_web_KUBE_CA_PEM | base64 -d) --embed-certs=true",
772
+ "kubectl config set-credentials "kube-pan-my-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"; })-web" --token="$CL_review_web_KUBE_TOKEN"",
773
+ "kubectl config set-context "kube-pan-my-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"; })-web" --cluster="kube-pan-my-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"; })-web" --user="kube-pan-my-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"; })-web" --namespace="pan-my-app-review"",
774
+ "kubectl config use-context "kube-pan-my-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"; })-web"",
779
775
  "kubernetesRollback",
776
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud" >> gitlab_environment.env",
780
777
  ],
781
778
  "stage": "rollback review",
782
779
  "variables": {
783
- "APP_DIR": "app",
784
- "BUILD_ID": "some-id",
785
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
786
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
787
- "BUILD_INFO_ID": "some-id",
788
- "COMPONENT_NAME": "web",
789
- "ENV_SHORT": "review",
790
- "ENV_TYPE": "review",
791
780
  "GIT_STRATEGY": "none",
792
- "HELM_ARGS": "",
793
- "HELM_EXPERIMENTAL_OCI": "1",
794
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
795
- "HOST": "web.mr1234.review.my-app.pan.panter.cloud",
796
- "HOST_CANONICAL": "web.mr1234.review.my-app.pan.panter.cloud",
797
- "HOST_INTERNAL": "web.mr1234.review.my-app.pan.panter.cloud",
798
781
  "KUBERNETES_CPU_REQUEST": "0.5",
799
782
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
800
783
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
801
- "KUBE_APP_NAME": "mr1234-web",
802
- "KUBE_APP_NAME_PREFIX": "mr1234-",
803
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-web",
804
- "KUBE_NAMESPACE": "pan-my-app-review",
805
- "KUBE_VALUES": "env:
806
- secret:
807
- MONGODB_ROOT_PASSWORD: '$CL_review_web_MONGODB_ROOT_PASSWORD'
808
- MONGO_URL: 'mongodb://root:$CL_review_web_MONGODB_ROOT_PASSWORD@mr1234-web-mongodb.pan-my-app-review.svc.cluster.local:27017/app?authSource=admin'
809
- public:
810
- ENV_SHORT: 'review'
811
- APP_DIR: 'app'
812
- ENV_TYPE: 'review'
813
- BUILD_INFO_ID: 'some-id'
814
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
815
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
816
- HOST: 'web.mr1234.review.my-app.pan.panter.cloud'
817
- ROOT_URL: 'https://web.mr1234.review.my-app.pan.panter.cloud'
818
- HOST_CANONICAL: 'web.mr1234.review.my-app.pan.panter.cloud'
819
- ROOT_URL_INTERNAL: 'https://web.mr1234.review.my-app.pan.panter.cloud'
820
- KUBE_NAMESPACE: 'pan-my-app-review'
821
- KUBE_APP_NAME: 'mr1234-web'
822
- KUBE_APP_NAME_PREFIX: 'mr1234-'
823
- HOST_INTERNAL: 'web.mr1234.review.my-app.pan.panter.cloud'
824
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]'
825
- application:
826
- host: 'web.mr1234.review.my-app.pan.panter.cloud'
827
- command: 'node main.js'
828
- livenessProbe:
829
- httpGet:
830
- path: '__health'
831
- readinessProbe:
832
- httpGet:
833
- path: '__health'
834
- startupProbe:
835
- httpGet:
836
- path: '__health'
837
- worker:
838
- enabled: true
839
- mongodb:
840
- enabled: true
841
- auth:
842
- enabled: true
843
- rootPassword: '$CL_review_web_MONGODB_ROOT_PASSWORD'
844
- replicaSetKey: '$CL_review_web_MONGODB_REPLICASET_KEY'
845
- persistence:
846
- storageClass: 'standard-rwo'
847
- backup:
848
- enabled: false
849
- hostToBackup: 'mr1234-web-mongodb.pan-my-app-review.svc.cluster.local:27017'
850
- pvcToBackup: 'mr1234-web-mongodb'
851
- image: 'mrelite/kubectlmongoshell:v1.0'
852
- schedule: '0 4 * * *'
853
- volumeSnapshotClass: 'snapshotclass'
854
- architecture: 'standalone'
855
- ",
856
- "MONGODB_ROOT_PASSWORD": "$CL_review_web_MONGODB_ROOT_PASSWORD",
857
- "RELEASE_NAME": "pan-my-app-review-mr1234-web",
858
- "ROOT_URL": "https://web.mr1234.review.my-app.pan.panter.cloud",
859
- "ROOT_URL_INTERNAL": "https://web.mr1234.review.my-app.pan.panter.cloud",
860
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]",
861
784
  },
862
785
  },
863
786
  "web ๐Ÿ‘ฎ lint": {
@@ -888,6 +811,9 @@ mongodb:
888
811
  ],
889
812
  },
890
813
  "script": [
814
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
815
+ "export APP_PATH="app"",
816
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
891
817
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
892
818
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
893
819
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -904,7 +830,6 @@ mongodb:
904
830
  ],
905
831
  "stage": "test",
906
832
  "variables": {
907
- "APP_PATH": "app",
908
833
  "KUBERNETES_CPU_REQUEST": "0.5",
909
834
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
910
835
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -957,7 +882,26 @@ mongodb:
957
882
  ],
958
883
  },
959
884
  "script": [
960
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > app/__build_info.json",
885
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
886
+ "export METEOR_DISABLE_OPTIMISTIC_CACHING="1"",
887
+ "export ENV_SHORT="review"",
888
+ "export APP_DIR="app"",
889
+ "export ENV_TYPE="review"",
890
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
891
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
892
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
893
+ "export HOST="web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"",
894
+ "export ROOT_URL="https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"",
895
+ "export HOST_INTERNAL="web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"",
896
+ "export HOST_CANONICAL="web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"",
897
+ "export ROOT_URL_INTERNAL="https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"",
898
+ "export KUBE_NAMESPACE="pan-my-app-review"",
899
+ "export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web"",
900
+ "export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"",
901
+ "export MONGODB_ROOT_PASSWORD="$CL_review_web_MONGODB_ROOT_PASSWORD"",
902
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"",
903
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
904
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app/__build_info.json",
961
905
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
962
906
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
963
907
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -978,26 +922,9 @@ mongodb:
978
922
  ],
979
923
  "stage": "build",
980
924
  "variables": {
981
- "APP_DIR": "app",
982
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
983
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
984
- "BUILD_INFO_ID": "some-id",
985
- "ENV_SHORT": "review",
986
- "ENV_TYPE": "review",
987
- "HOST": "web.mr1234.review.my-app.pan.panter.cloud",
988
- "HOST_CANONICAL": "web.mr1234.review.my-app.pan.panter.cloud",
989
- "HOST_INTERNAL": "web.mr1234.review.my-app.pan.panter.cloud",
990
925
  "KUBERNETES_CPU_REQUEST": "0.5",
991
926
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
992
927
  "KUBERNETES_MEMORY_REQUEST": "1Gi",
993
- "KUBE_APP_NAME": "mr1234-web",
994
- "KUBE_APP_NAME_PREFIX": "mr1234-",
995
- "KUBE_NAMESPACE": "pan-my-app-review",
996
- "METEOR_DISABLE_OPTIMISTIC_CACHING": "1",
997
- "MONGODB_ROOT_PASSWORD": "$CL_review_web_MONGODB_ROOT_PASSWORD",
998
- "ROOT_URL": "https://web.mr1234.review.my-app.pan.panter.cloud",
999
- "ROOT_URL_INTERNAL": "https://web.mr1234.review.my-app.pan.panter.cloud",
1000
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]",
1001
928
  },
1002
929
  },
1003
930
  "web ๐Ÿ”จ docker | review ": {
@@ -1014,6 +941,16 @@ mongodb:
1014
941
  ],
1015
942
  },
1016
943
  "script": [
944
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
945
+ "export APP_DIR="app"",
946
+ "export DOCKER_DIR="."",
947
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
948
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/web"",
949
+ "export DOCKER_IMAGE_NAME="review/web"",
950
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
951
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
952
+ "export METEOR_INSTALL_SCRIPTS=""",
953
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1017
954
  "ensureMeteorDockerfile",
1018
955
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
1019
956
  "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
@@ -1037,32 +974,27 @@ mongodb:
1037
974
  ],
1038
975
  "stage": "build",
1039
976
  "variables": {
1040
- "APP_DIR": "app",
1041
- "DOCKERFILE_ADDITIONS": undefined,
1042
- "DOCKERFILE_ADDITIONS_END": undefined,
1043
977
  "DOCKER_BUILDKIT": "1",
1044
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/web",
1045
- "DOCKER_DIR": ".",
1046
978
  "DOCKER_DRIVER": "overlay2",
1047
979
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
1048
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
1049
- "DOCKER_IMAGE_NAME": "review/web",
1050
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1051
- "DOCKER_REGISTRY": "$CI_REGISTRY",
1052
980
  "DOCKER_TLS_CERTDIR": "",
1053
981
  "KUBERNETES_CPU_REQUEST": "0.5",
1054
982
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
1055
983
  "KUBERNETES_MEMORY_REQUEST": "1Gi",
1056
- "METEOR_INSTALL_SCRIPTS": "",
1057
984
  },
1058
985
  },
1059
986
  "web ๐Ÿš€ Deploy | review ": {
1060
987
  "allow_failure": false,
988
+ "artifacts": {
989
+ "reports": {
990
+ "dotenv": "gitlab_environment.env",
991
+ },
992
+ },
1061
993
  "environment": {
1062
994
  "auto_stop_in": "1 week",
1063
- "name": "review/some-commit/web",
995
+ "name": "review/$CI_COMMIT_REF_NAME/web",
1064
996
  "on_stop": "web ๐Ÿ›‘ Stop โš ๏ธ | review ",
1065
- "url": "https://web.mr1234.review.my-app.pan.panter.cloud",
997
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
1066
998
  },
1067
999
  "image": "path/to/docker/kubernetes:the-version",
1068
1000
  "interruptible": true,
@@ -1105,107 +1037,152 @@ mongodb:
1105
1037
  },
1106
1038
  ],
1107
1039
  "script": [
1108
- "kubectl config set-cluster "kube-pan-my-app-review-mr1234-web" --server="$CL_review_web_KUBE_URL" --certificate-authority <(echo $CL_review_web_KUBE_CA_PEM | base64 -d) --embed-certs=true",
1109
- "kubectl config set-credentials "kube-pan-my-app-review-mr1234-web" --token="$CL_review_web_KUBE_TOKEN"",
1110
- "kubectl config set-context "kube-pan-my-app-review-mr1234-web" --cluster="kube-pan-my-app-review-mr1234-web" --user="kube-pan-my-app-review-mr1234-web" --namespace="pan-my-app-review"",
1111
- "kubectl config use-context "kube-pan-my-app-review-mr1234-web"",
1112
- "kubernetesCreateSecret",
1113
- "kubernetesDeploy",
1114
- "echo Uploading SBOM to Dependency Track",
1115
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-my-app/web" "https://web.mr1234.review.my-app.pan.panter.cloud" "__sbom.json" vex.json || true",
1116
- "echo deployment successful ๐Ÿ˜ป",
1117
- ],
1118
- "stage": "deploy review",
1119
- "variables": {
1120
- "APP_DIR": "app",
1121
- "BUILD_ID": "some-id",
1122
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1123
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1124
- "BUILD_INFO_ID": "some-id",
1125
- "COMPONENT_NAME": "web",
1126
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/web",
1127
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
1128
- "DOCKER_IMAGE_NAME": "review/web",
1129
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1130
- "DOCKER_REGISTRY": "$CI_REGISTRY",
1131
- "ENV_SHORT": "review",
1132
- "ENV_TYPE": "review",
1133
- "HELM_ARGS": "",
1134
- "HELM_EXPERIMENTAL_OCI": "1",
1135
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
1136
- "HOST": "web.mr1234.review.my-app.pan.panter.cloud",
1137
- "HOST_CANONICAL": "web.mr1234.review.my-app.pan.panter.cloud",
1138
- "HOST_INTERNAL": "web.mr1234.review.my-app.pan.panter.cloud",
1139
- "KUBERNETES_CPU_REQUEST": "0.5",
1140
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
1141
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
1142
- "KUBE_APP_NAME": "mr1234-web",
1143
- "KUBE_APP_NAME_PREFIX": "mr1234-",
1144
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-web",
1145
- "KUBE_NAMESPACE": "pan-my-app-review",
1146
- "KUBE_VALUES": "env:
1040
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1041
+ "export ENV_SHORT="review"",
1042
+ "export APP_DIR="app"",
1043
+ "export ENV_TYPE="review"",
1044
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1045
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1046
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
1047
+ "export HOST="web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"",
1048
+ "export ROOT_URL="https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"",
1049
+ "export HOST_INTERNAL="web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"",
1050
+ "export HOST_CANONICAL="web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"",
1051
+ "export ROOT_URL_INTERNAL="https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"",
1052
+ "export KUBE_NAMESPACE="pan-my-app-review"",
1053
+ "export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web"",
1054
+ "export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"",
1055
+ "export MONGODB_ROOT_PASSWORD="$CL_review_web_MONGODB_ROOT_PASSWORD"",
1056
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"",
1057
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
1058
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/web"",
1059
+ "export DOCKER_IMAGE_NAME="review/web"",
1060
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
1061
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1062
+ "export RELEASE_NAME="pan-my-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"; })-web"",
1063
+ "export HELM_EXPERIMENTAL_OCI="1"",
1064
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"",
1065
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
1066
+ "export HELM_ARGS=""",
1067
+ "export COMPONENT_NAME="web"",
1068
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1069
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1070
+ "kubectl config set-cluster "kube-pan-my-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"; })-web" --server="$CL_review_web_KUBE_URL" --certificate-authority <(echo $CL_review_web_KUBE_CA_PEM | base64 -d) --embed-certs=true",
1071
+ "kubectl config set-credentials "kube-pan-my-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"; })-web" --token="$CL_review_web_KUBE_TOKEN"",
1072
+ "kubectl config set-context "kube-pan-my-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"; })-web" --cluster="kube-pan-my-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"; })-web" --user="kube-pan-my-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"; })-web" --namespace="pan-my-app-review"",
1073
+ "kubectl config use-context "kube-pan-my-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"; })-web"",
1074
+ "echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
1075
+ "cat > __all_values.yml <<EOF
1076
+ env:
1147
1077
  secret:
1148
- MONGODB_ROOT_PASSWORD: '$CL_review_web_MONGODB_ROOT_PASSWORD'
1149
- MONGO_URL: 'mongodb://root:$CL_review_web_MONGODB_ROOT_PASSWORD@mr1234-web-mongodb.pan-my-app-review.svc.cluster.local:27017/app?authSource=admin'
1078
+ MONGODB_ROOT_PASSWORD: |-
1079
+ $(printf %s "$CL_review_web_MONGODB_ROOT_PASSWORD" | sed 's/^/ /')
1080
+ MONGO_URL: |-
1081
+ mongodb://root:$CL_review_web_MONGODB_ROOT_PASSWORD@$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web-mongodb.pan-my-app-review.svc.cluster.local:27017/app?authSource=admin
1150
1082
  public:
1151
- ENV_SHORT: 'review'
1152
- APP_DIR: 'app'
1153
- ENV_TYPE: 'review'
1154
- BUILD_INFO_ID: 'some-id'
1155
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1156
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
1157
- HOST: 'web.mr1234.review.my-app.pan.panter.cloud'
1158
- ROOT_URL: 'https://web.mr1234.review.my-app.pan.panter.cloud'
1159
- HOST_CANONICAL: 'web.mr1234.review.my-app.pan.panter.cloud'
1160
- ROOT_URL_INTERNAL: 'https://web.mr1234.review.my-app.pan.panter.cloud'
1161
- KUBE_NAMESPACE: 'pan-my-app-review'
1162
- KUBE_APP_NAME: 'mr1234-web'
1163
- KUBE_APP_NAME_PREFIX: 'mr1234-'
1164
- HOST_INTERNAL: 'web.mr1234.review.my-app.pan.panter.cloud'
1165
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]'
1083
+ ENV_SHORT: |-
1084
+ review
1085
+ APP_DIR: |-
1086
+ app
1087
+ ENV_TYPE: |-
1088
+ review
1089
+ BUILD_INFO_BUILD_ID: |-
1090
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
1091
+ BUILD_INFO_BUILD_TIME: |-
1092
+ $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
1093
+ BUILD_INFO_CURRENT_VERSION: |-
1094
+ $(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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")" | sed 's/^/ /')
1095
+ HOST: |-
1096
+ $(printf %s "web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud" | sed 's/^/ /')
1097
+ ROOT_URL: |-
1098
+ $(printf %s "https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud" | sed 's/^/ /')
1099
+ HOST_INTERNAL: |-
1100
+ $(printf %s "web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud" | sed 's/^/ /')
1101
+ HOST_CANONICAL: |-
1102
+ $(printf %s "web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud" | sed 's/^/ /')
1103
+ ROOT_URL_INTERNAL: |-
1104
+ $(printf %s "https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud" | sed 's/^/ /')
1105
+ KUBE_NAMESPACE: |-
1106
+ pan-my-app-review
1107
+ KUBE_APP_NAME: |-
1108
+ $(printf %s "$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web" | sed 's/^/ /')
1109
+ KUBE_APP_NAME_PREFIX: |-
1110
+ $(printf %s "$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-" | sed 's/^/ /')
1111
+ _ALL_ENV_VAR_KEYS: |-
1112
+ ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","MONGODB_ROOT_PASSWORD"]
1166
1113
  application:
1167
- host: 'web.mr1234.review.my-app.pan.panter.cloud'
1168
- command: 'node main.js'
1114
+ host: |-
1115
+ $(printf %s "web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud" | sed 's/^/ /')
1116
+ command: |-
1117
+ node main.js
1169
1118
  livenessProbe:
1170
1119
  httpGet:
1171
- path: '__health'
1120
+ path: |-
1121
+ __health
1172
1122
  readinessProbe:
1173
1123
  httpGet:
1174
- path: '__health'
1124
+ path: |-
1125
+ __health
1175
1126
  startupProbe:
1176
1127
  httpGet:
1177
- path: '__health'
1128
+ path: |-
1129
+ __health
1178
1130
  worker:
1179
1131
  enabled: true
1180
1132
  mongodb:
1181
1133
  enabled: true
1182
1134
  auth:
1183
1135
  enabled: true
1184
- rootPassword: '$CL_review_web_MONGODB_ROOT_PASSWORD'
1185
- replicaSetKey: '$CL_review_web_MONGODB_REPLICASET_KEY'
1136
+ rootPassword: |-
1137
+ $CL_review_web_MONGODB_ROOT_PASSWORD
1138
+ replicaSetKey: |-
1139
+ $CL_review_web_MONGODB_REPLICASET_KEY
1186
1140
  persistence:
1187
- storageClass: 'standard-rwo'
1141
+ storageClass: |-
1142
+ standard-rwo
1188
1143
  backup:
1189
1144
  enabled: false
1190
- hostToBackup: 'mr1234-web-mongodb.pan-my-app-review.svc.cluster.local:27017'
1191
- pvcToBackup: 'mr1234-web-mongodb'
1192
- image: 'mrelite/kubectlmongoshell:v1.0'
1193
- schedule: '0 4 * * *'
1194
- volumeSnapshotClass: 'snapshotclass'
1195
- architecture: 'standalone'
1145
+ hostToBackup: |-
1146
+ $([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web-mongodb.pan-my-app-review.svc.cluster.local:27017
1147
+ pvcToBackup: |-
1148
+ $([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web-mongodb
1149
+ image: |-
1150
+ mrelite/kubectlmongoshell:v1.0
1151
+ schedule: |-
1152
+ 0 4 * * *
1153
+ volumeSnapshotClass: |-
1154
+ snapshotclass
1155
+ architecture: |-
1156
+ standalone
1157
+
1158
+ EOF
1196
1159
  ",
1197
- "MONGODB_ROOT_PASSWORD": "$CL_review_web_MONGODB_ROOT_PASSWORD",
1198
- "RELEASE_NAME": "pan-my-app-review-mr1234-web",
1199
- "ROOT_URL": "https://web.mr1234.review.my-app.pan.panter.cloud",
1200
- "ROOT_URL_INTERNAL": "https://web.mr1234.review.my-app.pan.panter.cloud",
1201
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]",
1160
+ "echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
1161
+ "kubernetesCreateSecret",
1162
+ "kubernetesDeploy",
1163
+ "echo Uploading SBOM to Dependency Track",
1164
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-my-app/web" "https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud" "__sbom.json" vex.json || true",
1165
+ "echo deployment successful ๐Ÿ˜ป",
1166
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud" >> gitlab_environment.env",
1167
+ ],
1168
+ "stage": "deploy review",
1169
+ "variables": {
1170
+ "KUBERNETES_CPU_REQUEST": "0.5",
1171
+ "KUBERNETES_MEMORY_LIMIT": "400Mi",
1172
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
1202
1173
  },
1203
1174
  },
1204
1175
  "web ๐Ÿ›‘ Stop โš ๏ธ | review ": {
1176
+ "allow_failure": true,
1177
+ "artifacts": {
1178
+ "reports": {
1179
+ "dotenv": "gitlab_environment.env",
1180
+ },
1181
+ },
1205
1182
  "environment": {
1206
1183
  "action": "stop",
1207
- "name": "review/some-commit/web",
1208
- "url": "https://web.mr1234.review.my-app.pan.panter.cloud",
1184
+ "name": "review/$CI_COMMIT_REF_NAME/web",
1185
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
1209
1186
  },
1210
1187
  "image": "path/to/docker/kubernetes:the-version",
1211
1188
  "interruptible": true,
@@ -1219,104 +1196,54 @@ mongodb:
1219
1196
  },
1220
1197
  "rules": [
1221
1198
  {
1222
- "allow_failure": true,
1223
1199
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1224
1200
  "when": "on_success",
1225
1201
  },
1226
1202
  {
1227
- "allow_failure": true,
1228
1203
  "when": "manual",
1229
1204
  },
1230
1205
  ],
1231
1206
  "script": [
1232
- "kubectl config set-cluster "kube-pan-my-app-review-mr1234-web" --server="$CL_review_web_KUBE_URL" --certificate-authority <(echo $CL_review_web_KUBE_CA_PEM | base64 -d) --embed-certs=true",
1233
- "kubectl config set-credentials "kube-pan-my-app-review-mr1234-web" --token="$CL_review_web_KUBE_TOKEN"",
1234
- "kubectl config set-context "kube-pan-my-app-review-mr1234-web" --cluster="kube-pan-my-app-review-mr1234-web" --user="kube-pan-my-app-review-mr1234-web" --namespace="pan-my-app-review"",
1235
- "kubectl config use-context "kube-pan-my-app-review-mr1234-web"",
1207
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1208
+ "export ENV_SHORT="review"",
1209
+ "export APP_DIR="app"",
1210
+ "export ENV_TYPE="review"",
1211
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1212
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1213
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
1214
+ "export HOST="web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"",
1215
+ "export ROOT_URL="https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"",
1216
+ "export HOST_INTERNAL="web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"",
1217
+ "export HOST_CANONICAL="web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"",
1218
+ "export ROOT_URL_INTERNAL="https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"",
1219
+ "export KUBE_NAMESPACE="pan-my-app-review"",
1220
+ "export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web"",
1221
+ "export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"",
1222
+ "export MONGODB_ROOT_PASSWORD="$CL_review_web_MONGODB_ROOT_PASSWORD"",
1223
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"",
1224
+ "export RELEASE_NAME="pan-my-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"; })-web"",
1225
+ "export HELM_EXPERIMENTAL_OCI="1"",
1226
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"",
1227
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
1228
+ "export HELM_ARGS=""",
1229
+ "export COMPONENT_NAME="web"",
1230
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1231
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1232
+ "kubectl config set-cluster "kube-pan-my-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"; })-web" --server="$CL_review_web_KUBE_URL" --certificate-authority <(echo $CL_review_web_KUBE_CA_PEM | base64 -d) --embed-certs=true",
1233
+ "kubectl config set-credentials "kube-pan-my-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"; })-web" --token="$CL_review_web_KUBE_TOKEN"",
1234
+ "kubectl config set-context "kube-pan-my-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"; })-web" --cluster="kube-pan-my-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"; })-web" --user="kube-pan-my-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"; })-web" --namespace="pan-my-app-review"",
1235
+ "kubectl config use-context "kube-pan-my-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"; })-web"",
1236
1236
  "kubernetesDelete",
1237
1237
  "echo Disabling component in Dependency Track",
1238
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-my-app/web" "https://web.mr1234.review.my-app.pan.panter.cloud" || true",
1238
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-my-app/web" "https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud" || true",
1239
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud" >> gitlab_environment.env",
1239
1240
  ],
1240
1241
  "stage": "stop review",
1241
1242
  "variables": {
1242
- "APP_DIR": "app",
1243
- "BUILD_ID": "some-id",
1244
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1245
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1246
- "BUILD_INFO_ID": "some-id",
1247
- "COMPONENT_NAME": "web",
1248
- "ENV_SHORT": "review",
1249
- "ENV_TYPE": "review",
1250
1243
  "GIT_STRATEGY": "none",
1251
- "HELM_ARGS": "",
1252
- "HELM_EXPERIMENTAL_OCI": "1",
1253
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
1254
- "HOST": "web.mr1234.review.my-app.pan.panter.cloud",
1255
- "HOST_CANONICAL": "web.mr1234.review.my-app.pan.panter.cloud",
1256
- "HOST_INTERNAL": "web.mr1234.review.my-app.pan.panter.cloud",
1257
1244
  "KUBERNETES_CPU_REQUEST": "0.5",
1258
1245
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
1259
1246
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
1260
- "KUBE_APP_NAME": "mr1234-web",
1261
- "KUBE_APP_NAME_PREFIX": "mr1234-",
1262
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-web",
1263
- "KUBE_NAMESPACE": "pan-my-app-review",
1264
- "KUBE_VALUES": "env:
1265
- secret:
1266
- MONGODB_ROOT_PASSWORD: '$CL_review_web_MONGODB_ROOT_PASSWORD'
1267
- MONGO_URL: 'mongodb://root:$CL_review_web_MONGODB_ROOT_PASSWORD@mr1234-web-mongodb.pan-my-app-review.svc.cluster.local:27017/app?authSource=admin'
1268
- public:
1269
- ENV_SHORT: 'review'
1270
- APP_DIR: 'app'
1271
- ENV_TYPE: 'review'
1272
- BUILD_INFO_ID: 'some-id'
1273
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1274
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
1275
- HOST: 'web.mr1234.review.my-app.pan.panter.cloud'
1276
- ROOT_URL: 'https://web.mr1234.review.my-app.pan.panter.cloud'
1277
- HOST_CANONICAL: 'web.mr1234.review.my-app.pan.panter.cloud'
1278
- ROOT_URL_INTERNAL: 'https://web.mr1234.review.my-app.pan.panter.cloud'
1279
- KUBE_NAMESPACE: 'pan-my-app-review'
1280
- KUBE_APP_NAME: 'mr1234-web'
1281
- KUBE_APP_NAME_PREFIX: 'mr1234-'
1282
- HOST_INTERNAL: 'web.mr1234.review.my-app.pan.panter.cloud'
1283
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]'
1284
- application:
1285
- host: 'web.mr1234.review.my-app.pan.panter.cloud'
1286
- command: 'node main.js'
1287
- livenessProbe:
1288
- httpGet:
1289
- path: '__health'
1290
- readinessProbe:
1291
- httpGet:
1292
- path: '__health'
1293
- startupProbe:
1294
- httpGet:
1295
- path: '__health'
1296
- worker:
1297
- enabled: true
1298
- mongodb:
1299
- enabled: true
1300
- auth:
1301
- enabled: true
1302
- rootPassword: '$CL_review_web_MONGODB_ROOT_PASSWORD'
1303
- replicaSetKey: '$CL_review_web_MONGODB_REPLICASET_KEY'
1304
- persistence:
1305
- storageClass: 'standard-rwo'
1306
- backup:
1307
- enabled: false
1308
- hostToBackup: 'mr1234-web-mongodb.pan-my-app-review.svc.cluster.local:27017'
1309
- pvcToBackup: 'mr1234-web-mongodb'
1310
- image: 'mrelite/kubectlmongoshell:v1.0'
1311
- schedule: '0 4 * * *'
1312
- volumeSnapshotClass: 'snapshotclass'
1313
- architecture: 'standalone'
1314
- ",
1315
- "MONGODB_ROOT_PASSWORD": "$CL_review_web_MONGODB_ROOT_PASSWORD",
1316
- "RELEASE_NAME": "pan-my-app-review-mr1234-web",
1317
- "ROOT_URL": "https://web.mr1234.review.my-app.pan.panter.cloud",
1318
- "ROOT_URL_INTERNAL": "https://web.mr1234.review.my-app.pan.panter.cloud",
1319
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]",
1320
1247
  },
1321
1248
  },
1322
1249
  "web ๐Ÿ›ก audit": {
@@ -1332,12 +1259,14 @@ mongodb:
1332
1259
  ],
1333
1260
  },
1334
1261
  "script": [
1262
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1263
+ "export APP_PATH="app"",
1264
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1335
1265
  "cd app",
1336
1266
  "yarn npm audit --environment production",
1337
1267
  ],
1338
1268
  "stage": "test",
1339
1269
  "variables": {
1340
- "APP_PATH": "app",
1341
1270
  "KUBERNETES_CPU_REQUEST": "0.5",
1342
1271
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
1343
1272
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -1371,6 +1300,9 @@ mongodb:
1371
1300
  ],
1372
1301
  },
1373
1302
  "script": [
1303
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1304
+ "export APP_PATH="app"",
1305
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1374
1306
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1375
1307
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1376
1308
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -1387,7 +1319,6 @@ mongodb:
1387
1319
  ],
1388
1320
  "stage": "test",
1389
1321
  "variables": {
1390
- "APP_PATH": "app",
1391
1322
  "KUBERNETES_CPU_REQUEST": "0.5",
1392
1323
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
1393
1324
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
@@ -1411,6 +1342,8 @@ mongodb:
1411
1342
  ],
1412
1343
  },
1413
1344
  "script": [
1345
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1346
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1414
1347
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" app",
1415
1348
  ],
1416
1349
  "stage": "build",
@@ -1463,7 +1396,7 @@ mongodb:
1463
1396
  ],
1464
1397
  "variables": {
1465
1398
  "FF_USE_FASTZIP": "true",
1466
- "GIT_DEPTH": 1,
1399
+ "GIT_DEPTH": "1",
1467
1400
  },
1468
1401
  "workflow": {
1469
1402
  "rules": [
@@ -1494,10 +1427,16 @@ mongodb:
1494
1427
  "image": "path/to/docker/jobs-default:the-version",
1495
1428
  "jobs": {
1496
1429
  "web โ†ฉ๏ธ Rollback โš ๏ธ | prod ": {
1430
+ "allow_failure": true,
1431
+ "artifacts": {
1432
+ "reports": {
1433
+ "dotenv": "gitlab_environment.env",
1434
+ },
1435
+ },
1497
1436
  "environment": {
1498
1437
  "action": "access",
1499
1438
  "name": "prod/web",
1500
- "url": "https://www.example.com",
1439
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
1501
1440
  },
1502
1441
  "image": "path/to/docker/kubernetes:the-version",
1503
1442
  "interruptible": true,
@@ -1511,116 +1450,62 @@ mongodb:
1511
1450
  },
1512
1451
  "rules": [
1513
1452
  {
1514
- "allow_failure": true,
1515
1453
  "when": "manual",
1516
1454
  },
1517
1455
  ],
1518
1456
  "script": [
1457
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1458
+ "export ENV_SHORT="prod"",
1459
+ "export APP_DIR="app"",
1460
+ "export ENV_TYPE="prod"",
1461
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1462
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1463
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
1464
+ "export HOST="www.example.com"",
1465
+ "export ROOT_URL="https://www.example.com"",
1466
+ "export HOST_INTERNAL="web.prod.my-app.pan.panter.cloud"",
1467
+ "export HOST_CANONICAL="web.prod.my-app.pan.panter.cloud"",
1468
+ "export ROOT_URL_INTERNAL="https://web.prod.my-app.pan.panter.cloud"",
1469
+ "export KUBE_NAMESPACE="pan-my-app-prod"",
1470
+ "export KUBE_APP_NAME="web"",
1471
+ "export KUBE_APP_NAME_PREFIX=""",
1472
+ "export MONGODB_ROOT_PASSWORD="$CL_prod_web_MONGODB_ROOT_PASSWORD"",
1473
+ "export MONGODB_REPLICASET_KEY="$CL_prod_web_MONGODB_REPLICASET_KEY"",
1474
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
1475
+ "export RELEASE_NAME="pan-my-app-prod-web"",
1476
+ "export HELM_EXPERIMENTAL_OCI="1"",
1477
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"",
1478
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
1479
+ "export HELM_ARGS=""",
1480
+ "export COMPONENT_NAME="web"",
1481
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1482
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1519
1483
  "kubectl config set-cluster "kube-pan-my-app-prod-web" --server="$CL_prod_web_KUBE_URL" --certificate-authority <(echo $CL_prod_web_KUBE_CA_PEM | base64 -d) --embed-certs=true",
1520
1484
  "kubectl config set-credentials "kube-pan-my-app-prod-web" --token="$CL_prod_web_KUBE_TOKEN"",
1521
1485
  "kubectl config set-context "kube-pan-my-app-prod-web" --cluster="kube-pan-my-app-prod-web" --user="kube-pan-my-app-prod-web" --namespace="pan-my-app-prod"",
1522
1486
  "kubectl config use-context "kube-pan-my-app-prod-web"",
1523
1487
  "kubernetesRollback",
1488
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://www.example.com" >> gitlab_environment.env",
1524
1489
  ],
1525
1490
  "stage": "rollback prod",
1526
1491
  "variables": {
1527
- "APP_DIR": "app",
1528
- "BUILD_ID": "some-id",
1529
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1530
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1531
- "BUILD_INFO_ID": "some-id",
1532
- "COMPONENT_NAME": "web",
1533
- "ENV_SHORT": "prod",
1534
- "ENV_TYPE": "prod",
1535
1492
  "GIT_STRATEGY": "none",
1536
- "HELM_ARGS": "",
1537
- "HELM_EXPERIMENTAL_OCI": "1",
1538
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
1539
- "HOST": "www.example.com",
1540
- "HOST_CANONICAL": "web.prod.my-app.pan.panter.cloud",
1541
- "HOST_INTERNAL": "web.prod.my-app.pan.panter.cloud",
1542
1493
  "KUBERNETES_CPU_REQUEST": "0.5",
1543
1494
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
1544
1495
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
1545
- "KUBE_APP_NAME": "web",
1546
- "KUBE_APP_NAME_PREFIX": "",
1547
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-web",
1548
- "KUBE_NAMESPACE": "pan-my-app-prod",
1549
- "KUBE_VALUES": "env:
1550
- secret:
1551
- MONGODB_ROOT_PASSWORD: '$CL_prod_web_MONGODB_ROOT_PASSWORD'
1552
- MONGODB_REPLICASET_KEY: '$CL_prod_web_MONGODB_REPLICASET_KEY'
1553
- MONGO_URL: 'mongodb://root:$CL_prod_web_MONGODB_ROOT_PASSWORD@web-mongodb-0.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017,web-mongodb-1.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin'
1554
- MONGO_OPLOG_URL: 'mongodb://root:$CL_prod_web_MONGODB_ROOT_PASSWORD@web-mongodb-0.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017,web-mongodb-1.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin'
1555
- public:
1556
- ENV_SHORT: 'prod'
1557
- APP_DIR: 'app'
1558
- ENV_TYPE: 'prod'
1559
- BUILD_INFO_ID: 'some-id'
1560
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1561
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
1562
- HOST: 'www.example.com'
1563
- ROOT_URL: 'https://www.example.com'
1564
- HOST_CANONICAL: 'web.prod.my-app.pan.panter.cloud'
1565
- ROOT_URL_INTERNAL: 'https://web.prod.my-app.pan.panter.cloud'
1566
- KUBE_NAMESPACE: 'pan-my-app-prod'
1567
- KUBE_APP_NAME: 'web'
1568
- KUBE_APP_NAME_PREFIX: ''
1569
- HOST_INTERNAL: 'web.prod.my-app.pan.panter.cloud'
1570
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]'
1571
- application:
1572
- host: 'www.example.com'
1573
- command: 'node main.js'
1574
- livenessProbe:
1575
- httpGet:
1576
- path: '__health'
1577
- readinessProbe:
1578
- httpGet:
1579
- path: '__health'
1580
- startupProbe:
1581
- httpGet:
1582
- path: '__health'
1583
- worker:
1584
- enabled: true
1585
- redirects:
1586
- - host: 'example.com'
1587
- mongodb:
1588
- enabled: true
1589
- auth:
1590
- enabled: true
1591
- rootPassword: '$CL_prod_web_MONGODB_ROOT_PASSWORD'
1592
- replicaSetKey: '$CL_prod_web_MONGODB_REPLICASET_KEY'
1593
- persistence:
1594
- storageClass: 'premium-rwo'
1595
- size: '50Gi'
1596
- backup:
1597
- enabled: true
1598
- hostToBackup: 'web-mongodb-1.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017'
1599
- pvcToBackup: 'datadir-web-mongodb-1'
1600
- image: 'mrelite/kubectlmongoshell:v1.0'
1601
- schedule: '0 4 * * *'
1602
- volumeSnapshotClass: 'snapshotclass'
1603
- architecture: 'replicaset'
1604
- replicaCount: 2
1605
- resources:
1606
- limits:
1607
- memory: '8Gi'
1608
- requests:
1609
- memory: '8Gi'
1610
- ",
1611
- "MONGODB_REPLICASET_KEY": "$CL_prod_web_MONGODB_REPLICASET_KEY",
1612
- "MONGODB_ROOT_PASSWORD": "$CL_prod_web_MONGODB_ROOT_PASSWORD",
1613
- "RELEASE_NAME": "pan-my-app-prod-web",
1614
- "ROOT_URL": "https://www.example.com",
1615
- "ROOT_URL_INTERNAL": "https://web.prod.my-app.pan.panter.cloud",
1616
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]",
1617
1496
  },
1618
1497
  },
1619
1498
  "web โ†ฉ๏ธ Rollback โš ๏ธ | stage ": {
1499
+ "allow_failure": true,
1500
+ "artifacts": {
1501
+ "reports": {
1502
+ "dotenv": "gitlab_environment.env",
1503
+ },
1504
+ },
1620
1505
  "environment": {
1621
1506
  "action": "access",
1622
1507
  "name": "stage/web",
1623
- "url": "https://web.stage.my-app.pan.panter.cloud",
1508
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
1624
1509
  },
1625
1510
  "image": "path/to/docker/kubernetes:the-version",
1626
1511
  "interruptible": true,
@@ -1634,97 +1519,48 @@ mongodb:
1634
1519
  },
1635
1520
  "rules": [
1636
1521
  {
1637
- "allow_failure": true,
1638
1522
  "when": "manual",
1639
1523
  },
1640
1524
  ],
1641
1525
  "script": [
1526
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1527
+ "export ENV_SHORT="stage"",
1528
+ "export APP_DIR="app"",
1529
+ "export ENV_TYPE="stage"",
1530
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1531
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1532
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
1533
+ "export HOST="web.stage.my-app.pan.panter.cloud"",
1534
+ "export ROOT_URL="https://web.stage.my-app.pan.panter.cloud"",
1535
+ "export HOST_INTERNAL="web.stage.my-app.pan.panter.cloud"",
1536
+ "export HOST_CANONICAL="web.stage.my-app.pan.panter.cloud"",
1537
+ "export ROOT_URL_INTERNAL="https://web.stage.my-app.pan.panter.cloud"",
1538
+ "export KUBE_NAMESPACE="pan-my-app-stage"",
1539
+ "export KUBE_APP_NAME="web"",
1540
+ "export KUBE_APP_NAME_PREFIX=""",
1541
+ "export MONGODB_ROOT_PASSWORD="$CL_stage_web_MONGODB_ROOT_PASSWORD"",
1542
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"",
1543
+ "export RELEASE_NAME="pan-my-app-stage-web"",
1544
+ "export HELM_EXPERIMENTAL_OCI="1"",
1545
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"",
1546
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
1547
+ "export HELM_ARGS=""",
1548
+ "export COMPONENT_NAME="web"",
1549
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1550
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1642
1551
  "kubectl config set-cluster "kube-pan-my-app-stage-web" --server="$CL_stage_web_KUBE_URL" --certificate-authority <(echo $CL_stage_web_KUBE_CA_PEM | base64 -d) --embed-certs=true",
1643
1552
  "kubectl config set-credentials "kube-pan-my-app-stage-web" --token="$CL_stage_web_KUBE_TOKEN"",
1644
1553
  "kubectl config set-context "kube-pan-my-app-stage-web" --cluster="kube-pan-my-app-stage-web" --user="kube-pan-my-app-stage-web" --namespace="pan-my-app-stage"",
1645
1554
  "kubectl config use-context "kube-pan-my-app-stage-web"",
1646
1555
  "kubernetesRollback",
1556
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://web.stage.my-app.pan.panter.cloud" >> gitlab_environment.env",
1647
1557
  ],
1648
1558
  "stage": "rollback stage",
1649
1559
  "variables": {
1650
- "APP_DIR": "app",
1651
- "BUILD_ID": "some-id",
1652
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1653
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1654
- "BUILD_INFO_ID": "some-id",
1655
- "COMPONENT_NAME": "web",
1656
- "ENV_SHORT": "stage",
1657
- "ENV_TYPE": "stage",
1658
1560
  "GIT_STRATEGY": "none",
1659
- "HELM_ARGS": "",
1660
- "HELM_EXPERIMENTAL_OCI": "1",
1661
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
1662
- "HOST": "web.stage.my-app.pan.panter.cloud",
1663
- "HOST_CANONICAL": "web.stage.my-app.pan.panter.cloud",
1664
- "HOST_INTERNAL": "web.stage.my-app.pan.panter.cloud",
1665
1561
  "KUBERNETES_CPU_REQUEST": "0.5",
1666
1562
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
1667
1563
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
1668
- "KUBE_APP_NAME": "web",
1669
- "KUBE_APP_NAME_PREFIX": "",
1670
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-web",
1671
- "KUBE_NAMESPACE": "pan-my-app-stage",
1672
- "KUBE_VALUES": "env:
1673
- secret:
1674
- MONGODB_ROOT_PASSWORD: '$CL_stage_web_MONGODB_ROOT_PASSWORD'
1675
- MONGO_URL: 'mongodb://root:$CL_stage_web_MONGODB_ROOT_PASSWORD@web-mongodb.pan-my-app-stage.svc.cluster.local:27017/app?authSource=admin'
1676
- public:
1677
- ENV_SHORT: 'stage'
1678
- APP_DIR: 'app'
1679
- ENV_TYPE: 'stage'
1680
- BUILD_INFO_ID: 'some-id'
1681
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
1682
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
1683
- HOST: 'web.stage.my-app.pan.panter.cloud'
1684
- ROOT_URL: 'https://web.stage.my-app.pan.panter.cloud'
1685
- HOST_CANONICAL: 'web.stage.my-app.pan.panter.cloud'
1686
- ROOT_URL_INTERNAL: 'https://web.stage.my-app.pan.panter.cloud'
1687
- KUBE_NAMESPACE: 'pan-my-app-stage'
1688
- KUBE_APP_NAME: 'web'
1689
- KUBE_APP_NAME_PREFIX: ''
1690
- HOST_INTERNAL: 'web.stage.my-app.pan.panter.cloud'
1691
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]'
1692
- application:
1693
- host: 'web.stage.my-app.pan.panter.cloud'
1694
- command: 'node main.js'
1695
- livenessProbe:
1696
- httpGet:
1697
- path: '__health'
1698
- readinessProbe:
1699
- httpGet:
1700
- path: '__health'
1701
- startupProbe:
1702
- httpGet:
1703
- path: '__health'
1704
- worker:
1705
- enabled: true
1706
- mongodb:
1707
- enabled: true
1708
- auth:
1709
- enabled: true
1710
- rootPassword: '$CL_stage_web_MONGODB_ROOT_PASSWORD'
1711
- replicaSetKey: '$CL_stage_web_MONGODB_REPLICASET_KEY'
1712
- persistence:
1713
- storageClass: 'standard-rwo'
1714
- backup:
1715
- enabled: true
1716
- hostToBackup: 'web-mongodb.pan-my-app-stage.svc.cluster.local:27017'
1717
- pvcToBackup: 'web-mongodb'
1718
- image: 'mrelite/kubectlmongoshell:v1.0'
1719
- schedule: '0 4 * * *'
1720
- volumeSnapshotClass: 'snapshotclass'
1721
- architecture: 'standalone'
1722
- ",
1723
- "MONGODB_ROOT_PASSWORD": "$CL_stage_web_MONGODB_ROOT_PASSWORD",
1724
- "RELEASE_NAME": "pan-my-app-stage-web",
1725
- "ROOT_URL": "https://web.stage.my-app.pan.panter.cloud",
1726
- "ROOT_URL_INTERNAL": "https://web.stage.my-app.pan.panter.cloud",
1727
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]",
1728
1564
  },
1729
1565
  },
1730
1566
  "web ๐Ÿ”จ app | prod ": {
@@ -1774,7 +1610,27 @@ mongodb:
1774
1610
  ],
1775
1611
  },
1776
1612
  "script": [
1777
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > app/__build_info.json",
1613
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1614
+ "export METEOR_DISABLE_OPTIMISTIC_CACHING="1"",
1615
+ "export ENV_SHORT="prod"",
1616
+ "export APP_DIR="app"",
1617
+ "export ENV_TYPE="prod"",
1618
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1619
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1620
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
1621
+ "export HOST="www.example.com"",
1622
+ "export ROOT_URL="https://www.example.com"",
1623
+ "export HOST_INTERNAL="web.prod.my-app.pan.panter.cloud"",
1624
+ "export HOST_CANONICAL="web.prod.my-app.pan.panter.cloud"",
1625
+ "export ROOT_URL_INTERNAL="https://web.prod.my-app.pan.panter.cloud"",
1626
+ "export KUBE_NAMESPACE="pan-my-app-prod"",
1627
+ "export KUBE_APP_NAME="web"",
1628
+ "export KUBE_APP_NAME_PREFIX=""",
1629
+ "export MONGODB_ROOT_PASSWORD="$CL_prod_web_MONGODB_ROOT_PASSWORD"",
1630
+ "export MONGODB_REPLICASET_KEY="$CL_prod_web_MONGODB_REPLICASET_KEY"",
1631
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
1632
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1633
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app/__build_info.json",
1778
1634
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1779
1635
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1780
1636
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -1795,27 +1651,9 @@ mongodb:
1795
1651
  ],
1796
1652
  "stage": "build",
1797
1653
  "variables": {
1798
- "APP_DIR": "app",
1799
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1800
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1801
- "BUILD_INFO_ID": "some-id",
1802
- "ENV_SHORT": "prod",
1803
- "ENV_TYPE": "prod",
1804
- "HOST": "www.example.com",
1805
- "HOST_CANONICAL": "web.prod.my-app.pan.panter.cloud",
1806
- "HOST_INTERNAL": "web.prod.my-app.pan.panter.cloud",
1807
1654
  "KUBERNETES_CPU_REQUEST": "0.5",
1808
1655
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
1809
1656
  "KUBERNETES_MEMORY_REQUEST": "1Gi",
1810
- "KUBE_APP_NAME": "web",
1811
- "KUBE_APP_NAME_PREFIX": "",
1812
- "KUBE_NAMESPACE": "pan-my-app-prod",
1813
- "METEOR_DISABLE_OPTIMISTIC_CACHING": "1",
1814
- "MONGODB_REPLICASET_KEY": "$CL_prod_web_MONGODB_REPLICASET_KEY",
1815
- "MONGODB_ROOT_PASSWORD": "$CL_prod_web_MONGODB_ROOT_PASSWORD",
1816
- "ROOT_URL": "https://www.example.com",
1817
- "ROOT_URL_INTERNAL": "https://web.prod.my-app.pan.panter.cloud",
1818
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]",
1819
1657
  },
1820
1658
  },
1821
1659
  "web ๐Ÿ”จ app | stage ": {
@@ -1865,7 +1703,26 @@ mongodb:
1865
1703
  ],
1866
1704
  },
1867
1705
  "script": [
1868
- "echo '{"id":"some-id","time":"01-01-2023 12:13:14"}' > app/__build_info.json",
1706
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1707
+ "export METEOR_DISABLE_OPTIMISTIC_CACHING="1"",
1708
+ "export ENV_SHORT="stage"",
1709
+ "export APP_DIR="app"",
1710
+ "export ENV_TYPE="stage"",
1711
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1712
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1713
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
1714
+ "export HOST="web.stage.my-app.pan.panter.cloud"",
1715
+ "export ROOT_URL="https://web.stage.my-app.pan.panter.cloud"",
1716
+ "export HOST_INTERNAL="web.stage.my-app.pan.panter.cloud"",
1717
+ "export HOST_CANONICAL="web.stage.my-app.pan.panter.cloud"",
1718
+ "export ROOT_URL_INTERNAL="https://web.stage.my-app.pan.panter.cloud"",
1719
+ "export KUBE_NAMESPACE="pan-my-app-stage"",
1720
+ "export KUBE_APP_NAME="web"",
1721
+ "export KUBE_APP_NAME_PREFIX=""",
1722
+ "export MONGODB_ROOT_PASSWORD="$CL_stage_web_MONGODB_ROOT_PASSWORD"",
1723
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"",
1724
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1725
+ "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app/__build_info.json",
1869
1726
  "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
1870
1727
  "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
1871
1728
  "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
@@ -1886,26 +1743,9 @@ mongodb:
1886
1743
  ],
1887
1744
  "stage": "build",
1888
1745
  "variables": {
1889
- "APP_DIR": "app",
1890
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
1891
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
1892
- "BUILD_INFO_ID": "some-id",
1893
- "ENV_SHORT": "stage",
1894
- "ENV_TYPE": "stage",
1895
- "HOST": "web.stage.my-app.pan.panter.cloud",
1896
- "HOST_CANONICAL": "web.stage.my-app.pan.panter.cloud",
1897
- "HOST_INTERNAL": "web.stage.my-app.pan.panter.cloud",
1898
1746
  "KUBERNETES_CPU_REQUEST": "0.5",
1899
1747
  "KUBERNETES_MEMORY_LIMIT": "4Gi",
1900
1748
  "KUBERNETES_MEMORY_REQUEST": "1Gi",
1901
- "KUBE_APP_NAME": "web",
1902
- "KUBE_APP_NAME_PREFIX": "",
1903
- "KUBE_NAMESPACE": "pan-my-app-stage",
1904
- "METEOR_DISABLE_OPTIMISTIC_CACHING": "1",
1905
- "MONGODB_ROOT_PASSWORD": "$CL_stage_web_MONGODB_ROOT_PASSWORD",
1906
- "ROOT_URL": "https://web.stage.my-app.pan.panter.cloud",
1907
- "ROOT_URL_INTERNAL": "https://web.stage.my-app.pan.panter.cloud",
1908
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]",
1909
1749
  },
1910
1750
  },
1911
1751
  "web ๐Ÿ”จ docker | prod ": {
@@ -1922,6 +1762,16 @@ mongodb:
1922
1762
  ],
1923
1763
  },
1924
1764
  "script": [
1765
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1766
+ "export APP_DIR="app"",
1767
+ "export DOCKER_DIR="."",
1768
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
1769
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/web"",
1770
+ "export DOCKER_IMAGE_NAME="prod/web"",
1771
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
1772
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1773
+ "export METEOR_INSTALL_SCRIPTS=""",
1774
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1925
1775
  "ensureMeteorDockerfile",
1926
1776
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
1927
1777
  "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
@@ -1945,23 +1795,13 @@ mongodb:
1945
1795
  ],
1946
1796
  "stage": "build",
1947
1797
  "variables": {
1948
- "APP_DIR": "app",
1949
- "DOCKERFILE_ADDITIONS": undefined,
1950
- "DOCKERFILE_ADDITIONS_END": undefined,
1951
1798
  "DOCKER_BUILDKIT": "1",
1952
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/web",
1953
- "DOCKER_DIR": ".",
1954
1799
  "DOCKER_DRIVER": "overlay2",
1955
1800
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
1956
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
1957
- "DOCKER_IMAGE_NAME": "prod/web",
1958
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
1959
- "DOCKER_REGISTRY": "$CI_REGISTRY",
1960
1801
  "DOCKER_TLS_CERTDIR": "",
1961
1802
  "KUBERNETES_CPU_REQUEST": "0.5",
1962
1803
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
1963
1804
  "KUBERNETES_MEMORY_REQUEST": "1Gi",
1964
- "METEOR_INSTALL_SCRIPTS": "",
1965
1805
  },
1966
1806
  },
1967
1807
  "web ๐Ÿ”จ docker | stage ": {
@@ -1978,6 +1818,16 @@ mongodb:
1978
1818
  ],
1979
1819
  },
1980
1820
  "script": [
1821
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1822
+ "export APP_DIR="app"",
1823
+ "export DOCKER_DIR="."",
1824
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
1825
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/web"",
1826
+ "export DOCKER_IMAGE_NAME="stage/web"",
1827
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
1828
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1829
+ "export METEOR_INSTALL_SCRIPTS=""",
1830
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1981
1831
  "ensureMeteorDockerfile",
1982
1832
  "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
1983
1833
  "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
@@ -2001,32 +1851,27 @@ mongodb:
2001
1851
  ],
2002
1852
  "stage": "build",
2003
1853
  "variables": {
2004
- "APP_DIR": "app",
2005
- "DOCKERFILE_ADDITIONS": undefined,
2006
- "DOCKERFILE_ADDITIONS_END": undefined,
2007
1854
  "DOCKER_BUILDKIT": "1",
2008
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/web",
2009
- "DOCKER_DIR": ".",
2010
1855
  "DOCKER_DRIVER": "overlay2",
2011
1856
  "DOCKER_HOST": "tcp://0.0.0.0:2375",
2012
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
2013
- "DOCKER_IMAGE_NAME": "stage/web",
2014
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
2015
- "DOCKER_REGISTRY": "$CI_REGISTRY",
2016
1857
  "DOCKER_TLS_CERTDIR": "",
2017
1858
  "KUBERNETES_CPU_REQUEST": "0.5",
2018
1859
  "KUBERNETES_MEMORY_LIMIT": "2Gi",
2019
1860
  "KUBERNETES_MEMORY_REQUEST": "1Gi",
2020
- "METEOR_INSTALL_SCRIPTS": "",
2021
1861
  },
2022
1862
  },
2023
1863
  "web ๐Ÿš€ Deploy | prod ": {
2024
1864
  "allow_failure": true,
1865
+ "artifacts": {
1866
+ "reports": {
1867
+ "dotenv": "gitlab_environment.env",
1868
+ },
1869
+ },
2025
1870
  "environment": {
2026
1871
  "auto_stop_in": undefined,
2027
1872
  "name": "prod/web",
2028
1873
  "on_stop": "web ๐Ÿ›‘ Stop โš ๏ธ | prod ",
2029
- "url": "https://www.example.com",
1874
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
2030
1875
  },
2031
1876
  "image": "path/to/docker/kubernetes:the-version",
2032
1877
  "interruptible": true,
@@ -2057,121 +1902,170 @@ mongodb:
2057
1902
  },
2058
1903
  ],
2059
1904
  "script": [
1905
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1906
+ "export ENV_SHORT="prod"",
1907
+ "export APP_DIR="app"",
1908
+ "export ENV_TYPE="prod"",
1909
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1910
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1911
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
1912
+ "export HOST="www.example.com"",
1913
+ "export ROOT_URL="https://www.example.com"",
1914
+ "export HOST_INTERNAL="web.prod.my-app.pan.panter.cloud"",
1915
+ "export HOST_CANONICAL="web.prod.my-app.pan.panter.cloud"",
1916
+ "export ROOT_URL_INTERNAL="https://web.prod.my-app.pan.panter.cloud"",
1917
+ "export KUBE_NAMESPACE="pan-my-app-prod"",
1918
+ "export KUBE_APP_NAME="web"",
1919
+ "export KUBE_APP_NAME_PREFIX=""",
1920
+ "export MONGODB_ROOT_PASSWORD="$CL_prod_web_MONGODB_ROOT_PASSWORD"",
1921
+ "export MONGODB_REPLICASET_KEY="$CL_prod_web_MONGODB_REPLICASET_KEY"",
1922
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
1923
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
1924
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/web"",
1925
+ "export DOCKER_IMAGE_NAME="prod/web"",
1926
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
1927
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1928
+ "export RELEASE_NAME="pan-my-app-prod-web"",
1929
+ "export HELM_EXPERIMENTAL_OCI="1"",
1930
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"",
1931
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
1932
+ "export HELM_ARGS=""",
1933
+ "export COMPONENT_NAME="web"",
1934
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1935
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2060
1936
  "kubectl config set-cluster "kube-pan-my-app-prod-web" --server="$CL_prod_web_KUBE_URL" --certificate-authority <(echo $CL_prod_web_KUBE_CA_PEM | base64 -d) --embed-certs=true",
2061
1937
  "kubectl config set-credentials "kube-pan-my-app-prod-web" --token="$CL_prod_web_KUBE_TOKEN"",
2062
1938
  "kubectl config set-context "kube-pan-my-app-prod-web" --cluster="kube-pan-my-app-prod-web" --user="kube-pan-my-app-prod-web" --namespace="pan-my-app-prod"",
2063
1939
  "kubectl config use-context "kube-pan-my-app-prod-web"",
2064
- "kubernetesCreateSecret",
2065
- "kubernetesDeploy",
2066
- "echo Uploading SBOM to Dependency Track",
2067
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-my-app/web" "https://www.example.com" "__sbom.json" vex.json || true",
2068
- "echo deployment successful ๐Ÿ˜ป",
2069
- ],
2070
- "stage": "deploy prod",
2071
- "variables": {
2072
- "APP_DIR": "app",
2073
- "BUILD_ID": "some-id",
2074
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2075
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2076
- "BUILD_INFO_ID": "some-id",
2077
- "COMPONENT_NAME": "web",
2078
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/web",
2079
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
2080
- "DOCKER_IMAGE_NAME": "prod/web",
2081
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
2082
- "DOCKER_REGISTRY": "$CI_REGISTRY",
2083
- "ENV_SHORT": "prod",
2084
- "ENV_TYPE": "prod",
2085
- "HELM_ARGS": "",
2086
- "HELM_EXPERIMENTAL_OCI": "1",
2087
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
2088
- "HOST": "www.example.com",
2089
- "HOST_CANONICAL": "web.prod.my-app.pan.panter.cloud",
2090
- "HOST_INTERNAL": "web.prod.my-app.pan.panter.cloud",
2091
- "KUBERNETES_CPU_REQUEST": "0.5",
2092
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2093
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2094
- "KUBE_APP_NAME": "web",
2095
- "KUBE_APP_NAME_PREFIX": "",
2096
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-web",
2097
- "KUBE_NAMESPACE": "pan-my-app-prod",
2098
- "KUBE_VALUES": "env:
1940
+ "echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
1941
+ "cat > __all_values.yml <<EOF
1942
+ env:
2099
1943
  secret:
2100
- MONGODB_ROOT_PASSWORD: '$CL_prod_web_MONGODB_ROOT_PASSWORD'
2101
- MONGODB_REPLICASET_KEY: '$CL_prod_web_MONGODB_REPLICASET_KEY'
2102
- MONGO_URL: 'mongodb://root:$CL_prod_web_MONGODB_ROOT_PASSWORD@web-mongodb-0.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017,web-mongodb-1.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin'
2103
- MONGO_OPLOG_URL: 'mongodb://root:$CL_prod_web_MONGODB_ROOT_PASSWORD@web-mongodb-0.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017,web-mongodb-1.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin'
1944
+ MONGODB_ROOT_PASSWORD: |-
1945
+ $(printf %s "$CL_prod_web_MONGODB_ROOT_PASSWORD" | sed 's/^/ /')
1946
+ MONGODB_REPLICASET_KEY: |-
1947
+ $(printf %s "$CL_prod_web_MONGODB_REPLICASET_KEY" | sed 's/^/ /')
1948
+ MONGO_URL: |-
1949
+ mongodb://root:$CL_prod_web_MONGODB_ROOT_PASSWORD@web-mongodb-0.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017,web-mongodb-1.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin
1950
+ MONGO_OPLOG_URL: |-
1951
+ mongodb://root:$CL_prod_web_MONGODB_ROOT_PASSWORD@web-mongodb-0.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017,web-mongodb-1.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin
2104
1952
  public:
2105
- ENV_SHORT: 'prod'
2106
- APP_DIR: 'app'
2107
- ENV_TYPE: 'prod'
2108
- BUILD_INFO_ID: 'some-id'
2109
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
2110
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
2111
- HOST: 'www.example.com'
2112
- ROOT_URL: 'https://www.example.com'
2113
- HOST_CANONICAL: 'web.prod.my-app.pan.panter.cloud'
2114
- ROOT_URL_INTERNAL: 'https://web.prod.my-app.pan.panter.cloud'
2115
- KUBE_NAMESPACE: 'pan-my-app-prod'
2116
- KUBE_APP_NAME: 'web'
2117
- KUBE_APP_NAME_PREFIX: ''
2118
- HOST_INTERNAL: 'web.prod.my-app.pan.panter.cloud'
2119
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]'
1953
+ ENV_SHORT: |-
1954
+ prod
1955
+ APP_DIR: |-
1956
+ app
1957
+ ENV_TYPE: |-
1958
+ prod
1959
+ BUILD_INFO_BUILD_ID: |-
1960
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
1961
+ BUILD_INFO_BUILD_TIME: |-
1962
+ $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
1963
+ BUILD_INFO_CURRENT_VERSION: |-
1964
+ $(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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")" | sed 's/^/ /')
1965
+ HOST: |-
1966
+ www.example.com
1967
+ ROOT_URL: |-
1968
+ https://www.example.com
1969
+ HOST_INTERNAL: |-
1970
+ web.prod.my-app.pan.panter.cloud
1971
+ HOST_CANONICAL: |-
1972
+ web.prod.my-app.pan.panter.cloud
1973
+ ROOT_URL_INTERNAL: |-
1974
+ https://web.prod.my-app.pan.panter.cloud
1975
+ KUBE_NAMESPACE: |-
1976
+ pan-my-app-prod
1977
+ KUBE_APP_NAME: |-
1978
+ web
1979
+ KUBE_APP_NAME_PREFIX: ""
1980
+ _ALL_ENV_VAR_KEYS: |-
1981
+ ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]
2120
1982
  application:
2121
- host: 'www.example.com'
2122
- command: 'node main.js'
1983
+ host: |-
1984
+ www.example.com
1985
+ command: |-
1986
+ node main.js
2123
1987
  livenessProbe:
2124
1988
  httpGet:
2125
- path: '__health'
1989
+ path: |-
1990
+ __health
2126
1991
  readinessProbe:
2127
1992
  httpGet:
2128
- path: '__health'
1993
+ path: |-
1994
+ __health
2129
1995
  startupProbe:
2130
1996
  httpGet:
2131
- path: '__health'
1997
+ path: |-
1998
+ __health
2132
1999
  worker:
2133
2000
  enabled: true
2134
2001
  redirects:
2135
- - host: 'example.com'
2002
+ - host: |-
2003
+ example.com
2136
2004
  mongodb:
2137
2005
  enabled: true
2138
2006
  auth:
2139
2007
  enabled: true
2140
- rootPassword: '$CL_prod_web_MONGODB_ROOT_PASSWORD'
2141
- replicaSetKey: '$CL_prod_web_MONGODB_REPLICASET_KEY'
2008
+ rootPassword: |-
2009
+ $CL_prod_web_MONGODB_ROOT_PASSWORD
2010
+ replicaSetKey: |-
2011
+ $CL_prod_web_MONGODB_REPLICASET_KEY
2142
2012
  persistence:
2143
- storageClass: 'premium-rwo'
2144
- size: '50Gi'
2013
+ storageClass: |-
2014
+ premium-rwo
2015
+ size: |-
2016
+ 50Gi
2145
2017
  backup:
2146
2018
  enabled: true
2147
- hostToBackup: 'web-mongodb-1.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017'
2148
- pvcToBackup: 'datadir-web-mongodb-1'
2149
- image: 'mrelite/kubectlmongoshell:v1.0'
2150
- schedule: '0 4 * * *'
2151
- volumeSnapshotClass: 'snapshotclass'
2152
- architecture: 'replicaset'
2019
+ hostToBackup: |-
2020
+ web-mongodb-1.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017
2021
+ pvcToBackup: |-
2022
+ datadir-web-mongodb-1
2023
+ image: |-
2024
+ mrelite/kubectlmongoshell:v1.0
2025
+ schedule: |-
2026
+ 0 4 * * *
2027
+ volumeSnapshotClass: |-
2028
+ snapshotclass
2029
+ architecture: |-
2030
+ replicaset
2153
2031
  replicaCount: 2
2154
2032
  resources:
2155
2033
  limits:
2156
- memory: '8Gi'
2034
+ memory: |-
2035
+ 8Gi
2157
2036
  requests:
2158
- memory: '8Gi'
2037
+ memory: |-
2038
+ 8Gi
2039
+
2040
+ EOF
2159
2041
  ",
2160
- "MONGODB_REPLICASET_KEY": "$CL_prod_web_MONGODB_REPLICASET_KEY",
2161
- "MONGODB_ROOT_PASSWORD": "$CL_prod_web_MONGODB_ROOT_PASSWORD",
2162
- "RELEASE_NAME": "pan-my-app-prod-web",
2163
- "ROOT_URL": "https://www.example.com",
2164
- "ROOT_URL_INTERNAL": "https://web.prod.my-app.pan.panter.cloud",
2165
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]",
2042
+ "echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
2043
+ "kubernetesCreateSecret",
2044
+ "kubernetesDeploy",
2045
+ "echo Uploading SBOM to Dependency Track",
2046
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-my-app/web" "https://www.example.com" "__sbom.json" vex.json || true",
2047
+ "echo deployment successful ๐Ÿ˜ป",
2048
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://www.example.com" >> gitlab_environment.env",
2049
+ ],
2050
+ "stage": "deploy prod",
2051
+ "variables": {
2052
+ "KUBERNETES_CPU_REQUEST": "0.5",
2053
+ "KUBERNETES_MEMORY_LIMIT": "400Mi",
2054
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
2166
2055
  },
2167
2056
  },
2168
2057
  "web ๐Ÿš€ Deploy | stage ": {
2169
2058
  "allow_failure": false,
2059
+ "artifacts": {
2060
+ "reports": {
2061
+ "dotenv": "gitlab_environment.env",
2062
+ },
2063
+ },
2170
2064
  "environment": {
2171
2065
  "auto_stop_in": undefined,
2172
2066
  "name": "stage/web",
2173
2067
  "on_stop": "web ๐Ÿ›‘ Stop โš ๏ธ | stage ",
2174
- "url": "https://web.stage.my-app.pan.panter.cloud",
2068
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
2175
2069
  },
2176
2070
  "image": "path/to/docker/kubernetes:the-version",
2177
2071
  "interruptible": true,
@@ -2202,107 +2096,151 @@ mongodb:
2202
2096
  },
2203
2097
  ],
2204
2098
  "script": [
2099
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2100
+ "export ENV_SHORT="stage"",
2101
+ "export APP_DIR="app"",
2102
+ "export ENV_TYPE="stage"",
2103
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2104
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2105
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
2106
+ "export HOST="web.stage.my-app.pan.panter.cloud"",
2107
+ "export ROOT_URL="https://web.stage.my-app.pan.panter.cloud"",
2108
+ "export HOST_INTERNAL="web.stage.my-app.pan.panter.cloud"",
2109
+ "export HOST_CANONICAL="web.stage.my-app.pan.panter.cloud"",
2110
+ "export ROOT_URL_INTERNAL="https://web.stage.my-app.pan.panter.cloud"",
2111
+ "export KUBE_NAMESPACE="pan-my-app-stage"",
2112
+ "export KUBE_APP_NAME="web"",
2113
+ "export KUBE_APP_NAME_PREFIX=""",
2114
+ "export MONGODB_ROOT_PASSWORD="$CL_stage_web_MONGODB_ROOT_PASSWORD"",
2115
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"",
2116
+ "export DOCKER_REGISTRY="$CI_REGISTRY"",
2117
+ "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/web"",
2118
+ "export DOCKER_IMAGE_NAME="stage/web"",
2119
+ "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
2120
+ "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2121
+ "export RELEASE_NAME="pan-my-app-stage-web"",
2122
+ "export HELM_EXPERIMENTAL_OCI="1"",
2123
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"",
2124
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
2125
+ "export HELM_ARGS=""",
2126
+ "export COMPONENT_NAME="web"",
2127
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2128
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2205
2129
  "kubectl config set-cluster "kube-pan-my-app-stage-web" --server="$CL_stage_web_KUBE_URL" --certificate-authority <(echo $CL_stage_web_KUBE_CA_PEM | base64 -d) --embed-certs=true",
2206
2130
  "kubectl config set-credentials "kube-pan-my-app-stage-web" --token="$CL_stage_web_KUBE_TOKEN"",
2207
2131
  "kubectl config set-context "kube-pan-my-app-stage-web" --cluster="kube-pan-my-app-stage-web" --user="kube-pan-my-app-stage-web" --namespace="pan-my-app-stage"",
2208
2132
  "kubectl config use-context "kube-pan-my-app-stage-web"",
2209
- "kubernetesCreateSecret",
2210
- "kubernetesDeploy",
2211
- "echo Uploading SBOM to Dependency Track",
2212
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-my-app/web" "https://web.stage.my-app.pan.panter.cloud" "__sbom.json" vex.json || true",
2213
- "echo deployment successful ๐Ÿ˜ป",
2214
- ],
2215
- "stage": "deploy stage",
2216
- "variables": {
2217
- "APP_DIR": "app",
2218
- "BUILD_ID": "some-id",
2219
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2220
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2221
- "BUILD_INFO_ID": "some-id",
2222
- "COMPONENT_NAME": "web",
2223
- "DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/web",
2224
- "DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
2225
- "DOCKER_IMAGE_NAME": "stage/web",
2226
- "DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
2227
- "DOCKER_REGISTRY": "$CI_REGISTRY",
2228
- "ENV_SHORT": "stage",
2229
- "ENV_TYPE": "stage",
2230
- "HELM_ARGS": "",
2231
- "HELM_EXPERIMENTAL_OCI": "1",
2232
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
2233
- "HOST": "web.stage.my-app.pan.panter.cloud",
2234
- "HOST_CANONICAL": "web.stage.my-app.pan.panter.cloud",
2235
- "HOST_INTERNAL": "web.stage.my-app.pan.panter.cloud",
2236
- "KUBERNETES_CPU_REQUEST": "0.5",
2237
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2238
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2239
- "KUBE_APP_NAME": "web",
2240
- "KUBE_APP_NAME_PREFIX": "",
2241
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-web",
2242
- "KUBE_NAMESPACE": "pan-my-app-stage",
2243
- "KUBE_VALUES": "env:
2133
+ "echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
2134
+ "cat > __all_values.yml <<EOF
2135
+ env:
2244
2136
  secret:
2245
- MONGODB_ROOT_PASSWORD: '$CL_stage_web_MONGODB_ROOT_PASSWORD'
2246
- MONGO_URL: 'mongodb://root:$CL_stage_web_MONGODB_ROOT_PASSWORD@web-mongodb.pan-my-app-stage.svc.cluster.local:27017/app?authSource=admin'
2137
+ MONGODB_ROOT_PASSWORD: |-
2138
+ $(printf %s "$CL_stage_web_MONGODB_ROOT_PASSWORD" | sed 's/^/ /')
2139
+ MONGO_URL: |-
2140
+ mongodb://root:$CL_stage_web_MONGODB_ROOT_PASSWORD@web-mongodb.pan-my-app-stage.svc.cluster.local:27017/app?authSource=admin
2247
2141
  public:
2248
- ENV_SHORT: 'stage'
2249
- APP_DIR: 'app'
2250
- ENV_TYPE: 'stage'
2251
- BUILD_INFO_ID: 'some-id'
2252
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
2253
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
2254
- HOST: 'web.stage.my-app.pan.panter.cloud'
2255
- ROOT_URL: 'https://web.stage.my-app.pan.panter.cloud'
2256
- HOST_CANONICAL: 'web.stage.my-app.pan.panter.cloud'
2257
- ROOT_URL_INTERNAL: 'https://web.stage.my-app.pan.panter.cloud'
2258
- KUBE_NAMESPACE: 'pan-my-app-stage'
2259
- KUBE_APP_NAME: 'web'
2260
- KUBE_APP_NAME_PREFIX: ''
2261
- HOST_INTERNAL: 'web.stage.my-app.pan.panter.cloud'
2262
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]'
2142
+ ENV_SHORT: |-
2143
+ stage
2144
+ APP_DIR: |-
2145
+ app
2146
+ ENV_TYPE: |-
2147
+ stage
2148
+ BUILD_INFO_BUILD_ID: |-
2149
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
2150
+ BUILD_INFO_BUILD_TIME: |-
2151
+ $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
2152
+ BUILD_INFO_CURRENT_VERSION: |-
2153
+ $(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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")" | sed 's/^/ /')
2154
+ HOST: |-
2155
+ web.stage.my-app.pan.panter.cloud
2156
+ ROOT_URL: |-
2157
+ https://web.stage.my-app.pan.panter.cloud
2158
+ HOST_INTERNAL: |-
2159
+ web.stage.my-app.pan.panter.cloud
2160
+ HOST_CANONICAL: |-
2161
+ web.stage.my-app.pan.panter.cloud
2162
+ ROOT_URL_INTERNAL: |-
2163
+ https://web.stage.my-app.pan.panter.cloud
2164
+ KUBE_NAMESPACE: |-
2165
+ pan-my-app-stage
2166
+ KUBE_APP_NAME: |-
2167
+ web
2168
+ KUBE_APP_NAME_PREFIX: ""
2169
+ _ALL_ENV_VAR_KEYS: |-
2170
+ ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","MONGODB_ROOT_PASSWORD"]
2263
2171
  application:
2264
- host: 'web.stage.my-app.pan.panter.cloud'
2265
- command: 'node main.js'
2172
+ host: |-
2173
+ web.stage.my-app.pan.panter.cloud
2174
+ command: |-
2175
+ node main.js
2266
2176
  livenessProbe:
2267
2177
  httpGet:
2268
- path: '__health'
2178
+ path: |-
2179
+ __health
2269
2180
  readinessProbe:
2270
2181
  httpGet:
2271
- path: '__health'
2182
+ path: |-
2183
+ __health
2272
2184
  startupProbe:
2273
2185
  httpGet:
2274
- path: '__health'
2186
+ path: |-
2187
+ __health
2275
2188
  worker:
2276
2189
  enabled: true
2277
2190
  mongodb:
2278
2191
  enabled: true
2279
2192
  auth:
2280
2193
  enabled: true
2281
- rootPassword: '$CL_stage_web_MONGODB_ROOT_PASSWORD'
2282
- replicaSetKey: '$CL_stage_web_MONGODB_REPLICASET_KEY'
2194
+ rootPassword: |-
2195
+ $CL_stage_web_MONGODB_ROOT_PASSWORD
2196
+ replicaSetKey: |-
2197
+ $CL_stage_web_MONGODB_REPLICASET_KEY
2283
2198
  persistence:
2284
- storageClass: 'standard-rwo'
2199
+ storageClass: |-
2200
+ standard-rwo
2285
2201
  backup:
2286
2202
  enabled: true
2287
- hostToBackup: 'web-mongodb.pan-my-app-stage.svc.cluster.local:27017'
2288
- pvcToBackup: 'web-mongodb'
2289
- image: 'mrelite/kubectlmongoshell:v1.0'
2290
- schedule: '0 4 * * *'
2291
- volumeSnapshotClass: 'snapshotclass'
2292
- architecture: 'standalone'
2203
+ hostToBackup: |-
2204
+ web-mongodb.pan-my-app-stage.svc.cluster.local:27017
2205
+ pvcToBackup: |-
2206
+ web-mongodb
2207
+ image: |-
2208
+ mrelite/kubectlmongoshell:v1.0
2209
+ schedule: |-
2210
+ 0 4 * * *
2211
+ volumeSnapshotClass: |-
2212
+ snapshotclass
2213
+ architecture: |-
2214
+ standalone
2215
+
2216
+ EOF
2293
2217
  ",
2294
- "MONGODB_ROOT_PASSWORD": "$CL_stage_web_MONGODB_ROOT_PASSWORD",
2295
- "RELEASE_NAME": "pan-my-app-stage-web",
2296
- "ROOT_URL": "https://web.stage.my-app.pan.panter.cloud",
2297
- "ROOT_URL_INTERNAL": "https://web.stage.my-app.pan.panter.cloud",
2298
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]",
2218
+ "echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
2219
+ "kubernetesCreateSecret",
2220
+ "kubernetesDeploy",
2221
+ "echo Uploading SBOM to Dependency Track",
2222
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-my-app/web" "https://web.stage.my-app.pan.panter.cloud" "__sbom.json" vex.json || true",
2223
+ "echo deployment successful ๐Ÿ˜ป",
2224
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://web.stage.my-app.pan.panter.cloud" >> gitlab_environment.env",
2225
+ ],
2226
+ "stage": "deploy stage",
2227
+ "variables": {
2228
+ "KUBERNETES_CPU_REQUEST": "0.5",
2229
+ "KUBERNETES_MEMORY_LIMIT": "400Mi",
2230
+ "KUBERNETES_MEMORY_REQUEST": "200Mi",
2299
2231
  },
2300
2232
  },
2301
2233
  "web ๐Ÿ›‘ Stop โš ๏ธ | prod ": {
2234
+ "allow_failure": true,
2235
+ "artifacts": {
2236
+ "reports": {
2237
+ "dotenv": "gitlab_environment.env",
2238
+ },
2239
+ },
2302
2240
  "environment": {
2303
2241
  "action": "stop",
2304
2242
  "name": "prod/web",
2305
- "url": "https://www.example.com",
2243
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
2306
2244
  },
2307
2245
  "image": "path/to/docker/kubernetes:the-version",
2308
2246
  "interruptible": true,
@@ -2316,16 +2254,40 @@ mongodb:
2316
2254
  },
2317
2255
  "rules": [
2318
2256
  {
2319
- "allow_failure": true,
2320
2257
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
2321
2258
  "when": "on_success",
2322
2259
  },
2323
2260
  {
2324
- "allow_failure": true,
2325
2261
  "when": "manual",
2326
2262
  },
2327
2263
  ],
2328
2264
  "script": [
2265
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2266
+ "export ENV_SHORT="prod"",
2267
+ "export APP_DIR="app"",
2268
+ "export ENV_TYPE="prod"",
2269
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2270
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2271
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
2272
+ "export HOST="www.example.com"",
2273
+ "export ROOT_URL="https://www.example.com"",
2274
+ "export HOST_INTERNAL="web.prod.my-app.pan.panter.cloud"",
2275
+ "export HOST_CANONICAL="web.prod.my-app.pan.panter.cloud"",
2276
+ "export ROOT_URL_INTERNAL="https://web.prod.my-app.pan.panter.cloud"",
2277
+ "export KUBE_NAMESPACE="pan-my-app-prod"",
2278
+ "export KUBE_APP_NAME="web"",
2279
+ "export KUBE_APP_NAME_PREFIX=""",
2280
+ "export MONGODB_ROOT_PASSWORD="$CL_prod_web_MONGODB_ROOT_PASSWORD"",
2281
+ "export MONGODB_REPLICASET_KEY="$CL_prod_web_MONGODB_REPLICASET_KEY"",
2282
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
2283
+ "export RELEASE_NAME="pan-my-app-prod-web"",
2284
+ "export HELM_EXPERIMENTAL_OCI="1"",
2285
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"",
2286
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
2287
+ "export HELM_ARGS=""",
2288
+ "export COMPONENT_NAME="web"",
2289
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2290
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2329
2291
  "kubectl config set-cluster "kube-pan-my-app-prod-web" --server="$CL_prod_web_KUBE_URL" --certificate-authority <(echo $CL_prod_web_KUBE_CA_PEM | base64 -d) --embed-certs=true",
2330
2292
  "kubectl config set-credentials "kube-pan-my-app-prod-web" --token="$CL_prod_web_KUBE_TOKEN"",
2331
2293
  "kubectl config set-context "kube-pan-my-app-prod-web" --cluster="kube-pan-my-app-prod-web" --user="kube-pan-my-app-prod-web" --namespace="pan-my-app-prod"",
@@ -2333,106 +2295,27 @@ mongodb:
2333
2295
  "kubernetesDelete",
2334
2296
  "echo Disabling component in Dependency Track",
2335
2297
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-my-app/web" "https://www.example.com" || true",
2298
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://www.example.com" >> gitlab_environment.env",
2336
2299
  ],
2337
2300
  "stage": "stop prod",
2338
2301
  "variables": {
2339
- "APP_DIR": "app",
2340
- "BUILD_ID": "some-id",
2341
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2342
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2343
- "BUILD_INFO_ID": "some-id",
2344
- "COMPONENT_NAME": "web",
2345
- "ENV_SHORT": "prod",
2346
- "ENV_TYPE": "prod",
2347
2302
  "GIT_STRATEGY": "none",
2348
- "HELM_ARGS": "",
2349
- "HELM_EXPERIMENTAL_OCI": "1",
2350
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
2351
- "HOST": "www.example.com",
2352
- "HOST_CANONICAL": "web.prod.my-app.pan.panter.cloud",
2353
- "HOST_INTERNAL": "web.prod.my-app.pan.panter.cloud",
2354
2303
  "KUBERNETES_CPU_REQUEST": "0.5",
2355
2304
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
2356
2305
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
2357
- "KUBE_APP_NAME": "web",
2358
- "KUBE_APP_NAME_PREFIX": "",
2359
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-web",
2360
- "KUBE_NAMESPACE": "pan-my-app-prod",
2361
- "KUBE_VALUES": "env:
2362
- secret:
2363
- MONGODB_ROOT_PASSWORD: '$CL_prod_web_MONGODB_ROOT_PASSWORD'
2364
- MONGODB_REPLICASET_KEY: '$CL_prod_web_MONGODB_REPLICASET_KEY'
2365
- MONGO_URL: 'mongodb://root:$CL_prod_web_MONGODB_ROOT_PASSWORD@web-mongodb-0.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017,web-mongodb-1.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin'
2366
- MONGO_OPLOG_URL: 'mongodb://root:$CL_prod_web_MONGODB_ROOT_PASSWORD@web-mongodb-0.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017,web-mongodb-1.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin'
2367
- public:
2368
- ENV_SHORT: 'prod'
2369
- APP_DIR: 'app'
2370
- ENV_TYPE: 'prod'
2371
- BUILD_INFO_ID: 'some-id'
2372
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
2373
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
2374
- HOST: 'www.example.com'
2375
- ROOT_URL: 'https://www.example.com'
2376
- HOST_CANONICAL: 'web.prod.my-app.pan.panter.cloud'
2377
- ROOT_URL_INTERNAL: 'https://web.prod.my-app.pan.panter.cloud'
2378
- KUBE_NAMESPACE: 'pan-my-app-prod'
2379
- KUBE_APP_NAME: 'web'
2380
- KUBE_APP_NAME_PREFIX: ''
2381
- HOST_INTERNAL: 'web.prod.my-app.pan.panter.cloud'
2382
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]'
2383
- application:
2384
- host: 'www.example.com'
2385
- command: 'node main.js'
2386
- livenessProbe:
2387
- httpGet:
2388
- path: '__health'
2389
- readinessProbe:
2390
- httpGet:
2391
- path: '__health'
2392
- startupProbe:
2393
- httpGet:
2394
- path: '__health'
2395
- worker:
2396
- enabled: true
2397
- redirects:
2398
- - host: 'example.com'
2399
- mongodb:
2400
- enabled: true
2401
- auth:
2402
- enabled: true
2403
- rootPassword: '$CL_prod_web_MONGODB_ROOT_PASSWORD'
2404
- replicaSetKey: '$CL_prod_web_MONGODB_REPLICASET_KEY'
2405
- persistence:
2406
- storageClass: 'premium-rwo'
2407
- size: '50Gi'
2408
- backup:
2409
- enabled: true
2410
- hostToBackup: 'web-mongodb-1.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017'
2411
- pvcToBackup: 'datadir-web-mongodb-1'
2412
- image: 'mrelite/kubectlmongoshell:v1.0'
2413
- schedule: '0 4 * * *'
2414
- volumeSnapshotClass: 'snapshotclass'
2415
- architecture: 'replicaset'
2416
- replicaCount: 2
2417
- resources:
2418
- limits:
2419
- memory: '8Gi'
2420
- requests:
2421
- memory: '8Gi'
2422
- ",
2423
- "MONGODB_REPLICASET_KEY": "$CL_prod_web_MONGODB_REPLICASET_KEY",
2424
- "MONGODB_ROOT_PASSWORD": "$CL_prod_web_MONGODB_ROOT_PASSWORD",
2425
- "RELEASE_NAME": "pan-my-app-prod-web",
2426
- "ROOT_URL": "https://www.example.com",
2427
- "ROOT_URL_INTERNAL": "https://web.prod.my-app.pan.panter.cloud",
2428
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]",
2429
2306
  },
2430
2307
  },
2431
2308
  "web ๐Ÿ›‘ Stop โš ๏ธ | stage ": {
2309
+ "allow_failure": true,
2310
+ "artifacts": {
2311
+ "reports": {
2312
+ "dotenv": "gitlab_environment.env",
2313
+ },
2314
+ },
2432
2315
  "environment": {
2433
2316
  "action": "stop",
2434
2317
  "name": "stage/web",
2435
- "url": "https://web.stage.my-app.pan.panter.cloud",
2318
+ "url": "$CL_GITLAB_ENVIRONMENT_URL",
2436
2319
  },
2437
2320
  "image": "path/to/docker/kubernetes:the-version",
2438
2321
  "interruptible": true,
@@ -2446,16 +2329,39 @@ mongodb:
2446
2329
  },
2447
2330
  "rules": [
2448
2331
  {
2449
- "allow_failure": true,
2450
2332
  "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
2451
2333
  "when": "on_success",
2452
2334
  },
2453
2335
  {
2454
- "allow_failure": true,
2455
2336
  "when": "manual",
2456
2337
  },
2457
2338
  ],
2458
2339
  "script": [
2340
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2341
+ "export ENV_SHORT="stage"",
2342
+ "export APP_DIR="app"",
2343
+ "export ENV_TYPE="stage"",
2344
+ "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2345
+ "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2346
+ "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\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
2347
+ "export HOST="web.stage.my-app.pan.panter.cloud"",
2348
+ "export ROOT_URL="https://web.stage.my-app.pan.panter.cloud"",
2349
+ "export HOST_INTERNAL="web.stage.my-app.pan.panter.cloud"",
2350
+ "export HOST_CANONICAL="web.stage.my-app.pan.panter.cloud"",
2351
+ "export ROOT_URL_INTERNAL="https://web.stage.my-app.pan.panter.cloud"",
2352
+ "export KUBE_NAMESPACE="pan-my-app-stage"",
2353
+ "export KUBE_APP_NAME="web"",
2354
+ "export KUBE_APP_NAME_PREFIX=""",
2355
+ "export MONGODB_ROOT_PASSWORD="$CL_stage_web_MONGODB_ROOT_PASSWORD"",
2356
+ "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"",
2357
+ "export RELEASE_NAME="pan-my-app-stage-web"",
2358
+ "export HELM_EXPERIMENTAL_OCI="1"",
2359
+ "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"",
2360
+ "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
2361
+ "export HELM_ARGS=""",
2362
+ "export COMPONENT_NAME="web"",
2363
+ "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2364
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2459
2365
  "kubectl config set-cluster "kube-pan-my-app-stage-web" --server="$CL_stage_web_KUBE_URL" --certificate-authority <(echo $CL_stage_web_KUBE_CA_PEM | base64 -d) --embed-certs=true",
2460
2366
  "kubectl config set-credentials "kube-pan-my-app-stage-web" --token="$CL_stage_web_KUBE_TOKEN"",
2461
2367
  "kubectl config set-context "kube-pan-my-app-stage-web" --cluster="kube-pan-my-app-stage-web" --user="kube-pan-my-app-stage-web" --namespace="pan-my-app-stage"",
@@ -2463,87 +2369,14 @@ mongodb:
2463
2369
  "kubernetesDelete",
2464
2370
  "echo Disabling component in Dependency Track",
2465
2371
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-my-app/web" "https://web.stage.my-app.pan.panter.cloud" || true",
2372
+ "echo "CL_GITLAB_ENVIRONMENT_URL=https://web.stage.my-app.pan.panter.cloud" >> gitlab_environment.env",
2466
2373
  ],
2467
2374
  "stage": "stop stage",
2468
2375
  "variables": {
2469
- "APP_DIR": "app",
2470
- "BUILD_ID": "some-id",
2471
- "BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
2472
- "BUILD_INFO_CURRENT_VERSION": "3.2.1",
2473
- "BUILD_INFO_ID": "some-id",
2474
- "COMPONENT_NAME": "web",
2475
- "ENV_SHORT": "stage",
2476
- "ENV_TYPE": "stage",
2477
2376
  "GIT_STRATEGY": "none",
2478
- "HELM_ARGS": "",
2479
- "HELM_EXPERIMENTAL_OCI": "1",
2480
- "HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
2481
- "HOST": "web.stage.my-app.pan.panter.cloud",
2482
- "HOST_CANONICAL": "web.stage.my-app.pan.panter.cloud",
2483
- "HOST_INTERNAL": "web.stage.my-app.pan.panter.cloud",
2484
2377
  "KUBERNETES_CPU_REQUEST": "0.5",
2485
2378
  "KUBERNETES_MEMORY_LIMIT": "400Mi",
2486
2379
  "KUBERNETES_MEMORY_REQUEST": "200Mi",
2487
- "KUBE_APP_NAME": "web",
2488
- "KUBE_APP_NAME_PREFIX": "",
2489
- "KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-web",
2490
- "KUBE_NAMESPACE": "pan-my-app-stage",
2491
- "KUBE_VALUES": "env:
2492
- secret:
2493
- MONGODB_ROOT_PASSWORD: '$CL_stage_web_MONGODB_ROOT_PASSWORD'
2494
- MONGO_URL: 'mongodb://root:$CL_stage_web_MONGODB_ROOT_PASSWORD@web-mongodb.pan-my-app-stage.svc.cluster.local:27017/app?authSource=admin'
2495
- public:
2496
- ENV_SHORT: 'stage'
2497
- APP_DIR: 'app'
2498
- ENV_TYPE: 'stage'
2499
- BUILD_INFO_ID: 'some-id'
2500
- BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
2501
- BUILD_INFO_CURRENT_VERSION: '3.2.1'
2502
- HOST: 'web.stage.my-app.pan.panter.cloud'
2503
- ROOT_URL: 'https://web.stage.my-app.pan.panter.cloud'
2504
- HOST_CANONICAL: 'web.stage.my-app.pan.panter.cloud'
2505
- ROOT_URL_INTERNAL: 'https://web.stage.my-app.pan.panter.cloud'
2506
- KUBE_NAMESPACE: 'pan-my-app-stage'
2507
- KUBE_APP_NAME: 'web'
2508
- KUBE_APP_NAME_PREFIX: ''
2509
- HOST_INTERNAL: 'web.stage.my-app.pan.panter.cloud'
2510
- _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]'
2511
- application:
2512
- host: 'web.stage.my-app.pan.panter.cloud'
2513
- command: 'node main.js'
2514
- livenessProbe:
2515
- httpGet:
2516
- path: '__health'
2517
- readinessProbe:
2518
- httpGet:
2519
- path: '__health'
2520
- startupProbe:
2521
- httpGet:
2522
- path: '__health'
2523
- worker:
2524
- enabled: true
2525
- mongodb:
2526
- enabled: true
2527
- auth:
2528
- enabled: true
2529
- rootPassword: '$CL_stage_web_MONGODB_ROOT_PASSWORD'
2530
- replicaSetKey: '$CL_stage_web_MONGODB_REPLICASET_KEY'
2531
- persistence:
2532
- storageClass: 'standard-rwo'
2533
- backup:
2534
- enabled: true
2535
- hostToBackup: 'web-mongodb.pan-my-app-stage.svc.cluster.local:27017'
2536
- pvcToBackup: 'web-mongodb'
2537
- image: 'mrelite/kubectlmongoshell:v1.0'
2538
- schedule: '0 4 * * *'
2539
- volumeSnapshotClass: 'snapshotclass'
2540
- architecture: 'standalone'
2541
- ",
2542
- "MONGODB_ROOT_PASSWORD": "$CL_stage_web_MONGODB_ROOT_PASSWORD",
2543
- "RELEASE_NAME": "pan-my-app-stage-web",
2544
- "ROOT_URL": "https://web.stage.my-app.pan.panter.cloud",
2545
- "ROOT_URL_INTERNAL": "https://web.stage.my-app.pan.panter.cloud",
2546
- "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","MONGODB_ROOT_PASSWORD"]",
2547
2380
  },
2548
2381
  },
2549
2382
  "web ๐Ÿงพ sbom | prod ": {
@@ -2564,6 +2397,8 @@ mongodb:
2564
2397
  ],
2565
2398
  },
2566
2399
  "script": [
2400
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2401
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2567
2402
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" app",
2568
2403
  ],
2569
2404
  "stage": "build",
@@ -2587,6 +2422,8 @@ mongodb:
2587
2422
  ],
2588
2423
  },
2589
2424
  "script": [
2425
+ "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2426
+ "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2590
2427
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" app",
2591
2428
  ],
2592
2429
  "stage": "build",
@@ -2639,7 +2476,7 @@ mongodb:
2639
2476
  ],
2640
2477
  "variables": {
2641
2478
  "FF_USE_FASTZIP": "true",
2642
- "GIT_DEPTH": 1,
2479
+ "GIT_DEPTH": "1",
2643
2480
  },
2644
2481
  "workflow": {
2645
2482
  "rules": [