@catladder/pipeline 1.144.1 โ 1.146.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bash/BashExpression.d.ts +40 -0
- package/dist/bash/BashExpression.js +124 -0
- package/dist/bash/bashExpressionPerPipelineType.d.ts +6 -0
- package/dist/bash/bashExpressionPerPipelineType.js +11 -0
- package/dist/bash/bashYaml.d.ts +10 -0
- package/dist/bash/bashYaml.js +46 -0
- package/dist/bash/getInjectVarsScript.d.ts +2 -0
- package/dist/bash/getInjectVarsScript.js +45 -0
- package/dist/bash/replaceAsync.d.ts +2 -0
- package/dist/{pipeline/commitInfo/getCommitInfo.js โ bash/replaceAsync.js} +49 -21
- package/dist/build/base/__tests__/createArtifactsConfig.test.js +3 -1
- package/dist/build/base/constants.js +3 -1
- package/dist/build/base/createAppBuildJob.d.ts +2 -1
- package/dist/build/base/createAppBuildJob.js +10 -6
- package/dist/build/base/createArtifactsConfig.d.ts +1 -1
- package/dist/build/base/createArtifactsConfig.js +3 -1
- package/dist/build/base/index.js +3 -1
- package/dist/build/base/writeBuildInfo.js +4 -3
- package/dist/build/base/writeDotEnv.js +12 -3
- package/dist/build/custom/__tests__/testJob.test.js +3 -1
- package/dist/build/custom/buildJob.js +4 -12
- package/dist/build/custom/index.js +3 -1
- package/dist/build/custom/testJob.d.ts +1 -1
- package/dist/build/custom/testJob.js +18 -14
- package/dist/build/docker.d.ts +5 -31
- package/dist/build/docker.js +16 -9
- package/dist/build/index.d.ts +1 -1
- package/dist/build/index.js +13 -7
- package/dist/build/node/buildJob.js +4 -12
- package/dist/build/node/cache.js +6 -3
- package/dist/build/node/constants.js +3 -1
- package/dist/build/node/index.js +3 -1
- package/dist/build/node/meteor.js +5 -2
- package/dist/build/node/testJob.js +18 -14
- package/dist/build/node/yarn.d.ts +3 -2
- package/dist/build/node/yarn.js +6 -3
- package/dist/build/rails/build.js +3 -1
- package/dist/build/rails/index.js +3 -1
- package/dist/build/rails/test.js +15 -11
- package/dist/build/sbom.js +3 -1
- package/dist/build/types.d.ts +24 -18
- package/dist/build/types.js +3 -1
- package/dist/bundles/catladder-gitlab/index.js +3 -3
- package/dist/catladder-gitlab.js +10 -54
- package/dist/config/__tests__/configruedEnvs.test.js +3 -1
- package/dist/config/configruedEnvs.js +3 -1
- package/dist/config/index.js +13 -7
- package/dist/config/readConfig.js +6 -5
- package/dist/constants.js +5 -3
- package/dist/context/__tests__/resolveReferences.test.js +40 -8
- package/dist/context/getBuildInfoVariables.d.ts +7 -0
- package/dist/context/getBuildInfoVariables.js +29 -0
- package/dist/context/getEnvConfig.js +3 -1
- package/dist/context/getEnvType.js +3 -1
- package/dist/context/getEnvironment.d.ts +3 -3
- package/dist/context/getEnvironment.js +10 -14
- package/dist/context/getEnvironmentContext.d.ts +7 -3
- package/dist/context/getEnvironmentContext.js +21 -11
- package/dist/context/getEnvironmentVariables.d.ts +26 -5
- package/dist/context/getEnvironmentVariables.js +40 -25
- package/dist/context/getLabels.js +4 -2
- package/dist/context/getReviewSlug.d.ts +4 -0
- package/dist/context/getReviewSlug.js +22 -0
- package/dist/context/index.d.ts +12 -3
- package/dist/context/index.js +21 -15
- package/dist/context/resolveReferences.d.ts +3 -1
- package/dist/context/resolveReferences.js +53 -21
- package/dist/context/transformJobOnlyVars.d.ts +5 -2
- package/dist/context/transformJobOnlyVars.js +4 -2
- package/dist/context/utils/envVars.d.ts +1 -1
- package/dist/context/utils/envVars.js +5 -2
- package/dist/defaults/index.js +3 -1
- package/dist/deploy/base/deploy.d.ts +1 -1
- package/dist/deploy/base/deploy.js +12 -11
- package/dist/deploy/base/index.js +3 -1
- package/dist/deploy/base/rollback.d.ts +1 -1
- package/dist/deploy/base/rollback.js +13 -9
- package/dist/deploy/base/stop.d.ts +1 -1
- package/dist/deploy/base/stop.js +16 -11
- package/dist/deploy/base/types.d.ts +1 -1
- package/dist/deploy/base/types.js +3 -1
- package/dist/deploy/base/variables.js +3 -1
- package/dist/deploy/cloudRun/artifactsRegistry.d.ts +2 -1
- package/dist/deploy/cloudRun/artifactsRegistry.js +6 -4
- package/dist/deploy/cloudRun/cleanup.js +3 -1
- package/dist/deploy/cloudRun/cloudRunRevisions.js +3 -1
- package/dist/deploy/cloudRun/createJobs/cloudRunJobs.js +8 -5
- package/dist/deploy/cloudRun/createJobs/cloudRunServices.d.ts +2 -2
- package/dist/deploy/cloudRun/createJobs/cloudRunServices.js +6 -3
- package/dist/deploy/cloudRun/createJobs/common.d.ts +3 -3
- package/dist/deploy/cloudRun/createJobs/common.js +3 -1
- package/dist/deploy/cloudRun/createJobs/constants.d.ts +1 -0
- package/dist/deploy/cloudRun/createJobs/constants.js +7 -0
- package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +10 -4
- package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.js +3 -1
- package/dist/deploy/cloudRun/createJobs/index.js +25 -8
- package/dist/deploy/cloudRun/createJobs/volumes.js +3 -1
- package/dist/deploy/cloudRun/index.js +5 -3
- package/dist/deploy/cloudRun/utils/createArgsString.d.ts +2 -1
- package/dist/deploy/cloudRun/utils/createArgsString.js +3 -1
- package/dist/deploy/cloudRun/utils/database.js +13 -13
- package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.js +3 -1
- package/dist/deploy/cloudRun/utils/getServiceName.d.ts +1 -1
- package/dist/deploy/cloudRun/utils/getServiceName.js +3 -1
- package/dist/deploy/cloudRun/utils/jobName.d.ts +2 -1
- package/dist/deploy/cloudRun/utils/jobName.js +4 -2
- package/dist/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.js +3 -1
- package/dist/deploy/cloudSql/utils.d.ts +2 -1
- package/dist/deploy/cloudSql/utils.js +7 -2
- package/dist/deploy/custom/deployJob.js +3 -1
- package/dist/deploy/custom/index.js +3 -1
- package/dist/deploy/dockerTag/deployJob.js +3 -1
- package/dist/deploy/dockerTag/index.js +3 -1
- package/dist/deploy/index.d.ts +4 -3
- package/dist/deploy/index.js +13 -7
- package/dist/deploy/kubernetes/additionalSecretKeys.js +3 -1
- package/dist/deploy/kubernetes/cloudSql/index.d.ts +3 -2
- package/dist/deploy/kubernetes/cloudSql/index.js +6 -4
- package/dist/deploy/kubernetes/deployJob.js +22 -15
- package/dist/deploy/kubernetes/index.js +51 -14
- package/dist/deploy/kubernetes/kubeEnv.d.ts +3 -2
- package/dist/deploy/kubernetes/kubeEnv.js +7 -4
- package/dist/deploy/kubernetes/kubeValues.d.ts +2 -2
- package/dist/deploy/kubernetes/kubeValues.js +4 -5
- package/dist/deploy/kubernetes/mongodb.js +3 -1
- package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +2 -1
- package/dist/deploy/kubernetes/processSecretsAsFiles.js +3 -1
- package/dist/deploy/sbom.js +3 -1
- package/dist/deploy/types/base.d.ts +8 -2
- package/dist/deploy/types/base.js +3 -1
- package/dist/deploy/types/custom.d.ts +1 -1
- package/dist/deploy/types/custom.js +3 -1
- package/dist/deploy/types/dockerTag.d.ts +1 -1
- package/dist/deploy/types/dockerTag.js +3 -1
- package/dist/deploy/types/googleCloudRun.d.ts +19 -18
- package/dist/deploy/types/googleCloudRun.js +3 -1
- package/dist/deploy/types/index.d.ts +6 -6
- package/dist/deploy/types/index.js +13 -7
- package/dist/deploy/types/kubernetes.d.ts +22 -22
- package/dist/deploy/types/kubernetes.js +3 -1
- package/dist/deploy/utils.js +3 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +16 -9
- package/dist/packageInfos.d.ts +2 -0
- package/dist/packageInfos.js +14 -0
- package/dist/pipeline/createAllJobs.d.ts +13 -5
- package/dist/pipeline/createAllJobs.js +21 -10
- package/dist/pipeline/createChildPipeline.d.ts +1 -1
- package/dist/pipeline/createChildPipeline.js +24 -7
- package/dist/pipeline/createJobsForComponent.d.ts +3 -3
- package/dist/pipeline/createJobsForComponent.js +19 -18
- package/dist/pipeline/createMainPipeline.d.ts +3 -0
- package/dist/pipeline/createMainPipeline.js +248 -0
- package/dist/pipeline/generatePipelineFiles.d.ts +2 -0
- package/dist/pipeline/generatePipelineFiles.js +178 -0
- package/dist/pipeline/getPipelineStages.js +3 -1
- package/dist/pipeline/gitlab/createGitlabJobs.d.ts +15 -5
- package/dist/pipeline/gitlab/createGitlabJobs.js +98 -25
- package/dist/pipeline/gitlab/createGitlabPipeline.d.ts +7 -2
- package/dist/pipeline/gitlab/createGitlabPipeline.js +34 -17
- package/dist/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.d.ts +1 -0
- package/dist/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.js +29 -0
- package/dist/pipeline/gitlab/gitlabReleaseJobs.d.ts +33 -0
- package/dist/pipeline/gitlab/gitlabReleaseJobs.js +24 -0
- package/dist/pipeline/index.d.ts +3 -1
- package/dist/pipeline/index.js +16 -8
- package/dist/pipeline/packageManager.js +4 -2
- package/dist/pipeline/yarn/yarnUtils.js +6 -4
- package/dist/rules/index.d.ts +4 -1
- package/dist/rules/index.js +25 -18
- package/dist/runner/index.d.ts +1 -1
- package/dist/runner/index.js +3 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/config.d.ts +18 -15
- package/dist/types/config.js +5 -2
- package/dist/types/context.d.ts +37 -32
- package/dist/types/context.js +3 -1
- package/dist/types/environmentContext.d.ts +11 -7
- package/dist/types/environmentContext.js +3 -1
- package/dist/types/gitlab-ci-yml.d.ts +30 -30
- package/dist/types/gitlab-ci-yml.js +3 -2
- package/dist/types/gitlab-types.d.ts +4 -6
- package/dist/types/gitlab-types.js +3 -1
- package/dist/types/index.js +13 -7
- package/dist/types/jobs.d.ts +23 -6
- package/dist/types/jobs.js +3 -1
- package/dist/types/pipeline.d.ts +4 -3
- package/dist/types/pipeline.js +3 -1
- package/dist/types/utils.d.ts +1 -1
- package/dist/types/utils.js +3 -1
- package/dist/utils/gitlab.js +3 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +3 -1
- package/dist/utils/writeFiles.d.ts +7 -0
- package/dist/{pipeline/commitInfo/getBuildId.js โ utils/writeFiles.js} +39 -22
- package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +480 -384
- package/examples/__snapshots__/cloud-run-meteor-with-worker.ts.snap +462 -366
- package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +480 -384
- package/examples/__snapshots__/cloud-run-no-service.ts.snap +501 -393
- package/examples/__snapshots__/cloud-run-non-public.ts.snap +480 -384
- package/examples/__snapshots__/cloud-run-post-stop-job.ts.snap +489 -392
- package/examples/__snapshots__/cloud-run-service-gen2.ts.snap +480 -384
- package/examples/__snapshots__/cloud-run-service-with-volumes.ts.snap +501 -401
- package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +1155 -915
- package/examples/__snapshots__/cloud-run-with-sql.ts.snap +1116 -888
- package/examples/__snapshots__/cloud-run-with-worker.ts.snap +482 -386
- package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +452 -356
- package/examples/__snapshots__/custom-build-job.ts.snap +434 -350
- package/examples/__snapshots__/custom-deploy.ts.snap +319 -223
- package/examples/__snapshots__/custom-envs.ts.snap +123 -81
- package/examples/__snapshots__/custom-sbom-java.ts.snap +434 -350
- package/examples/__snapshots__/kubernetes-application-customization.ts.snap +846 -969
- package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +886 -957
- package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +894 -969
- package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +1626 -1728
- package/examples/__snapshots__/kubernetes-with-mongodb.ts.snap +974 -1137
- package/examples/__snapshots__/local-dot-env.ts.snap +480 -384
- package/examples/__snapshots__/meteor-kubernetes.ts.snap +906 -1069
- package/examples/__snapshots__/multiline-var.ts.snap +4500 -0
- package/examples/__snapshots__/native-app.ts.snap +706 -578
- package/examples/__snapshots__/node-build-with-custom-image.ts.snap +480 -384
- package/examples/__snapshots__/node-build-with-docker-additions.ts.snap +488 -384
- package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +1656 -1942
- package/examples/__snapshots__/wait-for-other-deploy.ts.snap +287 -231
- package/examples/__utils__/helpers.ts +2 -2
- package/examples/custom-deploy.ts +7 -7
- package/examples/multiline-var.ts +64 -0
- package/package.json +5 -8
- package/scripts/generate-gitlab-ci-types.ts +2 -2
- package/src/bash/BashExpression.ts +81 -0
- package/src/bash/bashExpressionPerPipelineType.ts +16 -0
- package/src/bash/bashYaml.ts +46 -0
- package/src/bash/getInjectVarsScript.ts +12 -0
- package/src/bash/replaceAsync.ts +50 -0
- package/src/build/base/__tests__/createArtifactsConfig.test.ts +3 -3
- package/src/build/base/createAppBuildJob.ts +8 -4
- package/src/build/base/createArtifactsConfig.ts +2 -2
- package/src/build/base/index.ts +1 -1
- package/src/build/base/writeBuildInfo.ts +1 -1
- package/src/build/base/writeDotEnv.ts +6 -1
- package/src/build/custom/__tests__/testJob.test.ts +1 -1
- package/src/build/custom/buildJob.ts +4 -6
- package/src/build/custom/testJob.ts +6 -5
- package/src/build/docker.ts +21 -13
- package/src/build/index.ts +1 -1
- package/src/build/node/buildJob.ts +3 -5
- package/src/build/node/cache.ts +4 -4
- package/src/build/node/meteor.ts +1 -1
- package/src/build/node/testJob.ts +6 -5
- package/src/build/node/yarn.ts +14 -9
- package/src/build/rails/test.ts +2 -1
- package/src/build/types.ts +8 -1
- package/src/catladder-gitlab.ts +8 -55
- package/src/config/configruedEnvs.ts +6 -6
- package/src/config/readConfig.ts +4 -5
- package/src/constants.ts +5 -2
- package/src/context/__tests__/resolveReferences.test.ts +11 -6
- package/src/context/getBuildInfoVariables.ts +40 -0
- package/src/context/getEnvConfig.ts +1 -1
- package/src/context/getEnvType.ts +1 -1
- package/src/context/getEnvironment.ts +7 -30
- package/src/context/getEnvironmentContext.ts +25 -29
- package/src/context/getEnvironmentVariables.ts +72 -47
- package/src/context/getReviewSlug.ts +27 -0
- package/src/context/index.ts +26 -25
- package/src/context/resolveReferences.ts +40 -17
- package/src/context/transformJobOnlyVars.ts +6 -3
- package/src/context/utils/envVars.ts +5 -4
- package/src/deploy/base/deploy.ts +25 -23
- package/src/deploy/base/index.ts +1 -1
- package/src/deploy/base/rollback.ts +9 -11
- package/src/deploy/base/stop.ts +9 -10
- package/src/deploy/cloudRun/artifactsRegistry.ts +13 -8
- package/src/deploy/cloudRun/cleanup.ts +3 -3
- package/src/deploy/cloudRun/cloudRunRevisions.ts +3 -3
- package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +22 -17
- package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +7 -6
- package/src/deploy/cloudRun/createJobs/common.ts +1 -1
- package/src/deploy/cloudRun/createJobs/constants.ts +1 -0
- package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +25 -7
- package/src/deploy/cloudRun/createJobs/getCloudRunStopScripts.ts +1 -1
- package/src/deploy/cloudRun/createJobs/index.ts +18 -9
- package/src/deploy/cloudRun/createJobs/volumes.ts +2 -2
- package/src/deploy/cloudRun/index.ts +22 -10
- package/src/deploy/cloudRun/utils/createArgsString.ts +3 -2
- package/src/deploy/cloudRun/utils/database.ts +7 -7
- package/src/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.ts +1 -1
- package/src/deploy/cloudRun/utils/jobName.ts +7 -2
- package/src/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.ts +1 -1
- package/src/deploy/cloudSql/utils.ts +13 -10
- package/src/deploy/index.ts +5 -4
- package/src/deploy/kubernetes/cloudSql/index.ts +6 -5
- package/src/deploy/kubernetes/deployJob.ts +28 -14
- package/src/deploy/kubernetes/index.ts +15 -8
- package/src/deploy/kubernetes/kubeEnv.ts +9 -7
- package/src/deploy/kubernetes/kubeValues.ts +5 -6
- package/src/deploy/kubernetes/mongodb.ts +1 -1
- package/src/deploy/kubernetes/processSecretsAsFiles.ts +5 -4
- package/src/deploy/types/base.ts +6 -0
- package/src/deploy/types/googleCloudRun.ts +2 -0
- package/src/deploy/utils.ts +2 -2
- package/src/index.ts +2 -1
- package/src/packageInfos.ts +10 -0
- package/src/pipeline/createAllJobs.ts +28 -14
- package/src/pipeline/createChildPipeline.ts +20 -9
- package/src/pipeline/createJobsForComponent.ts +15 -23
- package/src/pipeline/createMainPipeline.ts +91 -0
- package/src/pipeline/generatePipelineFiles.ts +29 -0
- package/src/pipeline/getPipelineStages.ts +1 -1
- package/src/pipeline/gitlab/createGitlabJobs.ts +182 -59
- package/src/pipeline/gitlab/createGitlabPipeline.ts +16 -14
- package/src/pipeline/gitlab/getPipelineTriggerForGitlabChildPipeline.ts +46 -0
- package/src/pipeline/gitlab/gitlabReleaseJobs.ts +20 -0
- package/src/pipeline/index.ts +2 -0
- package/src/pipeline/packageManager.ts +2 -2
- package/src/pipeline/yarn/yarnUtils.ts +7 -7
- package/src/rules/index.ts +15 -9
- package/src/types/config.ts +12 -3
- package/src/types/context.ts +39 -26
- package/src/types/environmentContext.ts +13 -7
- package/src/types/gitlab-ci-yml.ts +0 -1
- package/src/types/gitlab-types.ts +5 -4
- package/src/types/jobs.ts +29 -4
- package/src/types/pipeline.ts +4 -0
- package/src/types/utils.ts +4 -4
- package/src/utils/gitlab.ts +1 -1
- package/src/utils/index.ts +2 -2
- package/src/utils/writeFiles.ts +40 -0
- package/dist/deploy/cloudRun/createJobs/variables.d.ts +0 -5
- package/dist/deploy/cloudRun/createJobs/variables.js +0 -19
- package/dist/pipeline/commitInfo/getBuildId.d.ts +0 -6
- package/dist/pipeline/commitInfo/getCommitInfo.d.ts +0 -2
- package/src/deploy/cloudRun/createJobs/variables.ts +0 -21
- package/src/pipeline/commitInfo/getBuildId.ts +0 -17
- 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
|
"api โฉ๏ธ 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/api",
|
|
12
|
-
"url": "
|
|
18
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
13
19
|
},
|
|
14
20
|
"image": "path/to/docker/kubernetes:the-version",
|
|
15
21
|
"interruptible": true,
|
|
@@ -23,90 +29,47 @@ 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="api"",
|
|
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="api.dev.test-app.pan.panter.cloud"",
|
|
44
|
+
"export ROOT_URL="https://api.dev.test-app.pan.panter.cloud"",
|
|
45
|
+
"export HOST_INTERNAL="api.dev.test-app.pan.panter.cloud"",
|
|
46
|
+
"export HOST_CANONICAL="api.dev.test-app.pan.panter.cloud"",
|
|
47
|
+
"export ROOT_URL_INTERNAL="https://api.dev.test-app.pan.panter.cloud"",
|
|
48
|
+
"export KUBE_NAMESPACE="pan-test-app-dev"",
|
|
49
|
+
"export KUBE_APP_NAME="api"",
|
|
50
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
51
|
+
"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\\"]"",
|
|
52
|
+
"export RELEASE_NAME="pan-test-app-dev-api"",
|
|
53
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
54
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
55
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
56
|
+
"export HELM_ARGS=""",
|
|
57
|
+
"export COMPONENT_NAME="api"",
|
|
58
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
59
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
31
60
|
"kubectl config set-cluster "kube-pan-test-app-dev-api" --server="$CL_dev_api_KUBE_URL" --certificate-authority <(echo $CL_dev_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
|
|
32
61
|
"kubectl config set-credentials "kube-pan-test-app-dev-api" --token="$CL_dev_api_KUBE_TOKEN"",
|
|
33
62
|
"kubectl config set-context "kube-pan-test-app-dev-api" --cluster="kube-pan-test-app-dev-api" --user="kube-pan-test-app-dev-api" --namespace="pan-test-app-dev"",
|
|
34
63
|
"kubectl config use-context "kube-pan-test-app-dev-api"",
|
|
35
64
|
"kubernetesRollback",
|
|
65
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
36
66
|
],
|
|
37
67
|
"stage": "rollback dev",
|
|
38
68
|
"variables": {
|
|
39
|
-
"APP_DIR": "api",
|
|
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": "api",
|
|
45
|
-
"ENV_SHORT": "dev",
|
|
46
|
-
"ENV_TYPE": "dev",
|
|
47
69
|
"GIT_STRATEGY": "none",
|
|
48
|
-
"HELM_ARGS": "",
|
|
49
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
50
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
51
|
-
"HOST": "api.dev.test-app.pan.panter.cloud",
|
|
52
|
-
"HOST_CANONICAL": "api.dev.test-app.pan.panter.cloud",
|
|
53
|
-
"HOST_INTERNAL": "api.dev.test-app.pan.panter.cloud",
|
|
54
70
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
55
71
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
56
72
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
57
|
-
"KUBE_APP_NAME": "api",
|
|
58
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
59
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
60
|
-
"KUBE_NAMESPACE": "pan-test-app-dev",
|
|
61
|
-
"KUBE_VALUES": "env:
|
|
62
|
-
secret: {}
|
|
63
|
-
public:
|
|
64
|
-
ENV_SHORT: 'dev'
|
|
65
|
-
APP_DIR: 'api'
|
|
66
|
-
ENV_TYPE: 'dev'
|
|
67
|
-
BUILD_INFO_ID: 'some-id'
|
|
68
|
-
BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
|
|
69
|
-
BUILD_INFO_CURRENT_VERSION: '3.2.1'
|
|
70
|
-
HOST: 'api.dev.test-app.pan.panter.cloud'
|
|
71
|
-
ROOT_URL: 'https://api.dev.test-app.pan.panter.cloud'
|
|
72
|
-
HOST_CANONICAL: 'api.dev.test-app.pan.panter.cloud'
|
|
73
|
-
ROOT_URL_INTERNAL: 'https://api.dev.test-app.pan.panter.cloud'
|
|
74
|
-
KUBE_NAMESPACE: 'pan-test-app-dev'
|
|
75
|
-
KUBE_APP_NAME: 'api'
|
|
76
|
-
KUBE_APP_NAME_PREFIX: ''
|
|
77
|
-
HOST_INTERNAL: 'api.dev.test-app.pan.panter.cloud'
|
|
78
|
-
_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"]'
|
|
79
|
-
application:
|
|
80
|
-
host: 'api.dev.test-app.pan.panter.cloud'
|
|
81
|
-
command: 'node main.js'
|
|
82
|
-
livenessProbe:
|
|
83
|
-
httpGet:
|
|
84
|
-
path: '__health'
|
|
85
|
-
readinessProbe:
|
|
86
|
-
httpGet:
|
|
87
|
-
path: '__health'
|
|
88
|
-
startupProbe:
|
|
89
|
-
httpGet:
|
|
90
|
-
path: '__health'
|
|
91
|
-
autoscale:
|
|
92
|
-
minReplicas: 2
|
|
93
|
-
maxReplicas: 5
|
|
94
|
-
metrics:
|
|
95
|
-
- type: 'Resource'
|
|
96
|
-
resource:
|
|
97
|
-
name: 'cpu'
|
|
98
|
-
target:
|
|
99
|
-
type: 'Utilization'
|
|
100
|
-
averageUtilization: 0.5
|
|
101
|
-
resources:
|
|
102
|
-
limits:
|
|
103
|
-
cpu: '1'
|
|
104
|
-
memory: '2048Mi'
|
|
105
|
-
",
|
|
106
|
-
"RELEASE_NAME": "pan-test-app-dev-api",
|
|
107
|
-
"ROOT_URL": "https://api.dev.test-app.pan.panter.cloud",
|
|
108
|
-
"ROOT_URL_INTERNAL": "https://api.dev.test-app.pan.panter.cloud",
|
|
109
|
-
"_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"]",
|
|
110
73
|
},
|
|
111
74
|
},
|
|
112
75
|
"api ๐ฎ lint": {
|
|
@@ -137,6 +100,9 @@ application:
|
|
|
137
100
|
],
|
|
138
101
|
},
|
|
139
102
|
"script": [
|
|
103
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
104
|
+
"export APP_PATH="api"",
|
|
105
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
140
106
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
141
107
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
142
108
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -153,7 +119,6 @@ application:
|
|
|
153
119
|
],
|
|
154
120
|
"stage": "test",
|
|
155
121
|
"variables": {
|
|
156
|
-
"APP_PATH": "api",
|
|
157
122
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
158
123
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
159
124
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
@@ -206,7 +171,24 @@ application:
|
|
|
206
171
|
],
|
|
207
172
|
},
|
|
208
173
|
"script": [
|
|
209
|
-
"echo
|
|
174
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
175
|
+
"export ENV_SHORT="dev"",
|
|
176
|
+
"export APP_DIR="api"",
|
|
177
|
+
"export ENV_TYPE="dev"",
|
|
178
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
179
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
180
|
+
"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")"",
|
|
181
|
+
"export HOST="api.dev.test-app.pan.panter.cloud"",
|
|
182
|
+
"export ROOT_URL="https://api.dev.test-app.pan.panter.cloud"",
|
|
183
|
+
"export HOST_INTERNAL="api.dev.test-app.pan.panter.cloud"",
|
|
184
|
+
"export HOST_CANONICAL="api.dev.test-app.pan.panter.cloud"",
|
|
185
|
+
"export ROOT_URL_INTERNAL="https://api.dev.test-app.pan.panter.cloud"",
|
|
186
|
+
"export KUBE_NAMESPACE="pan-test-app-dev"",
|
|
187
|
+
"export KUBE_APP_NAME="api"",
|
|
188
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
189
|
+
"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\\"]"",
|
|
190
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
191
|
+
"echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
|
|
210
192
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
211
193
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
212
194
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -223,24 +205,9 @@ application:
|
|
|
223
205
|
],
|
|
224
206
|
"stage": "build",
|
|
225
207
|
"variables": {
|
|
226
|
-
"APP_DIR": "api",
|
|
227
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
228
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
229
|
-
"BUILD_INFO_ID": "some-id",
|
|
230
|
-
"ENV_SHORT": "dev",
|
|
231
|
-
"ENV_TYPE": "dev",
|
|
232
|
-
"HOST": "api.dev.test-app.pan.panter.cloud",
|
|
233
|
-
"HOST_CANONICAL": "api.dev.test-app.pan.panter.cloud",
|
|
234
|
-
"HOST_INTERNAL": "api.dev.test-app.pan.panter.cloud",
|
|
235
208
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
236
209
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
237
210
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
238
|
-
"KUBE_APP_NAME": "api",
|
|
239
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
240
|
-
"KUBE_NAMESPACE": "pan-test-app-dev",
|
|
241
|
-
"ROOT_URL": "https://api.dev.test-app.pan.panter.cloud",
|
|
242
|
-
"ROOT_URL_INTERNAL": "https://api.dev.test-app.pan.panter.cloud",
|
|
243
|
-
"_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"]",
|
|
244
211
|
},
|
|
245
212
|
},
|
|
246
213
|
"api ๐จ docker | dev ": {
|
|
@@ -266,6 +233,22 @@ application:
|
|
|
266
233
|
],
|
|
267
234
|
},
|
|
268
235
|
"script": [
|
|
236
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
237
|
+
"export APP_DIR="api"",
|
|
238
|
+
"export DOCKER_DIR="."",
|
|
239
|
+
"export DOCKER_REGISTRY="$CI_REGISTRY"",
|
|
240
|
+
"export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
|
|
241
|
+
"export DOCKER_IMAGE_NAME="dev/api"",
|
|
242
|
+
"export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
|
|
243
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
244
|
+
"export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
|
|
245
|
+
RUN yarn plugin import workspace-tools
|
|
246
|
+
RUN yarn workspaces focus --production && yarn rebuild"",
|
|
247
|
+
"export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
|
|
248
|
+
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
249
|
+
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
250
|
+
COPY --chown=node:node .yarn /app/.yarn"",
|
|
251
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
269
252
|
"ensureNodeDockerfile",
|
|
270
253
|
"echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
|
|
271
254
|
"docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
|
|
@@ -289,25 +272,9 @@ application:
|
|
|
289
272
|
],
|
|
290
273
|
"stage": "build",
|
|
291
274
|
"variables": {
|
|
292
|
-
"APP_DIR": "api",
|
|
293
|
-
"DOCKERFILE_ADDITIONS": undefined,
|
|
294
|
-
"DOCKERFILE_ADDITIONS_END": undefined,
|
|
295
275
|
"DOCKER_BUILDKIT": "1",
|
|
296
|
-
"DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
|
|
297
|
-
"DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
|
|
298
|
-
RUN yarn plugin import workspace-tools
|
|
299
|
-
RUN yarn workspaces focus --production && yarn rebuild",
|
|
300
|
-
"DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
|
|
301
|
-
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
302
|
-
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
303
|
-
COPY --chown=node:node .yarn /app/.yarn",
|
|
304
|
-
"DOCKER_DIR": ".",
|
|
305
276
|
"DOCKER_DRIVER": "overlay2",
|
|
306
277
|
"DOCKER_HOST": "tcp://0.0.0.0:2375",
|
|
307
|
-
"DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
|
|
308
|
-
"DOCKER_IMAGE_NAME": "dev/api",
|
|
309
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
310
|
-
"DOCKER_REGISTRY": "$CI_REGISTRY",
|
|
311
278
|
"DOCKER_TLS_CERTDIR": "",
|
|
312
279
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
313
280
|
"KUBERNETES_MEMORY_LIMIT": "2Gi",
|
|
@@ -316,11 +283,16 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
316
283
|
},
|
|
317
284
|
"api ๐ Deploy | dev ": {
|
|
318
285
|
"allow_failure": false,
|
|
286
|
+
"artifacts": {
|
|
287
|
+
"reports": {
|
|
288
|
+
"dotenv": "gitlab_environment.env",
|
|
289
|
+
},
|
|
290
|
+
},
|
|
319
291
|
"environment": {
|
|
320
292
|
"auto_stop_in": "4 weeks",
|
|
321
293
|
"name": "dev/api",
|
|
322
294
|
"on_stop": "api ๐ Stop โ ๏ธ | dev ",
|
|
323
|
-
"url": "
|
|
295
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
324
296
|
},
|
|
325
297
|
"image": "path/to/docker/kubernetes:the-version",
|
|
326
298
|
"interruptible": true,
|
|
@@ -363,100 +335,138 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
363
335
|
},
|
|
364
336
|
],
|
|
365
337
|
"script": [
|
|
338
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
339
|
+
"export ENV_SHORT="dev"",
|
|
340
|
+
"export APP_DIR="api"",
|
|
341
|
+
"export ENV_TYPE="dev"",
|
|
342
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
343
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
344
|
+
"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")"",
|
|
345
|
+
"export HOST="api.dev.test-app.pan.panter.cloud"",
|
|
346
|
+
"export ROOT_URL="https://api.dev.test-app.pan.panter.cloud"",
|
|
347
|
+
"export HOST_INTERNAL="api.dev.test-app.pan.panter.cloud"",
|
|
348
|
+
"export HOST_CANONICAL="api.dev.test-app.pan.panter.cloud"",
|
|
349
|
+
"export ROOT_URL_INTERNAL="https://api.dev.test-app.pan.panter.cloud"",
|
|
350
|
+
"export KUBE_NAMESPACE="pan-test-app-dev"",
|
|
351
|
+
"export KUBE_APP_NAME="api"",
|
|
352
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
353
|
+
"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\\"]"",
|
|
354
|
+
"export DOCKER_REGISTRY="$CI_REGISTRY"",
|
|
355
|
+
"export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
|
|
356
|
+
"export DOCKER_IMAGE_NAME="dev/api"",
|
|
357
|
+
"export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
|
|
358
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
359
|
+
"export RELEASE_NAME="pan-test-app-dev-api"",
|
|
360
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
361
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
362
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
363
|
+
"export HELM_ARGS=""",
|
|
364
|
+
"export COMPONENT_NAME="api"",
|
|
365
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
366
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
366
367
|
"kubectl config set-cluster "kube-pan-test-app-dev-api" --server="$CL_dev_api_KUBE_URL" --certificate-authority <(echo $CL_dev_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
|
|
367
368
|
"kubectl config set-credentials "kube-pan-test-app-dev-api" --token="$CL_dev_api_KUBE_TOKEN"",
|
|
368
369
|
"kubectl config set-context "kube-pan-test-app-dev-api" --cluster="kube-pan-test-app-dev-api" --user="kube-pan-test-app-dev-api" --namespace="pan-test-app-dev"",
|
|
369
370
|
"kubectl config use-context "kube-pan-test-app-dev-api"",
|
|
370
|
-
"
|
|
371
|
-
"
|
|
372
|
-
|
|
373
|
-
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://api.dev.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
|
|
374
|
-
"echo deployment successful ๐ป",
|
|
375
|
-
],
|
|
376
|
-
"stage": "deploy dev",
|
|
377
|
-
"variables": {
|
|
378
|
-
"APP_DIR": "api",
|
|
379
|
-
"BUILD_ID": "some-id",
|
|
380
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
381
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
382
|
-
"BUILD_INFO_ID": "some-id",
|
|
383
|
-
"COMPONENT_NAME": "api",
|
|
384
|
-
"DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
|
|
385
|
-
"DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
|
|
386
|
-
"DOCKER_IMAGE_NAME": "dev/api",
|
|
387
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
388
|
-
"DOCKER_REGISTRY": "$CI_REGISTRY",
|
|
389
|
-
"ENV_SHORT": "dev",
|
|
390
|
-
"ENV_TYPE": "dev",
|
|
391
|
-
"HELM_ARGS": "",
|
|
392
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
393
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
394
|
-
"HOST": "api.dev.test-app.pan.panter.cloud",
|
|
395
|
-
"HOST_CANONICAL": "api.dev.test-app.pan.panter.cloud",
|
|
396
|
-
"HOST_INTERNAL": "api.dev.test-app.pan.panter.cloud",
|
|
397
|
-
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
398
|
-
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
399
|
-
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
400
|
-
"KUBE_APP_NAME": "api",
|
|
401
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
402
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
403
|
-
"KUBE_NAMESPACE": "pan-test-app-dev",
|
|
404
|
-
"KUBE_VALUES": "env:
|
|
371
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
|
|
372
|
+
"cat > __all_values.yml <<EOF
|
|
373
|
+
env:
|
|
405
374
|
secret: {}
|
|
406
375
|
public:
|
|
407
|
-
ENV_SHORT:
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
376
|
+
ENV_SHORT: |-
|
|
377
|
+
dev
|
|
378
|
+
APP_DIR: |-
|
|
379
|
+
api
|
|
380
|
+
ENV_TYPE: |-
|
|
381
|
+
dev
|
|
382
|
+
BUILD_INFO_BUILD_ID: |-
|
|
383
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
|
|
384
|
+
BUILD_INFO_BUILD_TIME: |-
|
|
385
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
|
|
386
|
+
BUILD_INFO_CURRENT_VERSION: |-
|
|
387
|
+
$(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/^/ /')
|
|
388
|
+
HOST: |-
|
|
389
|
+
api.dev.test-app.pan.panter.cloud
|
|
390
|
+
ROOT_URL: |-
|
|
391
|
+
https://api.dev.test-app.pan.panter.cloud
|
|
392
|
+
HOST_INTERNAL: |-
|
|
393
|
+
api.dev.test-app.pan.panter.cloud
|
|
394
|
+
HOST_CANONICAL: |-
|
|
395
|
+
api.dev.test-app.pan.panter.cloud
|
|
396
|
+
ROOT_URL_INTERNAL: |-
|
|
397
|
+
https://api.dev.test-app.pan.panter.cloud
|
|
398
|
+
KUBE_NAMESPACE: |-
|
|
399
|
+
pan-test-app-dev
|
|
400
|
+
KUBE_APP_NAME: |-
|
|
401
|
+
api
|
|
402
|
+
KUBE_APP_NAME_PREFIX: ""
|
|
403
|
+
_ALL_ENV_VAR_KEYS: |-
|
|
404
|
+
["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"]
|
|
422
405
|
application:
|
|
423
|
-
host:
|
|
424
|
-
|
|
406
|
+
host: |-
|
|
407
|
+
api.dev.test-app.pan.panter.cloud
|
|
408
|
+
command: |-
|
|
409
|
+
node main.js
|
|
425
410
|
livenessProbe:
|
|
426
411
|
httpGet:
|
|
427
|
-
path:
|
|
412
|
+
path: |-
|
|
413
|
+
__health
|
|
428
414
|
readinessProbe:
|
|
429
415
|
httpGet:
|
|
430
|
-
path:
|
|
416
|
+
path: |-
|
|
417
|
+
__health
|
|
431
418
|
startupProbe:
|
|
432
419
|
httpGet:
|
|
433
|
-
path:
|
|
420
|
+
path: |-
|
|
421
|
+
__health
|
|
434
422
|
autoscale:
|
|
435
423
|
minReplicas: 2
|
|
436
424
|
maxReplicas: 5
|
|
437
425
|
metrics:
|
|
438
|
-
- type:
|
|
426
|
+
- type: |-
|
|
427
|
+
Resource
|
|
439
428
|
resource:
|
|
440
|
-
name:
|
|
429
|
+
name: |-
|
|
430
|
+
cpu
|
|
441
431
|
target:
|
|
442
|
-
type:
|
|
432
|
+
type: |-
|
|
433
|
+
Utilization
|
|
443
434
|
averageUtilization: 0.5
|
|
444
435
|
resources:
|
|
445
436
|
limits:
|
|
446
|
-
cpu:
|
|
447
|
-
|
|
437
|
+
cpu: |-
|
|
438
|
+
1
|
|
439
|
+
memory: |-
|
|
440
|
+
2048Mi
|
|
441
|
+
|
|
442
|
+
EOF
|
|
448
443
|
",
|
|
449
|
-
"
|
|
450
|
-
"
|
|
451
|
-
"
|
|
452
|
-
"
|
|
444
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
|
|
445
|
+
"kubernetesCreateSecret",
|
|
446
|
+
"kubernetesDeploy",
|
|
447
|
+
"echo Uploading SBOM to Dependency Track",
|
|
448
|
+
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://api.dev.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
|
|
449
|
+
"echo deployment successful ๐ป",
|
|
450
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
451
|
+
],
|
|
452
|
+
"stage": "deploy dev",
|
|
453
|
+
"variables": {
|
|
454
|
+
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
455
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
456
|
+
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
453
457
|
},
|
|
454
458
|
},
|
|
455
459
|
"api ๐ Stop โ ๏ธ | dev ": {
|
|
460
|
+
"allow_failure": true,
|
|
461
|
+
"artifacts": {
|
|
462
|
+
"reports": {
|
|
463
|
+
"dotenv": "gitlab_environment.env",
|
|
464
|
+
},
|
|
465
|
+
},
|
|
456
466
|
"environment": {
|
|
457
467
|
"action": "stop",
|
|
458
468
|
"name": "dev/api",
|
|
459
|
-
"url": "
|
|
469
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
460
470
|
},
|
|
461
471
|
"image": "path/to/docker/kubernetes:the-version",
|
|
462
472
|
"interruptible": true,
|
|
@@ -470,16 +480,38 @@ application:
|
|
|
470
480
|
},
|
|
471
481
|
"rules": [
|
|
472
482
|
{
|
|
473
|
-
"allow_failure": true,
|
|
474
483
|
"if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
|
|
475
484
|
"when": "on_success",
|
|
476
485
|
},
|
|
477
486
|
{
|
|
478
|
-
"allow_failure": true,
|
|
479
487
|
"when": "manual",
|
|
480
488
|
},
|
|
481
489
|
],
|
|
482
490
|
"script": [
|
|
491
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
492
|
+
"export ENV_SHORT="dev"",
|
|
493
|
+
"export APP_DIR="api"",
|
|
494
|
+
"export ENV_TYPE="dev"",
|
|
495
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
496
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
497
|
+
"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")"",
|
|
498
|
+
"export HOST="api.dev.test-app.pan.panter.cloud"",
|
|
499
|
+
"export ROOT_URL="https://api.dev.test-app.pan.panter.cloud"",
|
|
500
|
+
"export HOST_INTERNAL="api.dev.test-app.pan.panter.cloud"",
|
|
501
|
+
"export HOST_CANONICAL="api.dev.test-app.pan.panter.cloud"",
|
|
502
|
+
"export ROOT_URL_INTERNAL="https://api.dev.test-app.pan.panter.cloud"",
|
|
503
|
+
"export KUBE_NAMESPACE="pan-test-app-dev"",
|
|
504
|
+
"export KUBE_APP_NAME="api"",
|
|
505
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
506
|
+
"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\\"]"",
|
|
507
|
+
"export RELEASE_NAME="pan-test-app-dev-api"",
|
|
508
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
509
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
510
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
511
|
+
"export HELM_ARGS=""",
|
|
512
|
+
"export COMPONENT_NAME="api"",
|
|
513
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
514
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
483
515
|
"kubectl config set-cluster "kube-pan-test-app-dev-api" --server="$CL_dev_api_KUBE_URL" --certificate-authority <(echo $CL_dev_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
|
|
484
516
|
"kubectl config set-credentials "kube-pan-test-app-dev-api" --token="$CL_dev_api_KUBE_TOKEN"",
|
|
485
517
|
"kubectl config set-context "kube-pan-test-app-dev-api" --cluster="kube-pan-test-app-dev-api" --user="kube-pan-test-app-dev-api" --namespace="pan-test-app-dev"",
|
|
@@ -487,80 +519,14 @@ application:
|
|
|
487
519
|
"kubernetesDelete",
|
|
488
520
|
"echo Disabling component in Dependency Track",
|
|
489
521
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.dev.test-app.pan.panter.cloud" || true",
|
|
522
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
490
523
|
],
|
|
491
524
|
"stage": "stop dev",
|
|
492
525
|
"variables": {
|
|
493
|
-
"APP_DIR": "api",
|
|
494
|
-
"BUILD_ID": "some-id",
|
|
495
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
496
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
497
|
-
"BUILD_INFO_ID": "some-id",
|
|
498
|
-
"COMPONENT_NAME": "api",
|
|
499
|
-
"ENV_SHORT": "dev",
|
|
500
|
-
"ENV_TYPE": "dev",
|
|
501
526
|
"GIT_STRATEGY": "none",
|
|
502
|
-
"HELM_ARGS": "",
|
|
503
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
504
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
505
|
-
"HOST": "api.dev.test-app.pan.panter.cloud",
|
|
506
|
-
"HOST_CANONICAL": "api.dev.test-app.pan.panter.cloud",
|
|
507
|
-
"HOST_INTERNAL": "api.dev.test-app.pan.panter.cloud",
|
|
508
527
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
509
528
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
510
529
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
511
|
-
"KUBE_APP_NAME": "api",
|
|
512
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
513
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
514
|
-
"KUBE_NAMESPACE": "pan-test-app-dev",
|
|
515
|
-
"KUBE_VALUES": "env:
|
|
516
|
-
secret: {}
|
|
517
|
-
public:
|
|
518
|
-
ENV_SHORT: 'dev'
|
|
519
|
-
APP_DIR: 'api'
|
|
520
|
-
ENV_TYPE: 'dev'
|
|
521
|
-
BUILD_INFO_ID: 'some-id'
|
|
522
|
-
BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
|
|
523
|
-
BUILD_INFO_CURRENT_VERSION: '3.2.1'
|
|
524
|
-
HOST: 'api.dev.test-app.pan.panter.cloud'
|
|
525
|
-
ROOT_URL: 'https://api.dev.test-app.pan.panter.cloud'
|
|
526
|
-
HOST_CANONICAL: 'api.dev.test-app.pan.panter.cloud'
|
|
527
|
-
ROOT_URL_INTERNAL: 'https://api.dev.test-app.pan.panter.cloud'
|
|
528
|
-
KUBE_NAMESPACE: 'pan-test-app-dev'
|
|
529
|
-
KUBE_APP_NAME: 'api'
|
|
530
|
-
KUBE_APP_NAME_PREFIX: ''
|
|
531
|
-
HOST_INTERNAL: 'api.dev.test-app.pan.panter.cloud'
|
|
532
|
-
_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"]'
|
|
533
|
-
application:
|
|
534
|
-
host: 'api.dev.test-app.pan.panter.cloud'
|
|
535
|
-
command: 'node main.js'
|
|
536
|
-
livenessProbe:
|
|
537
|
-
httpGet:
|
|
538
|
-
path: '__health'
|
|
539
|
-
readinessProbe:
|
|
540
|
-
httpGet:
|
|
541
|
-
path: '__health'
|
|
542
|
-
startupProbe:
|
|
543
|
-
httpGet:
|
|
544
|
-
path: '__health'
|
|
545
|
-
autoscale:
|
|
546
|
-
minReplicas: 2
|
|
547
|
-
maxReplicas: 5
|
|
548
|
-
metrics:
|
|
549
|
-
- type: 'Resource'
|
|
550
|
-
resource:
|
|
551
|
-
name: 'cpu'
|
|
552
|
-
target:
|
|
553
|
-
type: 'Utilization'
|
|
554
|
-
averageUtilization: 0.5
|
|
555
|
-
resources:
|
|
556
|
-
limits:
|
|
557
|
-
cpu: '1'
|
|
558
|
-
memory: '2048Mi'
|
|
559
|
-
",
|
|
560
|
-
"RELEASE_NAME": "pan-test-app-dev-api",
|
|
561
|
-
"ROOT_URL": "https://api.dev.test-app.pan.panter.cloud",
|
|
562
|
-
"ROOT_URL_INTERNAL": "https://api.dev.test-app.pan.panter.cloud",
|
|
563
|
-
"_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"]",
|
|
564
530
|
},
|
|
565
531
|
},
|
|
566
532
|
"api ๐ก audit": {
|
|
@@ -576,12 +542,14 @@ application:
|
|
|
576
542
|
],
|
|
577
543
|
},
|
|
578
544
|
"script": [
|
|
545
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
546
|
+
"export APP_PATH="api"",
|
|
547
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
579
548
|
"cd api",
|
|
580
549
|
"yarn npm audit --environment production",
|
|
581
550
|
],
|
|
582
551
|
"stage": "test",
|
|
583
552
|
"variables": {
|
|
584
|
-
"APP_PATH": "api",
|
|
585
553
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
586
554
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
587
555
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
@@ -615,6 +583,9 @@ application:
|
|
|
615
583
|
],
|
|
616
584
|
},
|
|
617
585
|
"script": [
|
|
586
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
587
|
+
"export APP_PATH="api"",
|
|
588
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
618
589
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
619
590
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
620
591
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -631,7 +602,6 @@ application:
|
|
|
631
602
|
],
|
|
632
603
|
"stage": "test",
|
|
633
604
|
"variables": {
|
|
634
|
-
"APP_PATH": "api",
|
|
635
605
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
636
606
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
637
607
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
@@ -655,6 +625,8 @@ application:
|
|
|
655
625
|
],
|
|
656
626
|
},
|
|
657
627
|
"script": [
|
|
628
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
629
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
658
630
|
"trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
|
|
659
631
|
],
|
|
660
632
|
"stage": "build",
|
|
@@ -707,7 +679,7 @@ application:
|
|
|
707
679
|
],
|
|
708
680
|
"variables": {
|
|
709
681
|
"FF_USE_FASTZIP": "true",
|
|
710
|
-
"GIT_DEPTH": 1,
|
|
682
|
+
"GIT_DEPTH": "1",
|
|
711
683
|
},
|
|
712
684
|
"workflow": {
|
|
713
685
|
"rules": [
|
|
@@ -738,10 +710,16 @@ application:
|
|
|
738
710
|
"image": "path/to/docker/jobs-default:the-version",
|
|
739
711
|
"jobs": {
|
|
740
712
|
"api โฉ๏ธ Rollback โ ๏ธ | review ": {
|
|
713
|
+
"allow_failure": true,
|
|
714
|
+
"artifacts": {
|
|
715
|
+
"reports": {
|
|
716
|
+
"dotenv": "gitlab_environment.env",
|
|
717
|
+
},
|
|
718
|
+
},
|
|
741
719
|
"environment": {
|
|
742
720
|
"action": "access",
|
|
743
|
-
"name": "review/
|
|
744
|
-
"url": "
|
|
721
|
+
"name": "review/$CI_COMMIT_REF_NAME/api",
|
|
722
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
745
723
|
},
|
|
746
724
|
"image": "path/to/docker/kubernetes:the-version",
|
|
747
725
|
"interruptible": true,
|
|
@@ -755,90 +733,47 @@ application:
|
|
|
755
733
|
},
|
|
756
734
|
"rules": [
|
|
757
735
|
{
|
|
758
|
-
"allow_failure": true,
|
|
759
736
|
"when": "manual",
|
|
760
737
|
},
|
|
761
738
|
],
|
|
762
739
|
"script": [
|
|
763
|
-
"
|
|
764
|
-
"
|
|
765
|
-
"
|
|
766
|
-
"
|
|
740
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
741
|
+
"export ENV_SHORT="review"",
|
|
742
|
+
"export APP_DIR="api"",
|
|
743
|
+
"export ENV_TYPE="review"",
|
|
744
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
745
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
746
|
+
"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")"",
|
|
747
|
+
"export HOST="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
|
|
748
|
+
"export ROOT_URL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
|
|
749
|
+
"export HOST_INTERNAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
|
|
750
|
+
"export HOST_CANONICAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
|
|
751
|
+
"export ROOT_URL_INTERNAL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
|
|
752
|
+
"export KUBE_NAMESPACE="pan-test-app-review"",
|
|
753
|
+
"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"; })-api"",
|
|
754
|
+
"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"; })-"",
|
|
755
|
+
"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\\"]"",
|
|
756
|
+
"export RELEASE_NAME="pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
|
|
757
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
758
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
759
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
760
|
+
"export HELM_ARGS=""",
|
|
761
|
+
"export COMPONENT_NAME="api"",
|
|
762
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
763
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
764
|
+
"kubectl config set-cluster "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --server="$CL_review_api_KUBE_URL" --certificate-authority <(echo $CL_review_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
|
|
765
|
+
"kubectl config set-credentials "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --token="$CL_review_api_KUBE_TOKEN"",
|
|
766
|
+
"kubectl config set-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --cluster="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --user="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --namespace="pan-test-app-review"",
|
|
767
|
+
"kubectl config use-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
|
|
767
768
|
"kubernetesRollback",
|
|
769
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
768
770
|
],
|
|
769
771
|
"stage": "rollback review",
|
|
770
772
|
"variables": {
|
|
771
|
-
"APP_DIR": "api",
|
|
772
|
-
"BUILD_ID": "some-id",
|
|
773
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
774
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
775
|
-
"BUILD_INFO_ID": "some-id",
|
|
776
|
-
"COMPONENT_NAME": "api",
|
|
777
|
-
"ENV_SHORT": "review",
|
|
778
|
-
"ENV_TYPE": "review",
|
|
779
773
|
"GIT_STRATEGY": "none",
|
|
780
|
-
"HELM_ARGS": "",
|
|
781
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
782
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
783
|
-
"HOST": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
784
|
-
"HOST_CANONICAL": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
785
|
-
"HOST_INTERNAL": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
786
774
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
787
775
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
788
776
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
789
|
-
"KUBE_APP_NAME": "mr1234-api",
|
|
790
|
-
"KUBE_APP_NAME_PREFIX": "mr1234-",
|
|
791
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
792
|
-
"KUBE_NAMESPACE": "pan-test-app-review",
|
|
793
|
-
"KUBE_VALUES": "env:
|
|
794
|
-
secret: {}
|
|
795
|
-
public:
|
|
796
|
-
ENV_SHORT: 'review'
|
|
797
|
-
APP_DIR: 'api'
|
|
798
|
-
ENV_TYPE: 'review'
|
|
799
|
-
BUILD_INFO_ID: 'some-id'
|
|
800
|
-
BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
|
|
801
|
-
BUILD_INFO_CURRENT_VERSION: '3.2.1'
|
|
802
|
-
HOST: 'api.mr1234.review.test-app.pan.panter.cloud'
|
|
803
|
-
ROOT_URL: 'https://api.mr1234.review.test-app.pan.panter.cloud'
|
|
804
|
-
HOST_CANONICAL: 'api.mr1234.review.test-app.pan.panter.cloud'
|
|
805
|
-
ROOT_URL_INTERNAL: 'https://api.mr1234.review.test-app.pan.panter.cloud'
|
|
806
|
-
KUBE_NAMESPACE: 'pan-test-app-review'
|
|
807
|
-
KUBE_APP_NAME: 'mr1234-api'
|
|
808
|
-
KUBE_APP_NAME_PREFIX: 'mr1234-'
|
|
809
|
-
HOST_INTERNAL: 'api.mr1234.review.test-app.pan.panter.cloud'
|
|
810
|
-
_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"]'
|
|
811
|
-
application:
|
|
812
|
-
host: 'api.mr1234.review.test-app.pan.panter.cloud'
|
|
813
|
-
command: 'node main.js'
|
|
814
|
-
livenessProbe:
|
|
815
|
-
httpGet:
|
|
816
|
-
path: '__health'
|
|
817
|
-
readinessProbe:
|
|
818
|
-
httpGet:
|
|
819
|
-
path: '__health'
|
|
820
|
-
startupProbe:
|
|
821
|
-
httpGet:
|
|
822
|
-
path: '__health'
|
|
823
|
-
autoscale:
|
|
824
|
-
minReplicas: 2
|
|
825
|
-
maxReplicas: 5
|
|
826
|
-
metrics:
|
|
827
|
-
- type: 'Resource'
|
|
828
|
-
resource:
|
|
829
|
-
name: 'cpu'
|
|
830
|
-
target:
|
|
831
|
-
type: 'Utilization'
|
|
832
|
-
averageUtilization: 0.5
|
|
833
|
-
resources:
|
|
834
|
-
limits:
|
|
835
|
-
cpu: '1'
|
|
836
|
-
memory: '2048Mi'
|
|
837
|
-
",
|
|
838
|
-
"RELEASE_NAME": "pan-test-app-review-mr1234-api",
|
|
839
|
-
"ROOT_URL": "https://api.mr1234.review.test-app.pan.panter.cloud",
|
|
840
|
-
"ROOT_URL_INTERNAL": "https://api.mr1234.review.test-app.pan.panter.cloud",
|
|
841
|
-
"_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"]",
|
|
842
777
|
},
|
|
843
778
|
},
|
|
844
779
|
"api ๐ฎ lint": {
|
|
@@ -869,6 +804,9 @@ application:
|
|
|
869
804
|
],
|
|
870
805
|
},
|
|
871
806
|
"script": [
|
|
807
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
808
|
+
"export APP_PATH="api"",
|
|
809
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
872
810
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
873
811
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
874
812
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -885,7 +823,6 @@ application:
|
|
|
885
823
|
],
|
|
886
824
|
"stage": "test",
|
|
887
825
|
"variables": {
|
|
888
|
-
"APP_PATH": "api",
|
|
889
826
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
890
827
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
891
828
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
@@ -938,7 +875,24 @@ application:
|
|
|
938
875
|
],
|
|
939
876
|
},
|
|
940
877
|
"script": [
|
|
941
|
-
"echo
|
|
878
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
879
|
+
"export ENV_SHORT="review"",
|
|
880
|
+
"export APP_DIR="api"",
|
|
881
|
+
"export ENV_TYPE="review"",
|
|
882
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
883
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
884
|
+
"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")"",
|
|
885
|
+
"export HOST="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
|
|
886
|
+
"export ROOT_URL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
|
|
887
|
+
"export HOST_INTERNAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
|
|
888
|
+
"export HOST_CANONICAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
|
|
889
|
+
"export ROOT_URL_INTERNAL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
|
|
890
|
+
"export KUBE_NAMESPACE="pan-test-app-review"",
|
|
891
|
+
"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"; })-api"",
|
|
892
|
+
"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"; })-"",
|
|
893
|
+
"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\\"]"",
|
|
894
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
895
|
+
"echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
|
|
942
896
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
943
897
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
944
898
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -955,24 +909,9 @@ application:
|
|
|
955
909
|
],
|
|
956
910
|
"stage": "build",
|
|
957
911
|
"variables": {
|
|
958
|
-
"APP_DIR": "api",
|
|
959
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
960
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
961
|
-
"BUILD_INFO_ID": "some-id",
|
|
962
|
-
"ENV_SHORT": "review",
|
|
963
|
-
"ENV_TYPE": "review",
|
|
964
|
-
"HOST": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
965
|
-
"HOST_CANONICAL": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
966
|
-
"HOST_INTERNAL": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
967
912
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
968
913
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
969
914
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
970
|
-
"KUBE_APP_NAME": "mr1234-api",
|
|
971
|
-
"KUBE_APP_NAME_PREFIX": "mr1234-",
|
|
972
|
-
"KUBE_NAMESPACE": "pan-test-app-review",
|
|
973
|
-
"ROOT_URL": "https://api.mr1234.review.test-app.pan.panter.cloud",
|
|
974
|
-
"ROOT_URL_INTERNAL": "https://api.mr1234.review.test-app.pan.panter.cloud",
|
|
975
|
-
"_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"]",
|
|
976
915
|
},
|
|
977
916
|
},
|
|
978
917
|
"api ๐จ docker | review ": {
|
|
@@ -998,6 +937,22 @@ application:
|
|
|
998
937
|
],
|
|
999
938
|
},
|
|
1000
939
|
"script": [
|
|
940
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
941
|
+
"export APP_DIR="api"",
|
|
942
|
+
"export DOCKER_DIR="."",
|
|
943
|
+
"export DOCKER_REGISTRY="$CI_REGISTRY"",
|
|
944
|
+
"export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
|
|
945
|
+
"export DOCKER_IMAGE_NAME="review/api"",
|
|
946
|
+
"export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
|
|
947
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
948
|
+
"export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
|
|
949
|
+
RUN yarn plugin import workspace-tools
|
|
950
|
+
RUN yarn workspaces focus --production && yarn rebuild"",
|
|
951
|
+
"export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
|
|
952
|
+
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
953
|
+
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
954
|
+
COPY --chown=node:node .yarn /app/.yarn"",
|
|
955
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1001
956
|
"ensureNodeDockerfile",
|
|
1002
957
|
"echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
|
|
1003
958
|
"docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
|
|
@@ -1021,25 +976,9 @@ application:
|
|
|
1021
976
|
],
|
|
1022
977
|
"stage": "build",
|
|
1023
978
|
"variables": {
|
|
1024
|
-
"APP_DIR": "api",
|
|
1025
|
-
"DOCKERFILE_ADDITIONS": undefined,
|
|
1026
|
-
"DOCKERFILE_ADDITIONS_END": undefined,
|
|
1027
979
|
"DOCKER_BUILDKIT": "1",
|
|
1028
|
-
"DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
|
|
1029
|
-
"DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
|
|
1030
|
-
RUN yarn plugin import workspace-tools
|
|
1031
|
-
RUN yarn workspaces focus --production && yarn rebuild",
|
|
1032
|
-
"DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
|
|
1033
|
-
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1034
|
-
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1035
|
-
COPY --chown=node:node .yarn /app/.yarn",
|
|
1036
|
-
"DOCKER_DIR": ".",
|
|
1037
980
|
"DOCKER_DRIVER": "overlay2",
|
|
1038
981
|
"DOCKER_HOST": "tcp://0.0.0.0:2375",
|
|
1039
|
-
"DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
|
|
1040
|
-
"DOCKER_IMAGE_NAME": "review/api",
|
|
1041
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
1042
|
-
"DOCKER_REGISTRY": "$CI_REGISTRY",
|
|
1043
982
|
"DOCKER_TLS_CERTDIR": "",
|
|
1044
983
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1045
984
|
"KUBERNETES_MEMORY_LIMIT": "2Gi",
|
|
@@ -1048,11 +987,16 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1048
987
|
},
|
|
1049
988
|
"api ๐ Deploy | review ": {
|
|
1050
989
|
"allow_failure": false,
|
|
990
|
+
"artifacts": {
|
|
991
|
+
"reports": {
|
|
992
|
+
"dotenv": "gitlab_environment.env",
|
|
993
|
+
},
|
|
994
|
+
},
|
|
1051
995
|
"environment": {
|
|
1052
996
|
"auto_stop_in": "1 week",
|
|
1053
|
-
"name": "review/
|
|
997
|
+
"name": "review/$CI_COMMIT_REF_NAME/api",
|
|
1054
998
|
"on_stop": "api ๐ Stop โ ๏ธ | review ",
|
|
1055
|
-
"url": "
|
|
999
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
1056
1000
|
},
|
|
1057
1001
|
"image": "path/to/docker/kubernetes:the-version",
|
|
1058
1002
|
"interruptible": true,
|
|
@@ -1095,100 +1039,139 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1095
1039
|
},
|
|
1096
1040
|
],
|
|
1097
1041
|
"script": [
|
|
1098
|
-
"
|
|
1099
|
-
"
|
|
1100
|
-
"
|
|
1101
|
-
"
|
|
1102
|
-
"
|
|
1103
|
-
"
|
|
1104
|
-
"
|
|
1105
|
-
"
|
|
1106
|
-
"echo
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
"
|
|
1111
|
-
"
|
|
1112
|
-
"
|
|
1113
|
-
"BUILD_INFO_CURRENT_VERSION"
|
|
1114
|
-
"
|
|
1115
|
-
"
|
|
1116
|
-
"
|
|
1117
|
-
"DOCKER_IMAGE"
|
|
1118
|
-
"
|
|
1119
|
-
"
|
|
1120
|
-
"
|
|
1121
|
-
"
|
|
1122
|
-
"
|
|
1123
|
-
"HELM_ARGS"
|
|
1124
|
-
"
|
|
1125
|
-
"
|
|
1126
|
-
"
|
|
1127
|
-
"
|
|
1128
|
-
"
|
|
1129
|
-
"
|
|
1130
|
-
"
|
|
1131
|
-
"
|
|
1132
|
-
"
|
|
1133
|
-
|
|
1134
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
1135
|
-
"KUBE_NAMESPACE": "pan-test-app-review",
|
|
1136
|
-
"KUBE_VALUES": "env:
|
|
1042
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1043
|
+
"export ENV_SHORT="review"",
|
|
1044
|
+
"export APP_DIR="api"",
|
|
1045
|
+
"export ENV_TYPE="review"",
|
|
1046
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1047
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
1048
|
+
"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")"",
|
|
1049
|
+
"export HOST="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
|
|
1050
|
+
"export ROOT_URL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
|
|
1051
|
+
"export HOST_INTERNAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
|
|
1052
|
+
"export HOST_CANONICAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
|
|
1053
|
+
"export ROOT_URL_INTERNAL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
|
|
1054
|
+
"export KUBE_NAMESPACE="pan-test-app-review"",
|
|
1055
|
+
"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"; })-api"",
|
|
1056
|
+
"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"; })-"",
|
|
1057
|
+
"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\\"]"",
|
|
1058
|
+
"export DOCKER_REGISTRY="$CI_REGISTRY"",
|
|
1059
|
+
"export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
|
|
1060
|
+
"export DOCKER_IMAGE_NAME="review/api"",
|
|
1061
|
+
"export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
|
|
1062
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
1063
|
+
"export RELEASE_NAME="pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
|
|
1064
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
1065
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
1066
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
1067
|
+
"export HELM_ARGS=""",
|
|
1068
|
+
"export COMPONENT_NAME="api"",
|
|
1069
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1070
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1071
|
+
"kubectl config set-cluster "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --server="$CL_review_api_KUBE_URL" --certificate-authority <(echo $CL_review_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
|
|
1072
|
+
"kubectl config set-credentials "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --token="$CL_review_api_KUBE_TOKEN"",
|
|
1073
|
+
"kubectl config set-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --cluster="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --user="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --namespace="pan-test-app-review"",
|
|
1074
|
+
"kubectl config use-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
|
|
1075
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
|
|
1076
|
+
"cat > __all_values.yml <<EOF
|
|
1077
|
+
env:
|
|
1137
1078
|
secret: {}
|
|
1138
1079
|
public:
|
|
1139
|
-
ENV_SHORT:
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1080
|
+
ENV_SHORT: |-
|
|
1081
|
+
review
|
|
1082
|
+
APP_DIR: |-
|
|
1083
|
+
api
|
|
1084
|
+
ENV_TYPE: |-
|
|
1085
|
+
review
|
|
1086
|
+
BUILD_INFO_BUILD_ID: |-
|
|
1087
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
|
|
1088
|
+
BUILD_INFO_BUILD_TIME: |-
|
|
1089
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
|
|
1090
|
+
BUILD_INFO_CURRENT_VERSION: |-
|
|
1091
|
+
$(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/^/ /')
|
|
1092
|
+
HOST: |-
|
|
1093
|
+
$(printf %s "api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
|
|
1094
|
+
ROOT_URL: |-
|
|
1095
|
+
$(printf %s "https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
|
|
1096
|
+
HOST_INTERNAL: |-
|
|
1097
|
+
$(printf %s "api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
|
|
1098
|
+
HOST_CANONICAL: |-
|
|
1099
|
+
$(printf %s "api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
|
|
1100
|
+
ROOT_URL_INTERNAL: |-
|
|
1101
|
+
$(printf %s "https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
|
|
1102
|
+
KUBE_NAMESPACE: |-
|
|
1103
|
+
pan-test-app-review
|
|
1104
|
+
KUBE_APP_NAME: |-
|
|
1105
|
+
$(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"; })-api" | sed 's/^/ /')
|
|
1106
|
+
KUBE_APP_NAME_PREFIX: |-
|
|
1107
|
+
$(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/^/ /')
|
|
1108
|
+
_ALL_ENV_VAR_KEYS: |-
|
|
1109
|
+
["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"]
|
|
1154
1110
|
application:
|
|
1155
|
-
host:
|
|
1156
|
-
|
|
1111
|
+
host: |-
|
|
1112
|
+
$(printf %s "api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
|
|
1113
|
+
command: |-
|
|
1114
|
+
node main.js
|
|
1157
1115
|
livenessProbe:
|
|
1158
1116
|
httpGet:
|
|
1159
|
-
path:
|
|
1117
|
+
path: |-
|
|
1118
|
+
__health
|
|
1160
1119
|
readinessProbe:
|
|
1161
1120
|
httpGet:
|
|
1162
|
-
path:
|
|
1121
|
+
path: |-
|
|
1122
|
+
__health
|
|
1163
1123
|
startupProbe:
|
|
1164
1124
|
httpGet:
|
|
1165
|
-
path:
|
|
1125
|
+
path: |-
|
|
1126
|
+
__health
|
|
1166
1127
|
autoscale:
|
|
1167
1128
|
minReplicas: 2
|
|
1168
1129
|
maxReplicas: 5
|
|
1169
1130
|
metrics:
|
|
1170
|
-
- type:
|
|
1131
|
+
- type: |-
|
|
1132
|
+
Resource
|
|
1171
1133
|
resource:
|
|
1172
|
-
name:
|
|
1134
|
+
name: |-
|
|
1135
|
+
cpu
|
|
1173
1136
|
target:
|
|
1174
|
-
type:
|
|
1137
|
+
type: |-
|
|
1138
|
+
Utilization
|
|
1175
1139
|
averageUtilization: 0.5
|
|
1176
1140
|
resources:
|
|
1177
1141
|
limits:
|
|
1178
|
-
cpu:
|
|
1179
|
-
|
|
1142
|
+
cpu: |-
|
|
1143
|
+
1
|
|
1144
|
+
memory: |-
|
|
1145
|
+
2048Mi
|
|
1146
|
+
|
|
1147
|
+
EOF
|
|
1180
1148
|
",
|
|
1181
|
-
"
|
|
1182
|
-
"
|
|
1183
|
-
"
|
|
1184
|
-
"
|
|
1149
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
|
|
1150
|
+
"kubernetesCreateSecret",
|
|
1151
|
+
"kubernetesDeploy",
|
|
1152
|
+
"echo Uploading SBOM to Dependency Track",
|
|
1153
|
+
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
|
|
1154
|
+
"echo deployment successful ๐ป",
|
|
1155
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
1156
|
+
],
|
|
1157
|
+
"stage": "deploy review",
|
|
1158
|
+
"variables": {
|
|
1159
|
+
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1160
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1161
|
+
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1185
1162
|
},
|
|
1186
1163
|
},
|
|
1187
1164
|
"api ๐ Stop โ ๏ธ | review ": {
|
|
1165
|
+
"allow_failure": true,
|
|
1166
|
+
"artifacts": {
|
|
1167
|
+
"reports": {
|
|
1168
|
+
"dotenv": "gitlab_environment.env",
|
|
1169
|
+
},
|
|
1170
|
+
},
|
|
1188
1171
|
"environment": {
|
|
1189
1172
|
"action": "stop",
|
|
1190
|
-
"name": "review/
|
|
1191
|
-
"url": "
|
|
1173
|
+
"name": "review/$CI_COMMIT_REF_NAME/api",
|
|
1174
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
1192
1175
|
},
|
|
1193
1176
|
"image": "path/to/docker/kubernetes:the-version",
|
|
1194
1177
|
"interruptible": true,
|
|
@@ -1202,97 +1185,53 @@ application:
|
|
|
1202
1185
|
},
|
|
1203
1186
|
"rules": [
|
|
1204
1187
|
{
|
|
1205
|
-
"allow_failure": true,
|
|
1206
1188
|
"if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
|
|
1207
1189
|
"when": "on_success",
|
|
1208
1190
|
},
|
|
1209
1191
|
{
|
|
1210
|
-
"allow_failure": true,
|
|
1211
1192
|
"when": "manual",
|
|
1212
1193
|
},
|
|
1213
1194
|
],
|
|
1214
1195
|
"script": [
|
|
1215
|
-
"
|
|
1216
|
-
"
|
|
1217
|
-
"
|
|
1218
|
-
"
|
|
1196
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1197
|
+
"export ENV_SHORT="review"",
|
|
1198
|
+
"export APP_DIR="api"",
|
|
1199
|
+
"export ENV_TYPE="review"",
|
|
1200
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1201
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
1202
|
+
"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")"",
|
|
1203
|
+
"export HOST="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
|
|
1204
|
+
"export ROOT_URL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
|
|
1205
|
+
"export HOST_INTERNAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
|
|
1206
|
+
"export HOST_CANONICAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
|
|
1207
|
+
"export ROOT_URL_INTERNAL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
|
|
1208
|
+
"export KUBE_NAMESPACE="pan-test-app-review"",
|
|
1209
|
+
"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"; })-api"",
|
|
1210
|
+
"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"; })-"",
|
|
1211
|
+
"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\\"]"",
|
|
1212
|
+
"export RELEASE_NAME="pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
|
|
1213
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
1214
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
1215
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
1216
|
+
"export HELM_ARGS=""",
|
|
1217
|
+
"export COMPONENT_NAME="api"",
|
|
1218
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1219
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1220
|
+
"kubectl config set-cluster "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --server="$CL_review_api_KUBE_URL" --certificate-authority <(echo $CL_review_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
|
|
1221
|
+
"kubectl config set-credentials "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --token="$CL_review_api_KUBE_TOKEN"",
|
|
1222
|
+
"kubectl config set-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --cluster="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --user="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --namespace="pan-test-app-review"",
|
|
1223
|
+
"kubectl config use-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
|
|
1219
1224
|
"kubernetesDelete",
|
|
1220
1225
|
"echo Disabling component in Dependency Track",
|
|
1221
|
-
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.
|
|
1226
|
+
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" || true",
|
|
1227
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
1222
1228
|
],
|
|
1223
1229
|
"stage": "stop review",
|
|
1224
1230
|
"variables": {
|
|
1225
|
-
"APP_DIR": "api",
|
|
1226
|
-
"BUILD_ID": "some-id",
|
|
1227
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
1228
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
1229
|
-
"BUILD_INFO_ID": "some-id",
|
|
1230
|
-
"COMPONENT_NAME": "api",
|
|
1231
|
-
"ENV_SHORT": "review",
|
|
1232
|
-
"ENV_TYPE": "review",
|
|
1233
1231
|
"GIT_STRATEGY": "none",
|
|
1234
|
-
"HELM_ARGS": "",
|
|
1235
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
1236
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
1237
|
-
"HOST": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
1238
|
-
"HOST_CANONICAL": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
1239
|
-
"HOST_INTERNAL": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
1240
1232
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1241
1233
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1242
1234
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1243
|
-
"KUBE_APP_NAME": "mr1234-api",
|
|
1244
|
-
"KUBE_APP_NAME_PREFIX": "mr1234-",
|
|
1245
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
1246
|
-
"KUBE_NAMESPACE": "pan-test-app-review",
|
|
1247
|
-
"KUBE_VALUES": "env:
|
|
1248
|
-
secret: {}
|
|
1249
|
-
public:
|
|
1250
|
-
ENV_SHORT: 'review'
|
|
1251
|
-
APP_DIR: 'api'
|
|
1252
|
-
ENV_TYPE: 'review'
|
|
1253
|
-
BUILD_INFO_ID: 'some-id'
|
|
1254
|
-
BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
|
|
1255
|
-
BUILD_INFO_CURRENT_VERSION: '3.2.1'
|
|
1256
|
-
HOST: 'api.mr1234.review.test-app.pan.panter.cloud'
|
|
1257
|
-
ROOT_URL: 'https://api.mr1234.review.test-app.pan.panter.cloud'
|
|
1258
|
-
HOST_CANONICAL: 'api.mr1234.review.test-app.pan.panter.cloud'
|
|
1259
|
-
ROOT_URL_INTERNAL: 'https://api.mr1234.review.test-app.pan.panter.cloud'
|
|
1260
|
-
KUBE_NAMESPACE: 'pan-test-app-review'
|
|
1261
|
-
KUBE_APP_NAME: 'mr1234-api'
|
|
1262
|
-
KUBE_APP_NAME_PREFIX: 'mr1234-'
|
|
1263
|
-
HOST_INTERNAL: 'api.mr1234.review.test-app.pan.panter.cloud'
|
|
1264
|
-
_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"]'
|
|
1265
|
-
application:
|
|
1266
|
-
host: 'api.mr1234.review.test-app.pan.panter.cloud'
|
|
1267
|
-
command: 'node main.js'
|
|
1268
|
-
livenessProbe:
|
|
1269
|
-
httpGet:
|
|
1270
|
-
path: '__health'
|
|
1271
|
-
readinessProbe:
|
|
1272
|
-
httpGet:
|
|
1273
|
-
path: '__health'
|
|
1274
|
-
startupProbe:
|
|
1275
|
-
httpGet:
|
|
1276
|
-
path: '__health'
|
|
1277
|
-
autoscale:
|
|
1278
|
-
minReplicas: 2
|
|
1279
|
-
maxReplicas: 5
|
|
1280
|
-
metrics:
|
|
1281
|
-
- type: 'Resource'
|
|
1282
|
-
resource:
|
|
1283
|
-
name: 'cpu'
|
|
1284
|
-
target:
|
|
1285
|
-
type: 'Utilization'
|
|
1286
|
-
averageUtilization: 0.5
|
|
1287
|
-
resources:
|
|
1288
|
-
limits:
|
|
1289
|
-
cpu: '1'
|
|
1290
|
-
memory: '2048Mi'
|
|
1291
|
-
",
|
|
1292
|
-
"RELEASE_NAME": "pan-test-app-review-mr1234-api",
|
|
1293
|
-
"ROOT_URL": "https://api.mr1234.review.test-app.pan.panter.cloud",
|
|
1294
|
-
"ROOT_URL_INTERNAL": "https://api.mr1234.review.test-app.pan.panter.cloud",
|
|
1295
|
-
"_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"]",
|
|
1296
1235
|
},
|
|
1297
1236
|
},
|
|
1298
1237
|
"api ๐ก audit": {
|
|
@@ -1308,12 +1247,14 @@ application:
|
|
|
1308
1247
|
],
|
|
1309
1248
|
},
|
|
1310
1249
|
"script": [
|
|
1250
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1251
|
+
"export APP_PATH="api"",
|
|
1252
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1311
1253
|
"cd api",
|
|
1312
1254
|
"yarn npm audit --environment production",
|
|
1313
1255
|
],
|
|
1314
1256
|
"stage": "test",
|
|
1315
1257
|
"variables": {
|
|
1316
|
-
"APP_PATH": "api",
|
|
1317
1258
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1318
1259
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
1319
1260
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
@@ -1347,6 +1288,9 @@ application:
|
|
|
1347
1288
|
],
|
|
1348
1289
|
},
|
|
1349
1290
|
"script": [
|
|
1291
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1292
|
+
"export APP_PATH="api"",
|
|
1293
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1350
1294
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
1351
1295
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
1352
1296
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -1363,7 +1307,6 @@ application:
|
|
|
1363
1307
|
],
|
|
1364
1308
|
"stage": "test",
|
|
1365
1309
|
"variables": {
|
|
1366
|
-
"APP_PATH": "api",
|
|
1367
1310
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1368
1311
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
1369
1312
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
@@ -1387,6 +1330,8 @@ application:
|
|
|
1387
1330
|
],
|
|
1388
1331
|
},
|
|
1389
1332
|
"script": [
|
|
1333
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1334
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1390
1335
|
"trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
|
|
1391
1336
|
],
|
|
1392
1337
|
"stage": "build",
|
|
@@ -1439,7 +1384,7 @@ application:
|
|
|
1439
1384
|
],
|
|
1440
1385
|
"variables": {
|
|
1441
1386
|
"FF_USE_FASTZIP": "true",
|
|
1442
|
-
"GIT_DEPTH": 1,
|
|
1387
|
+
"GIT_DEPTH": "1",
|
|
1443
1388
|
},
|
|
1444
1389
|
"workflow": {
|
|
1445
1390
|
"rules": [
|
|
@@ -1470,10 +1415,16 @@ application:
|
|
|
1470
1415
|
"image": "path/to/docker/jobs-default:the-version",
|
|
1471
1416
|
"jobs": {
|
|
1472
1417
|
"api โฉ๏ธ Rollback โ ๏ธ | prod ": {
|
|
1418
|
+
"allow_failure": true,
|
|
1419
|
+
"artifacts": {
|
|
1420
|
+
"reports": {
|
|
1421
|
+
"dotenv": "gitlab_environment.env",
|
|
1422
|
+
},
|
|
1423
|
+
},
|
|
1473
1424
|
"environment": {
|
|
1474
1425
|
"action": "access",
|
|
1475
1426
|
"name": "prod/api",
|
|
1476
|
-
"url": "
|
|
1427
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
1477
1428
|
},
|
|
1478
1429
|
"image": "path/to/docker/kubernetes:the-version",
|
|
1479
1430
|
"interruptible": true,
|
|
@@ -1487,97 +1438,60 @@ application:
|
|
|
1487
1438
|
},
|
|
1488
1439
|
"rules": [
|
|
1489
1440
|
{
|
|
1490
|
-
"allow_failure": true,
|
|
1491
1441
|
"when": "manual",
|
|
1492
1442
|
},
|
|
1493
1443
|
],
|
|
1494
1444
|
"script": [
|
|
1445
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1446
|
+
"export ENV_SHORT="prod"",
|
|
1447
|
+
"export APP_DIR="api"",
|
|
1448
|
+
"export ENV_TYPE="prod"",
|
|
1449
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1450
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
1451
|
+
"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")"",
|
|
1452
|
+
"export HOST="api.prod.test-app.pan.panter.cloud"",
|
|
1453
|
+
"export ROOT_URL="https://api.prod.test-app.pan.panter.cloud"",
|
|
1454
|
+
"export HOST_INTERNAL="api.prod.test-app.pan.panter.cloud"",
|
|
1455
|
+
"export HOST_CANONICAL="api.prod.test-app.pan.panter.cloud"",
|
|
1456
|
+
"export ROOT_URL_INTERNAL="https://api.prod.test-app.pan.panter.cloud"",
|
|
1457
|
+
"export KUBE_NAMESPACE="pan-test-app-prod"",
|
|
1458
|
+
"export KUBE_APP_NAME="api"",
|
|
1459
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
1460
|
+
"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\\"]"",
|
|
1461
|
+
"export RELEASE_NAME="pan-test-app-prod-api"",
|
|
1462
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
1463
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
1464
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
1465
|
+
"export HELM_ARGS=""",
|
|
1466
|
+
"export COMPONENT_NAME="api"",
|
|
1467
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1468
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1495
1469
|
"kubectl config set-cluster "kube-pan-test-app-prod-api" --server="$CL_prod_api_KUBE_URL" --certificate-authority <(echo $CL_prod_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
|
|
1496
1470
|
"kubectl config set-credentials "kube-pan-test-app-prod-api" --token="$CL_prod_api_KUBE_TOKEN"",
|
|
1497
1471
|
"kubectl config set-context "kube-pan-test-app-prod-api" --cluster="kube-pan-test-app-prod-api" --user="kube-pan-test-app-prod-api" --namespace="pan-test-app-prod"",
|
|
1498
1472
|
"kubectl config use-context "kube-pan-test-app-prod-api"",
|
|
1499
1473
|
"kubernetesRollback",
|
|
1474
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.prod.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
1500
1475
|
],
|
|
1501
1476
|
"stage": "rollback prod",
|
|
1502
1477
|
"variables": {
|
|
1503
|
-
"APP_DIR": "api",
|
|
1504
|
-
"BUILD_ID": "some-id",
|
|
1505
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
1506
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
1507
|
-
"BUILD_INFO_ID": "some-id",
|
|
1508
|
-
"COMPONENT_NAME": "api",
|
|
1509
|
-
"ENV_SHORT": "prod",
|
|
1510
|
-
"ENV_TYPE": "prod",
|
|
1511
1478
|
"GIT_STRATEGY": "none",
|
|
1512
|
-
"HELM_ARGS": "",
|
|
1513
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
1514
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
1515
|
-
"HOST": "api.prod.test-app.pan.panter.cloud",
|
|
1516
|
-
"HOST_CANONICAL": "api.prod.test-app.pan.panter.cloud",
|
|
1517
|
-
"HOST_INTERNAL": "api.prod.test-app.pan.panter.cloud",
|
|
1518
1479
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1519
1480
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1520
1481
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1521
|
-
"KUBE_APP_NAME": "api",
|
|
1522
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
1523
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
1524
|
-
"KUBE_NAMESPACE": "pan-test-app-prod",
|
|
1525
|
-
"KUBE_VALUES": "env:
|
|
1526
|
-
secret: {}
|
|
1527
|
-
public:
|
|
1528
|
-
ENV_SHORT: 'prod'
|
|
1529
|
-
APP_DIR: 'api'
|
|
1530
|
-
ENV_TYPE: 'prod'
|
|
1531
|
-
BUILD_INFO_ID: 'some-id'
|
|
1532
|
-
BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
|
|
1533
|
-
BUILD_INFO_CURRENT_VERSION: '3.2.1'
|
|
1534
|
-
HOST: 'api.prod.test-app.pan.panter.cloud'
|
|
1535
|
-
ROOT_URL: 'https://api.prod.test-app.pan.panter.cloud'
|
|
1536
|
-
HOST_CANONICAL: 'api.prod.test-app.pan.panter.cloud'
|
|
1537
|
-
ROOT_URL_INTERNAL: 'https://api.prod.test-app.pan.panter.cloud'
|
|
1538
|
-
KUBE_NAMESPACE: 'pan-test-app-prod'
|
|
1539
|
-
KUBE_APP_NAME: 'api'
|
|
1540
|
-
KUBE_APP_NAME_PREFIX: ''
|
|
1541
|
-
HOST_INTERNAL: 'api.prod.test-app.pan.panter.cloud'
|
|
1542
|
-
_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"]'
|
|
1543
|
-
application:
|
|
1544
|
-
host: 'api.prod.test-app.pan.panter.cloud'
|
|
1545
|
-
command: 'node main.js'
|
|
1546
|
-
livenessProbe:
|
|
1547
|
-
httpGet:
|
|
1548
|
-
path: '__health'
|
|
1549
|
-
readinessProbe:
|
|
1550
|
-
httpGet:
|
|
1551
|
-
path: '__health'
|
|
1552
|
-
startupProbe:
|
|
1553
|
-
httpGet:
|
|
1554
|
-
path: '__health'
|
|
1555
|
-
autoscale:
|
|
1556
|
-
minReplicas: 2
|
|
1557
|
-
maxReplicas: 5
|
|
1558
|
-
metrics:
|
|
1559
|
-
- type: 'Resource'
|
|
1560
|
-
resource:
|
|
1561
|
-
name: 'cpu'
|
|
1562
|
-
target:
|
|
1563
|
-
type: 'Utilization'
|
|
1564
|
-
averageUtilization: 0.5
|
|
1565
|
-
resources:
|
|
1566
|
-
limits:
|
|
1567
|
-
cpu: '1'
|
|
1568
|
-
memory: '2048Mi'
|
|
1569
|
-
",
|
|
1570
|
-
"RELEASE_NAME": "pan-test-app-prod-api",
|
|
1571
|
-
"ROOT_URL": "https://api.prod.test-app.pan.panter.cloud",
|
|
1572
|
-
"ROOT_URL_INTERNAL": "https://api.prod.test-app.pan.panter.cloud",
|
|
1573
|
-
"_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"]",
|
|
1574
1482
|
},
|
|
1575
1483
|
},
|
|
1576
1484
|
"api โฉ๏ธ Rollback โ ๏ธ | stage ": {
|
|
1485
|
+
"allow_failure": true,
|
|
1486
|
+
"artifacts": {
|
|
1487
|
+
"reports": {
|
|
1488
|
+
"dotenv": "gitlab_environment.env",
|
|
1489
|
+
},
|
|
1490
|
+
},
|
|
1577
1491
|
"environment": {
|
|
1578
1492
|
"action": "access",
|
|
1579
1493
|
"name": "stage/api",
|
|
1580
|
-
"url": "
|
|
1494
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
1581
1495
|
},
|
|
1582
1496
|
"image": "path/to/docker/kubernetes:the-version",
|
|
1583
1497
|
"interruptible": true,
|
|
@@ -1591,90 +1505,47 @@ application:
|
|
|
1591
1505
|
},
|
|
1592
1506
|
"rules": [
|
|
1593
1507
|
{
|
|
1594
|
-
"allow_failure": true,
|
|
1595
1508
|
"when": "manual",
|
|
1596
1509
|
},
|
|
1597
1510
|
],
|
|
1598
1511
|
"script": [
|
|
1512
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1513
|
+
"export ENV_SHORT="stage"",
|
|
1514
|
+
"export APP_DIR="api"",
|
|
1515
|
+
"export ENV_TYPE="stage"",
|
|
1516
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1517
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
1518
|
+
"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")"",
|
|
1519
|
+
"export HOST="api.stage.test-app.pan.panter.cloud"",
|
|
1520
|
+
"export ROOT_URL="https://api.stage.test-app.pan.panter.cloud"",
|
|
1521
|
+
"export HOST_INTERNAL="api.stage.test-app.pan.panter.cloud"",
|
|
1522
|
+
"export HOST_CANONICAL="api.stage.test-app.pan.panter.cloud"",
|
|
1523
|
+
"export ROOT_URL_INTERNAL="https://api.stage.test-app.pan.panter.cloud"",
|
|
1524
|
+
"export KUBE_NAMESPACE="pan-test-app-stage"",
|
|
1525
|
+
"export KUBE_APP_NAME="api"",
|
|
1526
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
1527
|
+
"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\\"]"",
|
|
1528
|
+
"export RELEASE_NAME="pan-test-app-stage-api"",
|
|
1529
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
1530
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
1531
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
1532
|
+
"export HELM_ARGS=""",
|
|
1533
|
+
"export COMPONENT_NAME="api"",
|
|
1534
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1535
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1599
1536
|
"kubectl config set-cluster "kube-pan-test-app-stage-api" --server="$CL_stage_api_KUBE_URL" --certificate-authority <(echo $CL_stage_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
|
|
1600
1537
|
"kubectl config set-credentials "kube-pan-test-app-stage-api" --token="$CL_stage_api_KUBE_TOKEN"",
|
|
1601
1538
|
"kubectl config set-context "kube-pan-test-app-stage-api" --cluster="kube-pan-test-app-stage-api" --user="kube-pan-test-app-stage-api" --namespace="pan-test-app-stage"",
|
|
1602
1539
|
"kubectl config use-context "kube-pan-test-app-stage-api"",
|
|
1603
1540
|
"kubernetesRollback",
|
|
1541
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
1604
1542
|
],
|
|
1605
1543
|
"stage": "rollback stage",
|
|
1606
1544
|
"variables": {
|
|
1607
|
-
"APP_DIR": "api",
|
|
1608
|
-
"BUILD_ID": "some-id",
|
|
1609
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
1610
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
1611
|
-
"BUILD_INFO_ID": "some-id",
|
|
1612
|
-
"COMPONENT_NAME": "api",
|
|
1613
|
-
"ENV_SHORT": "stage",
|
|
1614
|
-
"ENV_TYPE": "stage",
|
|
1615
1545
|
"GIT_STRATEGY": "none",
|
|
1616
|
-
"HELM_ARGS": "",
|
|
1617
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
1618
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
1619
|
-
"HOST": "api.stage.test-app.pan.panter.cloud",
|
|
1620
|
-
"HOST_CANONICAL": "api.stage.test-app.pan.panter.cloud",
|
|
1621
|
-
"HOST_INTERNAL": "api.stage.test-app.pan.panter.cloud",
|
|
1622
1546
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1623
1547
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1624
1548
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1625
|
-
"KUBE_APP_NAME": "api",
|
|
1626
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
1627
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
1628
|
-
"KUBE_NAMESPACE": "pan-test-app-stage",
|
|
1629
|
-
"KUBE_VALUES": "env:
|
|
1630
|
-
secret: {}
|
|
1631
|
-
public:
|
|
1632
|
-
ENV_SHORT: 'stage'
|
|
1633
|
-
APP_DIR: 'api'
|
|
1634
|
-
ENV_TYPE: 'stage'
|
|
1635
|
-
BUILD_INFO_ID: 'some-id'
|
|
1636
|
-
BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
|
|
1637
|
-
BUILD_INFO_CURRENT_VERSION: '3.2.1'
|
|
1638
|
-
HOST: 'api.stage.test-app.pan.panter.cloud'
|
|
1639
|
-
ROOT_URL: 'https://api.stage.test-app.pan.panter.cloud'
|
|
1640
|
-
HOST_CANONICAL: 'api.stage.test-app.pan.panter.cloud'
|
|
1641
|
-
ROOT_URL_INTERNAL: 'https://api.stage.test-app.pan.panter.cloud'
|
|
1642
|
-
KUBE_NAMESPACE: 'pan-test-app-stage'
|
|
1643
|
-
KUBE_APP_NAME: 'api'
|
|
1644
|
-
KUBE_APP_NAME_PREFIX: ''
|
|
1645
|
-
HOST_INTERNAL: 'api.stage.test-app.pan.panter.cloud'
|
|
1646
|
-
_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"]'
|
|
1647
|
-
application:
|
|
1648
|
-
host: 'api.stage.test-app.pan.panter.cloud'
|
|
1649
|
-
command: 'node main.js'
|
|
1650
|
-
livenessProbe:
|
|
1651
|
-
httpGet:
|
|
1652
|
-
path: '__health'
|
|
1653
|
-
readinessProbe:
|
|
1654
|
-
httpGet:
|
|
1655
|
-
path: '__health'
|
|
1656
|
-
startupProbe:
|
|
1657
|
-
httpGet:
|
|
1658
|
-
path: '__health'
|
|
1659
|
-
autoscale:
|
|
1660
|
-
minReplicas: 2
|
|
1661
|
-
maxReplicas: 5
|
|
1662
|
-
metrics:
|
|
1663
|
-
- type: 'Resource'
|
|
1664
|
-
resource:
|
|
1665
|
-
name: 'cpu'
|
|
1666
|
-
target:
|
|
1667
|
-
type: 'Utilization'
|
|
1668
|
-
averageUtilization: 0.5
|
|
1669
|
-
resources:
|
|
1670
|
-
limits:
|
|
1671
|
-
cpu: '1'
|
|
1672
|
-
memory: '2048Mi'
|
|
1673
|
-
",
|
|
1674
|
-
"RELEASE_NAME": "pan-test-app-stage-api",
|
|
1675
|
-
"ROOT_URL": "https://api.stage.test-app.pan.panter.cloud",
|
|
1676
|
-
"ROOT_URL_INTERNAL": "https://api.stage.test-app.pan.panter.cloud",
|
|
1677
|
-
"_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"]",
|
|
1678
1549
|
},
|
|
1679
1550
|
},
|
|
1680
1551
|
"api ๐จ app | prod ": {
|
|
@@ -1724,7 +1595,24 @@ application:
|
|
|
1724
1595
|
],
|
|
1725
1596
|
},
|
|
1726
1597
|
"script": [
|
|
1727
|
-
"echo
|
|
1598
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1599
|
+
"export ENV_SHORT="prod"",
|
|
1600
|
+
"export APP_DIR="api"",
|
|
1601
|
+
"export ENV_TYPE="prod"",
|
|
1602
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1603
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
1604
|
+
"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")"",
|
|
1605
|
+
"export HOST="api.prod.test-app.pan.panter.cloud"",
|
|
1606
|
+
"export ROOT_URL="https://api.prod.test-app.pan.panter.cloud"",
|
|
1607
|
+
"export HOST_INTERNAL="api.prod.test-app.pan.panter.cloud"",
|
|
1608
|
+
"export HOST_CANONICAL="api.prod.test-app.pan.panter.cloud"",
|
|
1609
|
+
"export ROOT_URL_INTERNAL="https://api.prod.test-app.pan.panter.cloud"",
|
|
1610
|
+
"export KUBE_NAMESPACE="pan-test-app-prod"",
|
|
1611
|
+
"export KUBE_APP_NAME="api"",
|
|
1612
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
1613
|
+
"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\\"]"",
|
|
1614
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1615
|
+
"echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
|
|
1728
1616
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
1729
1617
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
1730
1618
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -1741,24 +1629,9 @@ application:
|
|
|
1741
1629
|
],
|
|
1742
1630
|
"stage": "build",
|
|
1743
1631
|
"variables": {
|
|
1744
|
-
"APP_DIR": "api",
|
|
1745
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
1746
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
1747
|
-
"BUILD_INFO_ID": "some-id",
|
|
1748
|
-
"ENV_SHORT": "prod",
|
|
1749
|
-
"ENV_TYPE": "prod",
|
|
1750
|
-
"HOST": "api.prod.test-app.pan.panter.cloud",
|
|
1751
|
-
"HOST_CANONICAL": "api.prod.test-app.pan.panter.cloud",
|
|
1752
|
-
"HOST_INTERNAL": "api.prod.test-app.pan.panter.cloud",
|
|
1753
1632
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1754
1633
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
1755
1634
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
1756
|
-
"KUBE_APP_NAME": "api",
|
|
1757
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
1758
|
-
"KUBE_NAMESPACE": "pan-test-app-prod",
|
|
1759
|
-
"ROOT_URL": "https://api.prod.test-app.pan.panter.cloud",
|
|
1760
|
-
"ROOT_URL_INTERNAL": "https://api.prod.test-app.pan.panter.cloud",
|
|
1761
|
-
"_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"]",
|
|
1762
1635
|
},
|
|
1763
1636
|
},
|
|
1764
1637
|
"api ๐จ app | stage ": {
|
|
@@ -1808,7 +1681,24 @@ application:
|
|
|
1808
1681
|
],
|
|
1809
1682
|
},
|
|
1810
1683
|
"script": [
|
|
1811
|
-
"echo
|
|
1684
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1685
|
+
"export ENV_SHORT="stage"",
|
|
1686
|
+
"export APP_DIR="api"",
|
|
1687
|
+
"export ENV_TYPE="stage"",
|
|
1688
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1689
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
1690
|
+
"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")"",
|
|
1691
|
+
"export HOST="api.stage.test-app.pan.panter.cloud"",
|
|
1692
|
+
"export ROOT_URL="https://api.stage.test-app.pan.panter.cloud"",
|
|
1693
|
+
"export HOST_INTERNAL="api.stage.test-app.pan.panter.cloud"",
|
|
1694
|
+
"export HOST_CANONICAL="api.stage.test-app.pan.panter.cloud"",
|
|
1695
|
+
"export ROOT_URL_INTERNAL="https://api.stage.test-app.pan.panter.cloud"",
|
|
1696
|
+
"export KUBE_NAMESPACE="pan-test-app-stage"",
|
|
1697
|
+
"export KUBE_APP_NAME="api"",
|
|
1698
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
1699
|
+
"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\\"]"",
|
|
1700
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1701
|
+
"echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
|
|
1812
1702
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
1813
1703
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
1814
1704
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -1825,24 +1715,9 @@ application:
|
|
|
1825
1715
|
],
|
|
1826
1716
|
"stage": "build",
|
|
1827
1717
|
"variables": {
|
|
1828
|
-
"APP_DIR": "api",
|
|
1829
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
1830
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
1831
|
-
"BUILD_INFO_ID": "some-id",
|
|
1832
|
-
"ENV_SHORT": "stage",
|
|
1833
|
-
"ENV_TYPE": "stage",
|
|
1834
|
-
"HOST": "api.stage.test-app.pan.panter.cloud",
|
|
1835
|
-
"HOST_CANONICAL": "api.stage.test-app.pan.panter.cloud",
|
|
1836
|
-
"HOST_INTERNAL": "api.stage.test-app.pan.panter.cloud",
|
|
1837
1718
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1838
1719
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
1839
1720
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
1840
|
-
"KUBE_APP_NAME": "api",
|
|
1841
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
1842
|
-
"KUBE_NAMESPACE": "pan-test-app-stage",
|
|
1843
|
-
"ROOT_URL": "https://api.stage.test-app.pan.panter.cloud",
|
|
1844
|
-
"ROOT_URL_INTERNAL": "https://api.stage.test-app.pan.panter.cloud",
|
|
1845
|
-
"_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"]",
|
|
1846
1721
|
},
|
|
1847
1722
|
},
|
|
1848
1723
|
"api ๐จ docker | prod ": {
|
|
@@ -1868,6 +1743,22 @@ application:
|
|
|
1868
1743
|
],
|
|
1869
1744
|
},
|
|
1870
1745
|
"script": [
|
|
1746
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1747
|
+
"export APP_DIR="api"",
|
|
1748
|
+
"export DOCKER_DIR="."",
|
|
1749
|
+
"export DOCKER_REGISTRY="$CI_REGISTRY"",
|
|
1750
|
+
"export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
|
|
1751
|
+
"export DOCKER_IMAGE_NAME="prod/api"",
|
|
1752
|
+
"export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
|
|
1753
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
1754
|
+
"export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
|
|
1755
|
+
RUN yarn plugin import workspace-tools
|
|
1756
|
+
RUN yarn workspaces focus --production && yarn rebuild"",
|
|
1757
|
+
"export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
|
|
1758
|
+
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1759
|
+
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1760
|
+
COPY --chown=node:node .yarn /app/.yarn"",
|
|
1761
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1871
1762
|
"ensureNodeDockerfile",
|
|
1872
1763
|
"echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
|
|
1873
1764
|
"docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
|
|
@@ -1891,25 +1782,9 @@ application:
|
|
|
1891
1782
|
],
|
|
1892
1783
|
"stage": "build",
|
|
1893
1784
|
"variables": {
|
|
1894
|
-
"APP_DIR": "api",
|
|
1895
|
-
"DOCKERFILE_ADDITIONS": undefined,
|
|
1896
|
-
"DOCKERFILE_ADDITIONS_END": undefined,
|
|
1897
1785
|
"DOCKER_BUILDKIT": "1",
|
|
1898
|
-
"DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
|
|
1899
|
-
"DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
|
|
1900
|
-
RUN yarn plugin import workspace-tools
|
|
1901
|
-
RUN yarn workspaces focus --production && yarn rebuild",
|
|
1902
|
-
"DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
|
|
1903
|
-
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1904
|
-
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1905
|
-
COPY --chown=node:node .yarn /app/.yarn",
|
|
1906
|
-
"DOCKER_DIR": ".",
|
|
1907
1786
|
"DOCKER_DRIVER": "overlay2",
|
|
1908
1787
|
"DOCKER_HOST": "tcp://0.0.0.0:2375",
|
|
1909
|
-
"DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
|
|
1910
|
-
"DOCKER_IMAGE_NAME": "prod/api",
|
|
1911
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
1912
|
-
"DOCKER_REGISTRY": "$CI_REGISTRY",
|
|
1913
1788
|
"DOCKER_TLS_CERTDIR": "",
|
|
1914
1789
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1915
1790
|
"KUBERNETES_MEMORY_LIMIT": "2Gi",
|
|
@@ -1939,6 +1814,22 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1939
1814
|
],
|
|
1940
1815
|
},
|
|
1941
1816
|
"script": [
|
|
1817
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1818
|
+
"export APP_DIR="api"",
|
|
1819
|
+
"export DOCKER_DIR="."",
|
|
1820
|
+
"export DOCKER_REGISTRY="$CI_REGISTRY"",
|
|
1821
|
+
"export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
|
|
1822
|
+
"export DOCKER_IMAGE_NAME="stage/api"",
|
|
1823
|
+
"export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
|
|
1824
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
1825
|
+
"export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
|
|
1826
|
+
RUN yarn plugin import workspace-tools
|
|
1827
|
+
RUN yarn workspaces focus --production && yarn rebuild"",
|
|
1828
|
+
"export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
|
|
1829
|
+
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1830
|
+
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1831
|
+
COPY --chown=node:node .yarn /app/.yarn"",
|
|
1832
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1942
1833
|
"ensureNodeDockerfile",
|
|
1943
1834
|
"echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
|
|
1944
1835
|
"docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
|
|
@@ -1962,25 +1853,9 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1962
1853
|
],
|
|
1963
1854
|
"stage": "build",
|
|
1964
1855
|
"variables": {
|
|
1965
|
-
"APP_DIR": "api",
|
|
1966
|
-
"DOCKERFILE_ADDITIONS": undefined,
|
|
1967
|
-
"DOCKERFILE_ADDITIONS_END": undefined,
|
|
1968
1856
|
"DOCKER_BUILDKIT": "1",
|
|
1969
|
-
"DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
|
|
1970
|
-
"DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
|
|
1971
|
-
RUN yarn plugin import workspace-tools
|
|
1972
|
-
RUN yarn workspaces focus --production && yarn rebuild",
|
|
1973
|
-
"DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
|
|
1974
|
-
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1975
|
-
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1976
|
-
COPY --chown=node:node .yarn /app/.yarn",
|
|
1977
|
-
"DOCKER_DIR": ".",
|
|
1978
1857
|
"DOCKER_DRIVER": "overlay2",
|
|
1979
1858
|
"DOCKER_HOST": "tcp://0.0.0.0:2375",
|
|
1980
|
-
"DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
|
|
1981
|
-
"DOCKER_IMAGE_NAME": "stage/api",
|
|
1982
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
1983
|
-
"DOCKER_REGISTRY": "$CI_REGISTRY",
|
|
1984
1859
|
"DOCKER_TLS_CERTDIR": "",
|
|
1985
1860
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1986
1861
|
"KUBERNETES_MEMORY_LIMIT": "2Gi",
|
|
@@ -1989,11 +1864,16 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1989
1864
|
},
|
|
1990
1865
|
"api ๐ Deploy | prod ": {
|
|
1991
1866
|
"allow_failure": true,
|
|
1867
|
+
"artifacts": {
|
|
1868
|
+
"reports": {
|
|
1869
|
+
"dotenv": "gitlab_environment.env",
|
|
1870
|
+
},
|
|
1871
|
+
},
|
|
1992
1872
|
"environment": {
|
|
1993
1873
|
"auto_stop_in": undefined,
|
|
1994
1874
|
"name": "prod/api",
|
|
1995
1875
|
"on_stop": "api ๐ Stop โ ๏ธ | prod ",
|
|
1996
|
-
"url": "
|
|
1876
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
1997
1877
|
},
|
|
1998
1878
|
"image": "path/to/docker/kubernetes:the-version",
|
|
1999
1879
|
"interruptible": true,
|
|
@@ -2024,102 +1904,139 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
2024
1904
|
},
|
|
2025
1905
|
],
|
|
2026
1906
|
"script": [
|
|
1907
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1908
|
+
"export ENV_SHORT="prod"",
|
|
1909
|
+
"export APP_DIR="api"",
|
|
1910
|
+
"export ENV_TYPE="prod"",
|
|
1911
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1912
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
1913
|
+
"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")"",
|
|
1914
|
+
"export HOST="api.prod.test-app.pan.panter.cloud"",
|
|
1915
|
+
"export ROOT_URL="https://api.prod.test-app.pan.panter.cloud"",
|
|
1916
|
+
"export HOST_INTERNAL="api.prod.test-app.pan.panter.cloud"",
|
|
1917
|
+
"export HOST_CANONICAL="api.prod.test-app.pan.panter.cloud"",
|
|
1918
|
+
"export ROOT_URL_INTERNAL="https://api.prod.test-app.pan.panter.cloud"",
|
|
1919
|
+
"export KUBE_NAMESPACE="pan-test-app-prod"",
|
|
1920
|
+
"export KUBE_APP_NAME="api"",
|
|
1921
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
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\\"]"",
|
|
1923
|
+
"export DOCKER_REGISTRY="$CI_REGISTRY"",
|
|
1924
|
+
"export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
|
|
1925
|
+
"export DOCKER_IMAGE_NAME="prod/api"",
|
|
1926
|
+
"export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
|
|
1927
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
1928
|
+
"export RELEASE_NAME="pan-test-app-prod-api"",
|
|
1929
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
1930
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
1931
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
1932
|
+
"export HELM_ARGS=""",
|
|
1933
|
+
"export COMPONENT_NAME="api"",
|
|
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"",
|
|
2027
1936
|
"kubectl config set-cluster "kube-pan-test-app-prod-api" --server="$CL_prod_api_KUBE_URL" --certificate-authority <(echo $CL_prod_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
|
|
2028
1937
|
"kubectl config set-credentials "kube-pan-test-app-prod-api" --token="$CL_prod_api_KUBE_TOKEN"",
|
|
2029
1938
|
"kubectl config set-context "kube-pan-test-app-prod-api" --cluster="kube-pan-test-app-prod-api" --user="kube-pan-test-app-prod-api" --namespace="pan-test-app-prod"",
|
|
2030
1939
|
"kubectl config use-context "kube-pan-test-app-prod-api"",
|
|
2031
|
-
"
|
|
2032
|
-
"
|
|
2033
|
-
|
|
2034
|
-
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://api.prod.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
|
|
2035
|
-
"echo deployment successful ๐ป",
|
|
2036
|
-
],
|
|
2037
|
-
"stage": "deploy prod",
|
|
2038
|
-
"variables": {
|
|
2039
|
-
"APP_DIR": "api",
|
|
2040
|
-
"BUILD_ID": "some-id",
|
|
2041
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
2042
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
2043
|
-
"BUILD_INFO_ID": "some-id",
|
|
2044
|
-
"COMPONENT_NAME": "api",
|
|
2045
|
-
"DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
|
|
2046
|
-
"DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
|
|
2047
|
-
"DOCKER_IMAGE_NAME": "prod/api",
|
|
2048
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
2049
|
-
"DOCKER_REGISTRY": "$CI_REGISTRY",
|
|
2050
|
-
"ENV_SHORT": "prod",
|
|
2051
|
-
"ENV_TYPE": "prod",
|
|
2052
|
-
"HELM_ARGS": "",
|
|
2053
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
2054
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
2055
|
-
"HOST": "api.prod.test-app.pan.panter.cloud",
|
|
2056
|
-
"HOST_CANONICAL": "api.prod.test-app.pan.panter.cloud",
|
|
2057
|
-
"HOST_INTERNAL": "api.prod.test-app.pan.panter.cloud",
|
|
2058
|
-
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
2059
|
-
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
2060
|
-
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
2061
|
-
"KUBE_APP_NAME": "api",
|
|
2062
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
2063
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
2064
|
-
"KUBE_NAMESPACE": "pan-test-app-prod",
|
|
2065
|
-
"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:
|
|
2066
1943
|
secret: {}
|
|
2067
1944
|
public:
|
|
2068
|
-
ENV_SHORT:
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
1945
|
+
ENV_SHORT: |-
|
|
1946
|
+
prod
|
|
1947
|
+
APP_DIR: |-
|
|
1948
|
+
api
|
|
1949
|
+
ENV_TYPE: |-
|
|
1950
|
+
prod
|
|
1951
|
+
BUILD_INFO_BUILD_ID: |-
|
|
1952
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
|
|
1953
|
+
BUILD_INFO_BUILD_TIME: |-
|
|
1954
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
|
|
1955
|
+
BUILD_INFO_CURRENT_VERSION: |-
|
|
1956
|
+
$(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/^/ /')
|
|
1957
|
+
HOST: |-
|
|
1958
|
+
api.prod.test-app.pan.panter.cloud
|
|
1959
|
+
ROOT_URL: |-
|
|
1960
|
+
https://api.prod.test-app.pan.panter.cloud
|
|
1961
|
+
HOST_INTERNAL: |-
|
|
1962
|
+
api.prod.test-app.pan.panter.cloud
|
|
1963
|
+
HOST_CANONICAL: |-
|
|
1964
|
+
api.prod.test-app.pan.panter.cloud
|
|
1965
|
+
ROOT_URL_INTERNAL: |-
|
|
1966
|
+
https://api.prod.test-app.pan.panter.cloud
|
|
1967
|
+
KUBE_NAMESPACE: |-
|
|
1968
|
+
pan-test-app-prod
|
|
1969
|
+
KUBE_APP_NAME: |-
|
|
1970
|
+
api
|
|
1971
|
+
KUBE_APP_NAME_PREFIX: ""
|
|
1972
|
+
_ALL_ENV_VAR_KEYS: |-
|
|
1973
|
+
["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"]
|
|
2083
1974
|
application:
|
|
2084
|
-
host:
|
|
2085
|
-
|
|
1975
|
+
host: |-
|
|
1976
|
+
api.prod.test-app.pan.panter.cloud
|
|
1977
|
+
command: |-
|
|
1978
|
+
node main.js
|
|
2086
1979
|
livenessProbe:
|
|
2087
1980
|
httpGet:
|
|
2088
|
-
path:
|
|
1981
|
+
path: |-
|
|
1982
|
+
__health
|
|
2089
1983
|
readinessProbe:
|
|
2090
1984
|
httpGet:
|
|
2091
|
-
path:
|
|
1985
|
+
path: |-
|
|
1986
|
+
__health
|
|
2092
1987
|
startupProbe:
|
|
2093
1988
|
httpGet:
|
|
2094
|
-
path:
|
|
1989
|
+
path: |-
|
|
1990
|
+
__health
|
|
2095
1991
|
autoscale:
|
|
2096
1992
|
minReplicas: 2
|
|
2097
1993
|
maxReplicas: 5
|
|
2098
1994
|
metrics:
|
|
2099
|
-
- type:
|
|
1995
|
+
- type: |-
|
|
1996
|
+
Resource
|
|
2100
1997
|
resource:
|
|
2101
|
-
name:
|
|
1998
|
+
name: |-
|
|
1999
|
+
cpu
|
|
2102
2000
|
target:
|
|
2103
|
-
type:
|
|
2001
|
+
type: |-
|
|
2002
|
+
Utilization
|
|
2104
2003
|
averageUtilization: 0.5
|
|
2105
2004
|
resources:
|
|
2106
2005
|
limits:
|
|
2107
|
-
cpu:
|
|
2108
|
-
|
|
2006
|
+
cpu: |-
|
|
2007
|
+
1
|
|
2008
|
+
memory: |-
|
|
2009
|
+
2048Mi
|
|
2010
|
+
|
|
2011
|
+
EOF
|
|
2109
2012
|
",
|
|
2110
|
-
"
|
|
2111
|
-
"
|
|
2112
|
-
"
|
|
2113
|
-
"
|
|
2013
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
|
|
2014
|
+
"kubernetesCreateSecret",
|
|
2015
|
+
"kubernetesDeploy",
|
|
2016
|
+
"echo Uploading SBOM to Dependency Track",
|
|
2017
|
+
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://api.prod.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
|
|
2018
|
+
"echo deployment successful ๐ป",
|
|
2019
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.prod.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
2020
|
+
],
|
|
2021
|
+
"stage": "deploy prod",
|
|
2022
|
+
"variables": {
|
|
2023
|
+
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
2024
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
2025
|
+
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
2114
2026
|
},
|
|
2115
2027
|
},
|
|
2116
2028
|
"api ๐ Deploy | stage ": {
|
|
2117
2029
|
"allow_failure": false,
|
|
2030
|
+
"artifacts": {
|
|
2031
|
+
"reports": {
|
|
2032
|
+
"dotenv": "gitlab_environment.env",
|
|
2033
|
+
},
|
|
2034
|
+
},
|
|
2118
2035
|
"environment": {
|
|
2119
2036
|
"auto_stop_in": undefined,
|
|
2120
2037
|
"name": "stage/api",
|
|
2121
2038
|
"on_stop": "api ๐ Stop โ ๏ธ | stage ",
|
|
2122
|
-
"url": "
|
|
2039
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
2123
2040
|
},
|
|
2124
2041
|
"image": "path/to/docker/kubernetes:the-version",
|
|
2125
2042
|
"interruptible": true,
|
|
@@ -2150,100 +2067,138 @@ application:
|
|
|
2150
2067
|
},
|
|
2151
2068
|
],
|
|
2152
2069
|
"script": [
|
|
2070
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
2071
|
+
"export ENV_SHORT="stage"",
|
|
2072
|
+
"export APP_DIR="api"",
|
|
2073
|
+
"export ENV_TYPE="stage"",
|
|
2074
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
2075
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
2076
|
+
"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")"",
|
|
2077
|
+
"export HOST="api.stage.test-app.pan.panter.cloud"",
|
|
2078
|
+
"export ROOT_URL="https://api.stage.test-app.pan.panter.cloud"",
|
|
2079
|
+
"export HOST_INTERNAL="api.stage.test-app.pan.panter.cloud"",
|
|
2080
|
+
"export HOST_CANONICAL="api.stage.test-app.pan.panter.cloud"",
|
|
2081
|
+
"export ROOT_URL_INTERNAL="https://api.stage.test-app.pan.panter.cloud"",
|
|
2082
|
+
"export KUBE_NAMESPACE="pan-test-app-stage"",
|
|
2083
|
+
"export KUBE_APP_NAME="api"",
|
|
2084
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
2085
|
+
"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\\"]"",
|
|
2086
|
+
"export DOCKER_REGISTRY="$CI_REGISTRY"",
|
|
2087
|
+
"export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
|
|
2088
|
+
"export DOCKER_IMAGE_NAME="stage/api"",
|
|
2089
|
+
"export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
|
|
2090
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
2091
|
+
"export RELEASE_NAME="pan-test-app-stage-api"",
|
|
2092
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
2093
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
2094
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
2095
|
+
"export HELM_ARGS=""",
|
|
2096
|
+
"export COMPONENT_NAME="api"",
|
|
2097
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
2098
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
2153
2099
|
"kubectl config set-cluster "kube-pan-test-app-stage-api" --server="$CL_stage_api_KUBE_URL" --certificate-authority <(echo $CL_stage_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
|
|
2154
2100
|
"kubectl config set-credentials "kube-pan-test-app-stage-api" --token="$CL_stage_api_KUBE_TOKEN"",
|
|
2155
2101
|
"kubectl config set-context "kube-pan-test-app-stage-api" --cluster="kube-pan-test-app-stage-api" --user="kube-pan-test-app-stage-api" --namespace="pan-test-app-stage"",
|
|
2156
2102
|
"kubectl config use-context "kube-pan-test-app-stage-api"",
|
|
2157
|
-
"
|
|
2158
|
-
"
|
|
2159
|
-
|
|
2160
|
-
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://api.stage.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
|
|
2161
|
-
"echo deployment successful ๐ป",
|
|
2162
|
-
],
|
|
2163
|
-
"stage": "deploy stage",
|
|
2164
|
-
"variables": {
|
|
2165
|
-
"APP_DIR": "api",
|
|
2166
|
-
"BUILD_ID": "some-id",
|
|
2167
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
2168
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
2169
|
-
"BUILD_INFO_ID": "some-id",
|
|
2170
|
-
"COMPONENT_NAME": "api",
|
|
2171
|
-
"DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
|
|
2172
|
-
"DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
|
|
2173
|
-
"DOCKER_IMAGE_NAME": "stage/api",
|
|
2174
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
2175
|
-
"DOCKER_REGISTRY": "$CI_REGISTRY",
|
|
2176
|
-
"ENV_SHORT": "stage",
|
|
2177
|
-
"ENV_TYPE": "stage",
|
|
2178
|
-
"HELM_ARGS": "",
|
|
2179
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
2180
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
2181
|
-
"HOST": "api.stage.test-app.pan.panter.cloud",
|
|
2182
|
-
"HOST_CANONICAL": "api.stage.test-app.pan.panter.cloud",
|
|
2183
|
-
"HOST_INTERNAL": "api.stage.test-app.pan.panter.cloud",
|
|
2184
|
-
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
2185
|
-
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
2186
|
-
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
2187
|
-
"KUBE_APP_NAME": "api",
|
|
2188
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
2189
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
2190
|
-
"KUBE_NAMESPACE": "pan-test-app-stage",
|
|
2191
|
-
"KUBE_VALUES": "env:
|
|
2103
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
|
|
2104
|
+
"cat > __all_values.yml <<EOF
|
|
2105
|
+
env:
|
|
2192
2106
|
secret: {}
|
|
2193
2107
|
public:
|
|
2194
|
-
ENV_SHORT:
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
|
|
2108
|
+
ENV_SHORT: |-
|
|
2109
|
+
stage
|
|
2110
|
+
APP_DIR: |-
|
|
2111
|
+
api
|
|
2112
|
+
ENV_TYPE: |-
|
|
2113
|
+
stage
|
|
2114
|
+
BUILD_INFO_BUILD_ID: |-
|
|
2115
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
|
|
2116
|
+
BUILD_INFO_BUILD_TIME: |-
|
|
2117
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
|
|
2118
|
+
BUILD_INFO_CURRENT_VERSION: |-
|
|
2119
|
+
$(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/^/ /')
|
|
2120
|
+
HOST: |-
|
|
2121
|
+
api.stage.test-app.pan.panter.cloud
|
|
2122
|
+
ROOT_URL: |-
|
|
2123
|
+
https://api.stage.test-app.pan.panter.cloud
|
|
2124
|
+
HOST_INTERNAL: |-
|
|
2125
|
+
api.stage.test-app.pan.panter.cloud
|
|
2126
|
+
HOST_CANONICAL: |-
|
|
2127
|
+
api.stage.test-app.pan.panter.cloud
|
|
2128
|
+
ROOT_URL_INTERNAL: |-
|
|
2129
|
+
https://api.stage.test-app.pan.panter.cloud
|
|
2130
|
+
KUBE_NAMESPACE: |-
|
|
2131
|
+
pan-test-app-stage
|
|
2132
|
+
KUBE_APP_NAME: |-
|
|
2133
|
+
api
|
|
2134
|
+
KUBE_APP_NAME_PREFIX: ""
|
|
2135
|
+
_ALL_ENV_VAR_KEYS: |-
|
|
2136
|
+
["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"]
|
|
2209
2137
|
application:
|
|
2210
|
-
host:
|
|
2211
|
-
|
|
2138
|
+
host: |-
|
|
2139
|
+
api.stage.test-app.pan.panter.cloud
|
|
2140
|
+
command: |-
|
|
2141
|
+
node main.js
|
|
2212
2142
|
livenessProbe:
|
|
2213
2143
|
httpGet:
|
|
2214
|
-
path:
|
|
2144
|
+
path: |-
|
|
2145
|
+
__health
|
|
2215
2146
|
readinessProbe:
|
|
2216
2147
|
httpGet:
|
|
2217
|
-
path:
|
|
2148
|
+
path: |-
|
|
2149
|
+
__health
|
|
2218
2150
|
startupProbe:
|
|
2219
2151
|
httpGet:
|
|
2220
|
-
path:
|
|
2152
|
+
path: |-
|
|
2153
|
+
__health
|
|
2221
2154
|
autoscale:
|
|
2222
2155
|
minReplicas: 2
|
|
2223
2156
|
maxReplicas: 5
|
|
2224
2157
|
metrics:
|
|
2225
|
-
- type:
|
|
2158
|
+
- type: |-
|
|
2159
|
+
Resource
|
|
2226
2160
|
resource:
|
|
2227
|
-
name:
|
|
2161
|
+
name: |-
|
|
2162
|
+
cpu
|
|
2228
2163
|
target:
|
|
2229
|
-
type:
|
|
2164
|
+
type: |-
|
|
2165
|
+
Utilization
|
|
2230
2166
|
averageUtilization: 0.5
|
|
2231
2167
|
resources:
|
|
2232
2168
|
limits:
|
|
2233
|
-
cpu:
|
|
2234
|
-
|
|
2169
|
+
cpu: |-
|
|
2170
|
+
1
|
|
2171
|
+
memory: |-
|
|
2172
|
+
2048Mi
|
|
2173
|
+
|
|
2174
|
+
EOF
|
|
2235
2175
|
",
|
|
2236
|
-
"
|
|
2237
|
-
"
|
|
2238
|
-
"
|
|
2239
|
-
"
|
|
2176
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
|
|
2177
|
+
"kubernetesCreateSecret",
|
|
2178
|
+
"kubernetesDeploy",
|
|
2179
|
+
"echo Uploading SBOM to Dependency Track",
|
|
2180
|
+
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://api.stage.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
|
|
2181
|
+
"echo deployment successful ๐ป",
|
|
2182
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
2183
|
+
],
|
|
2184
|
+
"stage": "deploy stage",
|
|
2185
|
+
"variables": {
|
|
2186
|
+
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
2187
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
2188
|
+
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
2240
2189
|
},
|
|
2241
2190
|
},
|
|
2242
2191
|
"api ๐ Stop โ ๏ธ | prod ": {
|
|
2192
|
+
"allow_failure": true,
|
|
2193
|
+
"artifacts": {
|
|
2194
|
+
"reports": {
|
|
2195
|
+
"dotenv": "gitlab_environment.env",
|
|
2196
|
+
},
|
|
2197
|
+
},
|
|
2243
2198
|
"environment": {
|
|
2244
2199
|
"action": "stop",
|
|
2245
2200
|
"name": "prod/api",
|
|
2246
|
-
"url": "
|
|
2201
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
2247
2202
|
},
|
|
2248
2203
|
"image": "path/to/docker/kubernetes:the-version",
|
|
2249
2204
|
"interruptible": true,
|
|
@@ -2257,16 +2212,38 @@ application:
|
|
|
2257
2212
|
},
|
|
2258
2213
|
"rules": [
|
|
2259
2214
|
{
|
|
2260
|
-
"allow_failure": true,
|
|
2261
2215
|
"if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
|
|
2262
2216
|
"when": "on_success",
|
|
2263
2217
|
},
|
|
2264
2218
|
{
|
|
2265
|
-
"allow_failure": true,
|
|
2266
2219
|
"when": "manual",
|
|
2267
2220
|
},
|
|
2268
2221
|
],
|
|
2269
2222
|
"script": [
|
|
2223
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
2224
|
+
"export ENV_SHORT="prod"",
|
|
2225
|
+
"export APP_DIR="api"",
|
|
2226
|
+
"export ENV_TYPE="prod"",
|
|
2227
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
2228
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
2229
|
+
"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")"",
|
|
2230
|
+
"export HOST="api.prod.test-app.pan.panter.cloud"",
|
|
2231
|
+
"export ROOT_URL="https://api.prod.test-app.pan.panter.cloud"",
|
|
2232
|
+
"export HOST_INTERNAL="api.prod.test-app.pan.panter.cloud"",
|
|
2233
|
+
"export HOST_CANONICAL="api.prod.test-app.pan.panter.cloud"",
|
|
2234
|
+
"export ROOT_URL_INTERNAL="https://api.prod.test-app.pan.panter.cloud"",
|
|
2235
|
+
"export KUBE_NAMESPACE="pan-test-app-prod"",
|
|
2236
|
+
"export KUBE_APP_NAME="api"",
|
|
2237
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
2238
|
+
"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\\"]"",
|
|
2239
|
+
"export RELEASE_NAME="pan-test-app-prod-api"",
|
|
2240
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
2241
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
2242
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
2243
|
+
"export HELM_ARGS=""",
|
|
2244
|
+
"export COMPONENT_NAME="api"",
|
|
2245
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
2246
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
2270
2247
|
"kubectl config set-cluster "kube-pan-test-app-prod-api" --server="$CL_prod_api_KUBE_URL" --certificate-authority <(echo $CL_prod_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
|
|
2271
2248
|
"kubectl config set-credentials "kube-pan-test-app-prod-api" --token="$CL_prod_api_KUBE_TOKEN"",
|
|
2272
2249
|
"kubectl config set-context "kube-pan-test-app-prod-api" --cluster="kube-pan-test-app-prod-api" --user="kube-pan-test-app-prod-api" --namespace="pan-test-app-prod"",
|
|
@@ -2274,87 +2251,27 @@ application:
|
|
|
2274
2251
|
"kubernetesDelete",
|
|
2275
2252
|
"echo Disabling component in Dependency Track",
|
|
2276
2253
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.prod.test-app.pan.panter.cloud" || true",
|
|
2254
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.prod.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
2277
2255
|
],
|
|
2278
2256
|
"stage": "stop prod",
|
|
2279
2257
|
"variables": {
|
|
2280
|
-
"APP_DIR": "api",
|
|
2281
|
-
"BUILD_ID": "some-id",
|
|
2282
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
2283
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
2284
|
-
"BUILD_INFO_ID": "some-id",
|
|
2285
|
-
"COMPONENT_NAME": "api",
|
|
2286
|
-
"ENV_SHORT": "prod",
|
|
2287
|
-
"ENV_TYPE": "prod",
|
|
2288
2258
|
"GIT_STRATEGY": "none",
|
|
2289
|
-
"HELM_ARGS": "",
|
|
2290
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
2291
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
2292
|
-
"HOST": "api.prod.test-app.pan.panter.cloud",
|
|
2293
|
-
"HOST_CANONICAL": "api.prod.test-app.pan.panter.cloud",
|
|
2294
|
-
"HOST_INTERNAL": "api.prod.test-app.pan.panter.cloud",
|
|
2295
2259
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
2296
2260
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
2297
2261
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
2298
|
-
"KUBE_APP_NAME": "api",
|
|
2299
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
2300
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
2301
|
-
"KUBE_NAMESPACE": "pan-test-app-prod",
|
|
2302
|
-
"KUBE_VALUES": "env:
|
|
2303
|
-
secret: {}
|
|
2304
|
-
public:
|
|
2305
|
-
ENV_SHORT: 'prod'
|
|
2306
|
-
APP_DIR: 'api'
|
|
2307
|
-
ENV_TYPE: 'prod'
|
|
2308
|
-
BUILD_INFO_ID: 'some-id'
|
|
2309
|
-
BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
|
|
2310
|
-
BUILD_INFO_CURRENT_VERSION: '3.2.1'
|
|
2311
|
-
HOST: 'api.prod.test-app.pan.panter.cloud'
|
|
2312
|
-
ROOT_URL: 'https://api.prod.test-app.pan.panter.cloud'
|
|
2313
|
-
HOST_CANONICAL: 'api.prod.test-app.pan.panter.cloud'
|
|
2314
|
-
ROOT_URL_INTERNAL: 'https://api.prod.test-app.pan.panter.cloud'
|
|
2315
|
-
KUBE_NAMESPACE: 'pan-test-app-prod'
|
|
2316
|
-
KUBE_APP_NAME: 'api'
|
|
2317
|
-
KUBE_APP_NAME_PREFIX: ''
|
|
2318
|
-
HOST_INTERNAL: 'api.prod.test-app.pan.panter.cloud'
|
|
2319
|
-
_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"]'
|
|
2320
|
-
application:
|
|
2321
|
-
host: 'api.prod.test-app.pan.panter.cloud'
|
|
2322
|
-
command: 'node main.js'
|
|
2323
|
-
livenessProbe:
|
|
2324
|
-
httpGet:
|
|
2325
|
-
path: '__health'
|
|
2326
|
-
readinessProbe:
|
|
2327
|
-
httpGet:
|
|
2328
|
-
path: '__health'
|
|
2329
|
-
startupProbe:
|
|
2330
|
-
httpGet:
|
|
2331
|
-
path: '__health'
|
|
2332
|
-
autoscale:
|
|
2333
|
-
minReplicas: 2
|
|
2334
|
-
maxReplicas: 5
|
|
2335
|
-
metrics:
|
|
2336
|
-
- type: 'Resource'
|
|
2337
|
-
resource:
|
|
2338
|
-
name: 'cpu'
|
|
2339
|
-
target:
|
|
2340
|
-
type: 'Utilization'
|
|
2341
|
-
averageUtilization: 0.5
|
|
2342
|
-
resources:
|
|
2343
|
-
limits:
|
|
2344
|
-
cpu: '1'
|
|
2345
|
-
memory: '2048Mi'
|
|
2346
|
-
",
|
|
2347
|
-
"RELEASE_NAME": "pan-test-app-prod-api",
|
|
2348
|
-
"ROOT_URL": "https://api.prod.test-app.pan.panter.cloud",
|
|
2349
|
-
"ROOT_URL_INTERNAL": "https://api.prod.test-app.pan.panter.cloud",
|
|
2350
|
-
"_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"]",
|
|
2351
2262
|
},
|
|
2352
2263
|
},
|
|
2353
2264
|
"api ๐ Stop โ ๏ธ | stage ": {
|
|
2265
|
+
"allow_failure": true,
|
|
2266
|
+
"artifacts": {
|
|
2267
|
+
"reports": {
|
|
2268
|
+
"dotenv": "gitlab_environment.env",
|
|
2269
|
+
},
|
|
2270
|
+
},
|
|
2354
2271
|
"environment": {
|
|
2355
2272
|
"action": "stop",
|
|
2356
2273
|
"name": "stage/api",
|
|
2357
|
-
"url": "
|
|
2274
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
2358
2275
|
},
|
|
2359
2276
|
"image": "path/to/docker/kubernetes:the-version",
|
|
2360
2277
|
"interruptible": true,
|
|
@@ -2368,16 +2285,38 @@ application:
|
|
|
2368
2285
|
},
|
|
2369
2286
|
"rules": [
|
|
2370
2287
|
{
|
|
2371
|
-
"allow_failure": true,
|
|
2372
2288
|
"if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
|
|
2373
2289
|
"when": "on_success",
|
|
2374
2290
|
},
|
|
2375
2291
|
{
|
|
2376
|
-
"allow_failure": true,
|
|
2377
2292
|
"when": "manual",
|
|
2378
2293
|
},
|
|
2379
2294
|
],
|
|
2380
2295
|
"script": [
|
|
2296
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
2297
|
+
"export ENV_SHORT="stage"",
|
|
2298
|
+
"export APP_DIR="api"",
|
|
2299
|
+
"export ENV_TYPE="stage"",
|
|
2300
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
2301
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
2302
|
+
"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")"",
|
|
2303
|
+
"export HOST="api.stage.test-app.pan.panter.cloud"",
|
|
2304
|
+
"export ROOT_URL="https://api.stage.test-app.pan.panter.cloud"",
|
|
2305
|
+
"export HOST_INTERNAL="api.stage.test-app.pan.panter.cloud"",
|
|
2306
|
+
"export HOST_CANONICAL="api.stage.test-app.pan.panter.cloud"",
|
|
2307
|
+
"export ROOT_URL_INTERNAL="https://api.stage.test-app.pan.panter.cloud"",
|
|
2308
|
+
"export KUBE_NAMESPACE="pan-test-app-stage"",
|
|
2309
|
+
"export KUBE_APP_NAME="api"",
|
|
2310
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
2311
|
+
"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\\"]"",
|
|
2312
|
+
"export RELEASE_NAME="pan-test-app-stage-api"",
|
|
2313
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
2314
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
2315
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
2316
|
+
"export HELM_ARGS=""",
|
|
2317
|
+
"export COMPONENT_NAME="api"",
|
|
2318
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
2319
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
2381
2320
|
"kubectl config set-cluster "kube-pan-test-app-stage-api" --server="$CL_stage_api_KUBE_URL" --certificate-authority <(echo $CL_stage_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
|
|
2382
2321
|
"kubectl config set-credentials "kube-pan-test-app-stage-api" --token="$CL_stage_api_KUBE_TOKEN"",
|
|
2383
2322
|
"kubectl config set-context "kube-pan-test-app-stage-api" --cluster="kube-pan-test-app-stage-api" --user="kube-pan-test-app-stage-api" --namespace="pan-test-app-stage"",
|
|
@@ -2385,80 +2324,14 @@ application:
|
|
|
2385
2324
|
"kubernetesDelete",
|
|
2386
2325
|
"echo Disabling component in Dependency Track",
|
|
2387
2326
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.stage.test-app.pan.panter.cloud" || true",
|
|
2327
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
2388
2328
|
],
|
|
2389
2329
|
"stage": "stop stage",
|
|
2390
2330
|
"variables": {
|
|
2391
|
-
"APP_DIR": "api",
|
|
2392
|
-
"BUILD_ID": "some-id",
|
|
2393
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
2394
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
2395
|
-
"BUILD_INFO_ID": "some-id",
|
|
2396
|
-
"COMPONENT_NAME": "api",
|
|
2397
|
-
"ENV_SHORT": "stage",
|
|
2398
|
-
"ENV_TYPE": "stage",
|
|
2399
2331
|
"GIT_STRATEGY": "none",
|
|
2400
|
-
"HELM_ARGS": "",
|
|
2401
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
2402
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
2403
|
-
"HOST": "api.stage.test-app.pan.panter.cloud",
|
|
2404
|
-
"HOST_CANONICAL": "api.stage.test-app.pan.panter.cloud",
|
|
2405
|
-
"HOST_INTERNAL": "api.stage.test-app.pan.panter.cloud",
|
|
2406
2332
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
2407
2333
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
2408
2334
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
2409
|
-
"KUBE_APP_NAME": "api",
|
|
2410
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
2411
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
2412
|
-
"KUBE_NAMESPACE": "pan-test-app-stage",
|
|
2413
|
-
"KUBE_VALUES": "env:
|
|
2414
|
-
secret: {}
|
|
2415
|
-
public:
|
|
2416
|
-
ENV_SHORT: 'stage'
|
|
2417
|
-
APP_DIR: 'api'
|
|
2418
|
-
ENV_TYPE: 'stage'
|
|
2419
|
-
BUILD_INFO_ID: 'some-id'
|
|
2420
|
-
BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
|
|
2421
|
-
BUILD_INFO_CURRENT_VERSION: '3.2.1'
|
|
2422
|
-
HOST: 'api.stage.test-app.pan.panter.cloud'
|
|
2423
|
-
ROOT_URL: 'https://api.stage.test-app.pan.panter.cloud'
|
|
2424
|
-
HOST_CANONICAL: 'api.stage.test-app.pan.panter.cloud'
|
|
2425
|
-
ROOT_URL_INTERNAL: 'https://api.stage.test-app.pan.panter.cloud'
|
|
2426
|
-
KUBE_NAMESPACE: 'pan-test-app-stage'
|
|
2427
|
-
KUBE_APP_NAME: 'api'
|
|
2428
|
-
KUBE_APP_NAME_PREFIX: ''
|
|
2429
|
-
HOST_INTERNAL: 'api.stage.test-app.pan.panter.cloud'
|
|
2430
|
-
_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"]'
|
|
2431
|
-
application:
|
|
2432
|
-
host: 'api.stage.test-app.pan.panter.cloud'
|
|
2433
|
-
command: 'node main.js'
|
|
2434
|
-
livenessProbe:
|
|
2435
|
-
httpGet:
|
|
2436
|
-
path: '__health'
|
|
2437
|
-
readinessProbe:
|
|
2438
|
-
httpGet:
|
|
2439
|
-
path: '__health'
|
|
2440
|
-
startupProbe:
|
|
2441
|
-
httpGet:
|
|
2442
|
-
path: '__health'
|
|
2443
|
-
autoscale:
|
|
2444
|
-
minReplicas: 2
|
|
2445
|
-
maxReplicas: 5
|
|
2446
|
-
metrics:
|
|
2447
|
-
- type: 'Resource'
|
|
2448
|
-
resource:
|
|
2449
|
-
name: 'cpu'
|
|
2450
|
-
target:
|
|
2451
|
-
type: 'Utilization'
|
|
2452
|
-
averageUtilization: 0.5
|
|
2453
|
-
resources:
|
|
2454
|
-
limits:
|
|
2455
|
-
cpu: '1'
|
|
2456
|
-
memory: '2048Mi'
|
|
2457
|
-
",
|
|
2458
|
-
"RELEASE_NAME": "pan-test-app-stage-api",
|
|
2459
|
-
"ROOT_URL": "https://api.stage.test-app.pan.panter.cloud",
|
|
2460
|
-
"ROOT_URL_INTERNAL": "https://api.stage.test-app.pan.panter.cloud",
|
|
2461
|
-
"_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"]",
|
|
2462
2335
|
},
|
|
2463
2336
|
},
|
|
2464
2337
|
"api ๐งพ sbom | prod ": {
|
|
@@ -2479,6 +2352,8 @@ application:
|
|
|
2479
2352
|
],
|
|
2480
2353
|
},
|
|
2481
2354
|
"script": [
|
|
2355
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
2356
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
2482
2357
|
"trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
|
|
2483
2358
|
],
|
|
2484
2359
|
"stage": "build",
|
|
@@ -2502,6 +2377,8 @@ application:
|
|
|
2502
2377
|
],
|
|
2503
2378
|
},
|
|
2504
2379
|
"script": [
|
|
2380
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
2381
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
2505
2382
|
"trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
|
|
2506
2383
|
],
|
|
2507
2384
|
"stage": "build",
|
|
@@ -2554,7 +2431,7 @@ application:
|
|
|
2554
2431
|
],
|
|
2555
2432
|
"variables": {
|
|
2556
2433
|
"FF_USE_FASTZIP": "true",
|
|
2557
|
-
"GIT_DEPTH": 1,
|
|
2434
|
+
"GIT_DEPTH": "1",
|
|
2558
2435
|
},
|
|
2559
2436
|
"workflow": {
|
|
2560
2437
|
"rules": [
|