@catladder/pipeline 1.144.0 โ 1.145.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +41 -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 +9 -2
- 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 +3 -2
- 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/custom-deploy.ts +7 -7
- package/examples/multiline-var.ts +64 -0
- package/package.json +5 -8
- 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/createAppBuildJob.ts +6 -2
- package/src/build/base/writeBuildInfo.ts +1 -1
- package/src/build/base/writeDotEnv.ts +6 -1
- package/src/build/custom/buildJob.ts +2 -4
- package/src/build/custom/testJob.ts +3 -2
- package/src/build/docker.ts +15 -7
- package/src/build/node/buildJob.ts +1 -3
- package/src/build/node/testJob.ts +3 -2
- package/src/build/node/yarn.ts +9 -4
- 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/readConfig.ts +2 -3
- 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/getEnvironment.ts +7 -30
- package/src/context/getEnvironmentContext.ts +25 -29
- package/src/context/getEnvironmentVariables.ts +61 -36
- package/src/context/getReviewSlug.ts +27 -0
- package/src/context/index.ts +24 -23
- package/src/context/resolveReferences.ts +28 -8
- package/src/context/transformJobOnlyVars.ts +5 -2
- package/src/context/utils/envVars.ts +2 -1
- package/src/deploy/base/deploy.ts +20 -18
- package/src/deploy/base/rollback.ts +8 -10
- package/src/deploy/base/stop.ts +8 -9
- package/src/deploy/cloudRun/artifactsRegistry.ts +9 -4
- package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +12 -7
- package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +3 -2
- package/src/deploy/cloudRun/createJobs/constants.ts +1 -0
- package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +20 -2
- package/src/deploy/cloudRun/createJobs/index.ts +17 -8
- package/src/deploy/cloudRun/index.ts +14 -6
- package/src/deploy/cloudRun/utils/createArgsString.ts +2 -1
- package/src/deploy/cloudRun/utils/database.ts +2 -2
- package/src/deploy/cloudRun/utils/jobName.ts +7 -2
- package/src/deploy/cloudSql/utils.ts +12 -9
- package/src/deploy/index.ts +2 -1
- package/src/deploy/kubernetes/cloudSql/index.ts +3 -2
- package/src/deploy/kubernetes/deployJob.ts +24 -10
- package/src/deploy/kubernetes/index.ts +15 -8
- package/src/deploy/kubernetes/kubeEnv.ts +8 -6
- package/src/deploy/kubernetes/kubeValues.ts +0 -1
- package/src/deploy/kubernetes/processSecretsAsFiles.ts +2 -1
- package/src/deploy/types/base.ts +6 -0
- package/src/deploy/types/googleCloudRun.ts +2 -0
- package/src/index.ts +2 -1
- package/src/packageInfos.ts +10 -0
- package/src/pipeline/createAllJobs.ts +24 -10
- package/src/pipeline/createChildPipeline.ts +19 -8
- package/src/pipeline/createJobsForComponent.ts +14 -22
- package/src/pipeline/createMainPipeline.ts +88 -0
- package/src/pipeline/generatePipelineFiles.ts +29 -0
- package/src/pipeline/gitlab/createGitlabJobs.ts +174 -51
- 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/rules/index.ts +15 -9
- package/src/types/config.ts +11 -2
- package/src/types/context.ts +39 -26
- package/src/types/environmentContext.ts +12 -6
- package/src/types/gitlab-ci-yml.ts +0 -1
- package/src/types/gitlab-types.ts +5 -4
- package/src/types/jobs.ts +28 -3
- package/src/types/pipeline.ts +4 -0
- 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,87 +29,49 @@ 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 POSTGRESQL_PASSWORD="$CL_dev_api_POSTGRESQL_PASSWORD"",
|
|
52
|
+
"export cloudsqlProxyCredentials="$CL_dev_api_cloudsqlProxyCredentials"",
|
|
53
|
+
"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\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\"]"",
|
|
54
|
+
"export RELEASE_NAME="pan-test-app-dev-api"",
|
|
55
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
56
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
57
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
58
|
+
"export HELM_ARGS=""",
|
|
59
|
+
"export COMPONENT_NAME="api"",
|
|
60
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
61
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
31
62
|
"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
63
|
"kubectl config set-credentials "kube-pan-test-app-dev-api" --token="$CL_dev_api_KUBE_TOKEN"",
|
|
33
64
|
"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
65
|
"kubectl config use-context "kube-pan-test-app-dev-api"",
|
|
35
66
|
"kubernetesRollback",
|
|
67
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
36
68
|
],
|
|
37
69
|
"stage": "rollback dev",
|
|
38
70
|
"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
71
|
"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
72
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
55
73
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
56
74
|
"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
|
-
POSTGRESQL_PASSWORD: '$CL_dev_api_POSTGRESQL_PASSWORD'
|
|
64
|
-
cloudsqlProxyCredentials: '$CL_dev_api_cloudsqlProxyCredentials'
|
|
65
|
-
public:
|
|
66
|
-
ENV_SHORT: 'dev'
|
|
67
|
-
APP_DIR: 'api'
|
|
68
|
-
ENV_TYPE: 'dev'
|
|
69
|
-
BUILD_INFO_ID: 'some-id'
|
|
70
|
-
BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
|
|
71
|
-
BUILD_INFO_CURRENT_VERSION: '3.2.1'
|
|
72
|
-
HOST: 'api.dev.test-app.pan.panter.cloud'
|
|
73
|
-
ROOT_URL: 'https://api.dev.test-app.pan.panter.cloud'
|
|
74
|
-
HOST_CANONICAL: 'api.dev.test-app.pan.panter.cloud'
|
|
75
|
-
ROOT_URL_INTERNAL: 'https://api.dev.test-app.pan.panter.cloud'
|
|
76
|
-
KUBE_NAMESPACE: 'pan-test-app-dev'
|
|
77
|
-
KUBE_APP_NAME: 'api'
|
|
78
|
-
KUBE_APP_NAME_PREFIX: ''
|
|
79
|
-
HOST_INTERNAL: 'api.dev.test-app.pan.panter.cloud'
|
|
80
|
-
_ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","HOST_INTERNAL","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]'
|
|
81
|
-
application:
|
|
82
|
-
host: 'api.dev.test-app.pan.panter.cloud'
|
|
83
|
-
command: 'yarn start'
|
|
84
|
-
livenessProbe:
|
|
85
|
-
httpGet:
|
|
86
|
-
path: '__health'
|
|
87
|
-
readinessProbe:
|
|
88
|
-
httpGet:
|
|
89
|
-
path: '__health'
|
|
90
|
-
startupProbe:
|
|
91
|
-
httpGet:
|
|
92
|
-
path: '__health'
|
|
93
|
-
cloudsql:
|
|
94
|
-
enabled: true
|
|
95
|
-
dbUser: 'postgres'
|
|
96
|
-
instanceConnectionName: 'myproject:europe-west6:instance-name'
|
|
97
|
-
proxyCredentials: '$CL_dev_api_cloudsqlProxyCredentials'
|
|
98
|
-
fullDbName: 'pan-test-app-dev-api'
|
|
99
|
-
type: 'unmanaged'
|
|
100
|
-
",
|
|
101
|
-
"POSTGRESQL_PASSWORD": "$CL_dev_api_POSTGRESQL_PASSWORD",
|
|
102
|
-
"RELEASE_NAME": "pan-test-app-dev-api",
|
|
103
|
-
"ROOT_URL": "https://api.dev.test-app.pan.panter.cloud",
|
|
104
|
-
"ROOT_URL_INTERNAL": "https://api.dev.test-app.pan.panter.cloud",
|
|
105
|
-
"_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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]",
|
|
106
|
-
"cloudsqlProxyCredentials": "$CL_dev_api_cloudsqlProxyCredentials",
|
|
107
75
|
},
|
|
108
76
|
},
|
|
109
77
|
"api ๐ฎ lint": {
|
|
@@ -134,6 +102,9 @@ cloudsql:
|
|
|
134
102
|
],
|
|
135
103
|
},
|
|
136
104
|
"script": [
|
|
105
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
106
|
+
"export APP_PATH="api"",
|
|
107
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
137
108
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
138
109
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
139
110
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -150,7 +121,6 @@ cloudsql:
|
|
|
150
121
|
],
|
|
151
122
|
"stage": "test",
|
|
152
123
|
"variables": {
|
|
153
|
-
"APP_PATH": "api",
|
|
154
124
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
155
125
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
156
126
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
@@ -203,7 +173,26 @@ cloudsql:
|
|
|
203
173
|
],
|
|
204
174
|
},
|
|
205
175
|
"script": [
|
|
206
|
-
"echo
|
|
176
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
177
|
+
"export ENV_SHORT="dev"",
|
|
178
|
+
"export APP_DIR="api"",
|
|
179
|
+
"export ENV_TYPE="dev"",
|
|
180
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
181
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
182
|
+
"export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\///'); [ -z "$tag" ] && echo "v0.0.0" || echo "$tag")"",
|
|
183
|
+
"export HOST="api.dev.test-app.pan.panter.cloud"",
|
|
184
|
+
"export ROOT_URL="https://api.dev.test-app.pan.panter.cloud"",
|
|
185
|
+
"export HOST_INTERNAL="api.dev.test-app.pan.panter.cloud"",
|
|
186
|
+
"export HOST_CANONICAL="api.dev.test-app.pan.panter.cloud"",
|
|
187
|
+
"export ROOT_URL_INTERNAL="https://api.dev.test-app.pan.panter.cloud"",
|
|
188
|
+
"export KUBE_NAMESPACE="pan-test-app-dev"",
|
|
189
|
+
"export KUBE_APP_NAME="api"",
|
|
190
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
191
|
+
"export POSTGRESQL_PASSWORD="$CL_dev_api_POSTGRESQL_PASSWORD"",
|
|
192
|
+
"export cloudsqlProxyCredentials="$CL_dev_api_cloudsqlProxyCredentials"",
|
|
193
|
+
"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\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\"]"",
|
|
194
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
195
|
+
"echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
|
|
207
196
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
208
197
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
209
198
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -220,26 +209,9 @@ cloudsql:
|
|
|
220
209
|
],
|
|
221
210
|
"stage": "build",
|
|
222
211
|
"variables": {
|
|
223
|
-
"APP_DIR": "api",
|
|
224
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
225
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
226
|
-
"BUILD_INFO_ID": "some-id",
|
|
227
|
-
"ENV_SHORT": "dev",
|
|
228
|
-
"ENV_TYPE": "dev",
|
|
229
|
-
"HOST": "api.dev.test-app.pan.panter.cloud",
|
|
230
|
-
"HOST_CANONICAL": "api.dev.test-app.pan.panter.cloud",
|
|
231
|
-
"HOST_INTERNAL": "api.dev.test-app.pan.panter.cloud",
|
|
232
212
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
233
213
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
234
214
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
235
|
-
"KUBE_APP_NAME": "api",
|
|
236
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
237
|
-
"KUBE_NAMESPACE": "pan-test-app-dev",
|
|
238
|
-
"POSTGRESQL_PASSWORD": "$CL_dev_api_POSTGRESQL_PASSWORD",
|
|
239
|
-
"ROOT_URL": "https://api.dev.test-app.pan.panter.cloud",
|
|
240
|
-
"ROOT_URL_INTERNAL": "https://api.dev.test-app.pan.panter.cloud",
|
|
241
|
-
"_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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]",
|
|
242
|
-
"cloudsqlProxyCredentials": "$CL_dev_api_cloudsqlProxyCredentials",
|
|
243
215
|
},
|
|
244
216
|
},
|
|
245
217
|
"api ๐จ docker | dev ": {
|
|
@@ -265,6 +237,22 @@ cloudsql:
|
|
|
265
237
|
],
|
|
266
238
|
},
|
|
267
239
|
"script": [
|
|
240
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
241
|
+
"export APP_DIR="api"",
|
|
242
|
+
"export DOCKER_DIR="."",
|
|
243
|
+
"export DOCKER_REGISTRY="$CI_REGISTRY"",
|
|
244
|
+
"export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
|
|
245
|
+
"export DOCKER_IMAGE_NAME="dev/api"",
|
|
246
|
+
"export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
|
|
247
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
248
|
+
"export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
|
|
249
|
+
RUN yarn plugin import workspace-tools
|
|
250
|
+
RUN yarn workspaces focus --production && yarn rebuild"",
|
|
251
|
+
"export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
|
|
252
|
+
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
253
|
+
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
254
|
+
COPY --chown=node:node .yarn /app/.yarn"",
|
|
255
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
268
256
|
"ensureNodeDockerfile",
|
|
269
257
|
"echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
|
|
270
258
|
"docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
|
|
@@ -288,25 +276,9 @@ cloudsql:
|
|
|
288
276
|
],
|
|
289
277
|
"stage": "build",
|
|
290
278
|
"variables": {
|
|
291
|
-
"APP_DIR": "api",
|
|
292
|
-
"DOCKERFILE_ADDITIONS": undefined,
|
|
293
|
-
"DOCKERFILE_ADDITIONS_END": undefined,
|
|
294
279
|
"DOCKER_BUILDKIT": "1",
|
|
295
|
-
"DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
|
|
296
|
-
"DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
|
|
297
|
-
RUN yarn plugin import workspace-tools
|
|
298
|
-
RUN yarn workspaces focus --production && yarn rebuild",
|
|
299
|
-
"DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
|
|
300
|
-
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
301
|
-
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
302
|
-
COPY --chown=node:node .yarn /app/.yarn",
|
|
303
|
-
"DOCKER_DIR": ".",
|
|
304
280
|
"DOCKER_DRIVER": "overlay2",
|
|
305
281
|
"DOCKER_HOST": "tcp://0.0.0.0:2375",
|
|
306
|
-
"DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
|
|
307
|
-
"DOCKER_IMAGE_NAME": "dev/api",
|
|
308
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
309
|
-
"DOCKER_REGISTRY": "$CI_REGISTRY",
|
|
310
282
|
"DOCKER_TLS_CERTDIR": "",
|
|
311
283
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
312
284
|
"KUBERNETES_MEMORY_LIMIT": "2Gi",
|
|
@@ -315,11 +287,16 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
315
287
|
},
|
|
316
288
|
"api ๐ Deploy | dev ": {
|
|
317
289
|
"allow_failure": false,
|
|
290
|
+
"artifacts": {
|
|
291
|
+
"reports": {
|
|
292
|
+
"dotenv": "gitlab_environment.env",
|
|
293
|
+
},
|
|
294
|
+
},
|
|
318
295
|
"environment": {
|
|
319
296
|
"auto_stop_in": "4 weeks",
|
|
320
297
|
"name": "dev/api",
|
|
321
298
|
"on_stop": "api ๐ Stop โ ๏ธ | dev ",
|
|
322
|
-
"url": "
|
|
299
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
323
300
|
},
|
|
324
301
|
"image": "path/to/docker/kubernetes:the-version",
|
|
325
302
|
"interruptible": true,
|
|
@@ -362,97 +339,137 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
362
339
|
},
|
|
363
340
|
],
|
|
364
341
|
"script": [
|
|
342
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
343
|
+
"export ENV_SHORT="dev"",
|
|
344
|
+
"export APP_DIR="api"",
|
|
345
|
+
"export ENV_TYPE="dev"",
|
|
346
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
347
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
348
|
+
"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")"",
|
|
349
|
+
"export HOST="api.dev.test-app.pan.panter.cloud"",
|
|
350
|
+
"export ROOT_URL="https://api.dev.test-app.pan.panter.cloud"",
|
|
351
|
+
"export HOST_INTERNAL="api.dev.test-app.pan.panter.cloud"",
|
|
352
|
+
"export HOST_CANONICAL="api.dev.test-app.pan.panter.cloud"",
|
|
353
|
+
"export ROOT_URL_INTERNAL="https://api.dev.test-app.pan.panter.cloud"",
|
|
354
|
+
"export KUBE_NAMESPACE="pan-test-app-dev"",
|
|
355
|
+
"export KUBE_APP_NAME="api"",
|
|
356
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
357
|
+
"export POSTGRESQL_PASSWORD="$CL_dev_api_POSTGRESQL_PASSWORD"",
|
|
358
|
+
"export cloudsqlProxyCredentials="$CL_dev_api_cloudsqlProxyCredentials"",
|
|
359
|
+
"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\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\"]"",
|
|
360
|
+
"export DOCKER_REGISTRY="$CI_REGISTRY"",
|
|
361
|
+
"export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
|
|
362
|
+
"export DOCKER_IMAGE_NAME="dev/api"",
|
|
363
|
+
"export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
|
|
364
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
365
|
+
"export RELEASE_NAME="pan-test-app-dev-api"",
|
|
366
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
367
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
368
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
369
|
+
"export HELM_ARGS=""",
|
|
370
|
+
"export COMPONENT_NAME="api"",
|
|
371
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
372
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
365
373
|
"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",
|
|
366
374
|
"kubectl config set-credentials "kube-pan-test-app-dev-api" --token="$CL_dev_api_KUBE_TOKEN"",
|
|
367
375
|
"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"",
|
|
368
376
|
"kubectl config use-context "kube-pan-test-app-dev-api"",
|
|
369
|
-
"
|
|
370
|
-
"
|
|
371
|
-
|
|
372
|
-
"/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",
|
|
373
|
-
"echo deployment successful ๐ป",
|
|
374
|
-
],
|
|
375
|
-
"stage": "deploy dev",
|
|
376
|
-
"variables": {
|
|
377
|
-
"APP_DIR": "api",
|
|
378
|
-
"BUILD_ID": "some-id",
|
|
379
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
380
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
381
|
-
"BUILD_INFO_ID": "some-id",
|
|
382
|
-
"COMPONENT_NAME": "api",
|
|
383
|
-
"DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
|
|
384
|
-
"DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
|
|
385
|
-
"DOCKER_IMAGE_NAME": "dev/api",
|
|
386
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
387
|
-
"DOCKER_REGISTRY": "$CI_REGISTRY",
|
|
388
|
-
"ENV_SHORT": "dev",
|
|
389
|
-
"ENV_TYPE": "dev",
|
|
390
|
-
"HELM_ARGS": "",
|
|
391
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
392
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
393
|
-
"HOST": "api.dev.test-app.pan.panter.cloud",
|
|
394
|
-
"HOST_CANONICAL": "api.dev.test-app.pan.panter.cloud",
|
|
395
|
-
"HOST_INTERNAL": "api.dev.test-app.pan.panter.cloud",
|
|
396
|
-
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
397
|
-
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
398
|
-
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
399
|
-
"KUBE_APP_NAME": "api",
|
|
400
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
401
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
402
|
-
"KUBE_NAMESPACE": "pan-test-app-dev",
|
|
403
|
-
"KUBE_VALUES": "env:
|
|
377
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
|
|
378
|
+
"cat > __all_values.yml <<EOF
|
|
379
|
+
env:
|
|
404
380
|
secret:
|
|
405
|
-
POSTGRESQL_PASSWORD:
|
|
406
|
-
|
|
381
|
+
POSTGRESQL_PASSWORD: |-
|
|
382
|
+
$(printf %s "$CL_dev_api_POSTGRESQL_PASSWORD" | sed 's/^/ /')
|
|
383
|
+
cloudsqlProxyCredentials: |-
|
|
384
|
+
$(printf %s "$CL_dev_api_cloudsqlProxyCredentials" | sed 's/^/ /')
|
|
407
385
|
public:
|
|
408
|
-
ENV_SHORT:
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
386
|
+
ENV_SHORT: |-
|
|
387
|
+
dev
|
|
388
|
+
APP_DIR: |-
|
|
389
|
+
api
|
|
390
|
+
ENV_TYPE: |-
|
|
391
|
+
dev
|
|
392
|
+
BUILD_INFO_BUILD_ID: |-
|
|
393
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
|
|
394
|
+
BUILD_INFO_BUILD_TIME: |-
|
|
395
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
|
|
396
|
+
BUILD_INFO_CURRENT_VERSION: |-
|
|
397
|
+
$(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/^/ /')
|
|
398
|
+
HOST: |-
|
|
399
|
+
api.dev.test-app.pan.panter.cloud
|
|
400
|
+
ROOT_URL: |-
|
|
401
|
+
https://api.dev.test-app.pan.panter.cloud
|
|
402
|
+
HOST_INTERNAL: |-
|
|
403
|
+
api.dev.test-app.pan.panter.cloud
|
|
404
|
+
HOST_CANONICAL: |-
|
|
405
|
+
api.dev.test-app.pan.panter.cloud
|
|
406
|
+
ROOT_URL_INTERNAL: |-
|
|
407
|
+
https://api.dev.test-app.pan.panter.cloud
|
|
408
|
+
KUBE_NAMESPACE: |-
|
|
409
|
+
pan-test-app-dev
|
|
410
|
+
KUBE_APP_NAME: |-
|
|
411
|
+
api
|
|
412
|
+
KUBE_APP_NAME_PREFIX: ""
|
|
413
|
+
_ALL_ENV_VAR_KEYS: |-
|
|
414
|
+
["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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]
|
|
423
415
|
application:
|
|
424
|
-
host:
|
|
425
|
-
|
|
416
|
+
host: |-
|
|
417
|
+
api.dev.test-app.pan.panter.cloud
|
|
418
|
+
command: |-
|
|
419
|
+
yarn start
|
|
426
420
|
livenessProbe:
|
|
427
421
|
httpGet:
|
|
428
|
-
path:
|
|
422
|
+
path: |-
|
|
423
|
+
__health
|
|
429
424
|
readinessProbe:
|
|
430
425
|
httpGet:
|
|
431
|
-
path:
|
|
426
|
+
path: |-
|
|
427
|
+
__health
|
|
432
428
|
startupProbe:
|
|
433
429
|
httpGet:
|
|
434
|
-
path:
|
|
430
|
+
path: |-
|
|
431
|
+
__health
|
|
435
432
|
cloudsql:
|
|
436
433
|
enabled: true
|
|
437
|
-
dbUser:
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
434
|
+
dbUser: |-
|
|
435
|
+
postgres
|
|
436
|
+
instanceConnectionName: |-
|
|
437
|
+
myproject:europe-west6:instance-name
|
|
438
|
+
proxyCredentials: |-
|
|
439
|
+
$CL_dev_api_cloudsqlProxyCredentials
|
|
440
|
+
fullDbName: |-
|
|
441
|
+
pan-test-app-dev-api
|
|
442
|
+
type: |-
|
|
443
|
+
unmanaged
|
|
444
|
+
|
|
445
|
+
EOF
|
|
442
446
|
",
|
|
443
|
-
"
|
|
444
|
-
"
|
|
445
|
-
"
|
|
446
|
-
"
|
|
447
|
-
"
|
|
448
|
-
"
|
|
447
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
|
|
448
|
+
"kubernetesCreateSecret",
|
|
449
|
+
"kubernetesDeploy",
|
|
450
|
+
"echo Uploading SBOM to Dependency Track",
|
|
451
|
+
"/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",
|
|
452
|
+
"echo deployment successful ๐ป",
|
|
453
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
454
|
+
],
|
|
455
|
+
"stage": "deploy dev",
|
|
456
|
+
"variables": {
|
|
457
|
+
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
458
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
459
|
+
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
449
460
|
},
|
|
450
461
|
},
|
|
451
462
|
"api ๐ Stop โ ๏ธ | dev ": {
|
|
463
|
+
"allow_failure": true,
|
|
464
|
+
"artifacts": {
|
|
465
|
+
"reports": {
|
|
466
|
+
"dotenv": "gitlab_environment.env",
|
|
467
|
+
},
|
|
468
|
+
},
|
|
452
469
|
"environment": {
|
|
453
470
|
"action": "stop",
|
|
454
471
|
"name": "dev/api",
|
|
455
|
-
"url": "
|
|
472
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
456
473
|
},
|
|
457
474
|
"image": "path/to/docker/kubernetes:the-version",
|
|
458
475
|
"interruptible": true,
|
|
@@ -466,16 +483,40 @@ cloudsql:
|
|
|
466
483
|
},
|
|
467
484
|
"rules": [
|
|
468
485
|
{
|
|
469
|
-
"allow_failure": true,
|
|
470
486
|
"if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
|
|
471
487
|
"when": "on_success",
|
|
472
488
|
},
|
|
473
489
|
{
|
|
474
|
-
"allow_failure": true,
|
|
475
490
|
"when": "manual",
|
|
476
491
|
},
|
|
477
492
|
],
|
|
478
493
|
"script": [
|
|
494
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
495
|
+
"export ENV_SHORT="dev"",
|
|
496
|
+
"export APP_DIR="api"",
|
|
497
|
+
"export ENV_TYPE="dev"",
|
|
498
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
499
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
500
|
+
"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")"",
|
|
501
|
+
"export HOST="api.dev.test-app.pan.panter.cloud"",
|
|
502
|
+
"export ROOT_URL="https://api.dev.test-app.pan.panter.cloud"",
|
|
503
|
+
"export HOST_INTERNAL="api.dev.test-app.pan.panter.cloud"",
|
|
504
|
+
"export HOST_CANONICAL="api.dev.test-app.pan.panter.cloud"",
|
|
505
|
+
"export ROOT_URL_INTERNAL="https://api.dev.test-app.pan.panter.cloud"",
|
|
506
|
+
"export KUBE_NAMESPACE="pan-test-app-dev"",
|
|
507
|
+
"export KUBE_APP_NAME="api"",
|
|
508
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
509
|
+
"export POSTGRESQL_PASSWORD="$CL_dev_api_POSTGRESQL_PASSWORD"",
|
|
510
|
+
"export cloudsqlProxyCredentials="$CL_dev_api_cloudsqlProxyCredentials"",
|
|
511
|
+
"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\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\"]"",
|
|
512
|
+
"export RELEASE_NAME="pan-test-app-dev-api"",
|
|
513
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
514
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
515
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
516
|
+
"export HELM_ARGS=""",
|
|
517
|
+
"export COMPONENT_NAME="api"",
|
|
518
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
519
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
479
520
|
"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",
|
|
480
521
|
"kubectl config set-credentials "kube-pan-test-app-dev-api" --token="$CL_dev_api_KUBE_TOKEN"",
|
|
481
522
|
"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"",
|
|
@@ -483,77 +524,14 @@ cloudsql:
|
|
|
483
524
|
"kubernetesDelete",
|
|
484
525
|
"echo Disabling component in Dependency Track",
|
|
485
526
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.dev.test-app.pan.panter.cloud" || true",
|
|
527
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
486
528
|
],
|
|
487
529
|
"stage": "stop dev",
|
|
488
530
|
"variables": {
|
|
489
|
-
"APP_DIR": "api",
|
|
490
|
-
"BUILD_ID": "some-id",
|
|
491
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
492
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
493
|
-
"BUILD_INFO_ID": "some-id",
|
|
494
|
-
"COMPONENT_NAME": "api",
|
|
495
|
-
"ENV_SHORT": "dev",
|
|
496
|
-
"ENV_TYPE": "dev",
|
|
497
531
|
"GIT_STRATEGY": "none",
|
|
498
|
-
"HELM_ARGS": "",
|
|
499
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
500
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
501
|
-
"HOST": "api.dev.test-app.pan.panter.cloud",
|
|
502
|
-
"HOST_CANONICAL": "api.dev.test-app.pan.panter.cloud",
|
|
503
|
-
"HOST_INTERNAL": "api.dev.test-app.pan.panter.cloud",
|
|
504
532
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
505
533
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
506
534
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
507
|
-
"KUBE_APP_NAME": "api",
|
|
508
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
509
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
510
|
-
"KUBE_NAMESPACE": "pan-test-app-dev",
|
|
511
|
-
"KUBE_VALUES": "env:
|
|
512
|
-
secret:
|
|
513
|
-
POSTGRESQL_PASSWORD: '$CL_dev_api_POSTGRESQL_PASSWORD'
|
|
514
|
-
cloudsqlProxyCredentials: '$CL_dev_api_cloudsqlProxyCredentials'
|
|
515
|
-
public:
|
|
516
|
-
ENV_SHORT: 'dev'
|
|
517
|
-
APP_DIR: 'api'
|
|
518
|
-
ENV_TYPE: 'dev'
|
|
519
|
-
BUILD_INFO_ID: 'some-id'
|
|
520
|
-
BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
|
|
521
|
-
BUILD_INFO_CURRENT_VERSION: '3.2.1'
|
|
522
|
-
HOST: 'api.dev.test-app.pan.panter.cloud'
|
|
523
|
-
ROOT_URL: 'https://api.dev.test-app.pan.panter.cloud'
|
|
524
|
-
HOST_CANONICAL: 'api.dev.test-app.pan.panter.cloud'
|
|
525
|
-
ROOT_URL_INTERNAL: 'https://api.dev.test-app.pan.panter.cloud'
|
|
526
|
-
KUBE_NAMESPACE: 'pan-test-app-dev'
|
|
527
|
-
KUBE_APP_NAME: 'api'
|
|
528
|
-
KUBE_APP_NAME_PREFIX: ''
|
|
529
|
-
HOST_INTERNAL: 'api.dev.test-app.pan.panter.cloud'
|
|
530
|
-
_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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]'
|
|
531
|
-
application:
|
|
532
|
-
host: 'api.dev.test-app.pan.panter.cloud'
|
|
533
|
-
command: 'yarn start'
|
|
534
|
-
livenessProbe:
|
|
535
|
-
httpGet:
|
|
536
|
-
path: '__health'
|
|
537
|
-
readinessProbe:
|
|
538
|
-
httpGet:
|
|
539
|
-
path: '__health'
|
|
540
|
-
startupProbe:
|
|
541
|
-
httpGet:
|
|
542
|
-
path: '__health'
|
|
543
|
-
cloudsql:
|
|
544
|
-
enabled: true
|
|
545
|
-
dbUser: 'postgres'
|
|
546
|
-
instanceConnectionName: 'myproject:europe-west6:instance-name'
|
|
547
|
-
proxyCredentials: '$CL_dev_api_cloudsqlProxyCredentials'
|
|
548
|
-
fullDbName: 'pan-test-app-dev-api'
|
|
549
|
-
type: 'unmanaged'
|
|
550
|
-
",
|
|
551
|
-
"POSTGRESQL_PASSWORD": "$CL_dev_api_POSTGRESQL_PASSWORD",
|
|
552
|
-
"RELEASE_NAME": "pan-test-app-dev-api",
|
|
553
|
-
"ROOT_URL": "https://api.dev.test-app.pan.panter.cloud",
|
|
554
|
-
"ROOT_URL_INTERNAL": "https://api.dev.test-app.pan.panter.cloud",
|
|
555
|
-
"_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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]",
|
|
556
|
-
"cloudsqlProxyCredentials": "$CL_dev_api_cloudsqlProxyCredentials",
|
|
557
535
|
},
|
|
558
536
|
},
|
|
559
537
|
"api ๐ก audit": {
|
|
@@ -569,12 +547,14 @@ cloudsql:
|
|
|
569
547
|
],
|
|
570
548
|
},
|
|
571
549
|
"script": [
|
|
550
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
551
|
+
"export APP_PATH="api"",
|
|
552
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
572
553
|
"cd api",
|
|
573
554
|
"yarn npm audit --environment production",
|
|
574
555
|
],
|
|
575
556
|
"stage": "test",
|
|
576
557
|
"variables": {
|
|
577
|
-
"APP_PATH": "api",
|
|
578
558
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
579
559
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
580
560
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
@@ -608,6 +588,9 @@ cloudsql:
|
|
|
608
588
|
],
|
|
609
589
|
},
|
|
610
590
|
"script": [
|
|
591
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
592
|
+
"export APP_PATH="api"",
|
|
593
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
611
594
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
612
595
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
613
596
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -624,7 +607,6 @@ cloudsql:
|
|
|
624
607
|
],
|
|
625
608
|
"stage": "test",
|
|
626
609
|
"variables": {
|
|
627
|
-
"APP_PATH": "api",
|
|
628
610
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
629
611
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
630
612
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
@@ -648,6 +630,8 @@ cloudsql:
|
|
|
648
630
|
],
|
|
649
631
|
},
|
|
650
632
|
"script": [
|
|
633
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
634
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
651
635
|
"trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
|
|
652
636
|
],
|
|
653
637
|
"stage": "build",
|
|
@@ -700,7 +684,7 @@ cloudsql:
|
|
|
700
684
|
],
|
|
701
685
|
"variables": {
|
|
702
686
|
"FF_USE_FASTZIP": "true",
|
|
703
|
-
"GIT_DEPTH": 1,
|
|
687
|
+
"GIT_DEPTH": "1",
|
|
704
688
|
},
|
|
705
689
|
"workflow": {
|
|
706
690
|
"rules": [
|
|
@@ -731,10 +715,16 @@ cloudsql:
|
|
|
731
715
|
"image": "path/to/docker/jobs-default:the-version",
|
|
732
716
|
"jobs": {
|
|
733
717
|
"api โฉ๏ธ Rollback โ ๏ธ | review ": {
|
|
718
|
+
"allow_failure": true,
|
|
719
|
+
"artifacts": {
|
|
720
|
+
"reports": {
|
|
721
|
+
"dotenv": "gitlab_environment.env",
|
|
722
|
+
},
|
|
723
|
+
},
|
|
734
724
|
"environment": {
|
|
735
725
|
"action": "access",
|
|
736
|
-
"name": "review/
|
|
737
|
-
"url": "
|
|
726
|
+
"name": "review/$CI_COMMIT_REF_NAME/api",
|
|
727
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
738
728
|
},
|
|
739
729
|
"image": "path/to/docker/kubernetes:the-version",
|
|
740
730
|
"interruptible": true,
|
|
@@ -748,87 +738,49 @@ cloudsql:
|
|
|
748
738
|
},
|
|
749
739
|
"rules": [
|
|
750
740
|
{
|
|
751
|
-
"allow_failure": true,
|
|
752
741
|
"when": "manual",
|
|
753
742
|
},
|
|
754
743
|
],
|
|
755
744
|
"script": [
|
|
756
|
-
"
|
|
757
|
-
"
|
|
758
|
-
"
|
|
759
|
-
"
|
|
745
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
746
|
+
"export ENV_SHORT="review"",
|
|
747
|
+
"export APP_DIR="api"",
|
|
748
|
+
"export ENV_TYPE="review"",
|
|
749
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
750
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
751
|
+
"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")"",
|
|
752
|
+
"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"",
|
|
753
|
+
"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"",
|
|
754
|
+
"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"",
|
|
755
|
+
"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"",
|
|
756
|
+
"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"",
|
|
757
|
+
"export KUBE_NAMESPACE="pan-test-app-review"",
|
|
758
|
+
"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"",
|
|
759
|
+
"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"; })-"",
|
|
760
|
+
"export POSTGRESQL_PASSWORD="$CL_review_api_POSTGRESQL_PASSWORD"",
|
|
761
|
+
"export cloudsqlProxyCredentials="$CL_review_api_cloudsqlProxyCredentials"",
|
|
762
|
+
"export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\"]"",
|
|
763
|
+
"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"",
|
|
764
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
765
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
766
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
767
|
+
"export HELM_ARGS=""",
|
|
768
|
+
"export COMPONENT_NAME="api"",
|
|
769
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
770
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
771
|
+
"kubectl config set-cluster "kube-pan-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",
|
|
772
|
+
"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"",
|
|
773
|
+
"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"",
|
|
774
|
+
"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"",
|
|
760
775
|
"kubernetesRollback",
|
|
776
|
+
"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",
|
|
761
777
|
],
|
|
762
778
|
"stage": "rollback review",
|
|
763
779
|
"variables": {
|
|
764
|
-
"APP_DIR": "api",
|
|
765
|
-
"BUILD_ID": "some-id",
|
|
766
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
767
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
768
|
-
"BUILD_INFO_ID": "some-id",
|
|
769
|
-
"COMPONENT_NAME": "api",
|
|
770
|
-
"ENV_SHORT": "review",
|
|
771
|
-
"ENV_TYPE": "review",
|
|
772
780
|
"GIT_STRATEGY": "none",
|
|
773
|
-
"HELM_ARGS": "",
|
|
774
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
775
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
776
|
-
"HOST": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
777
|
-
"HOST_CANONICAL": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
778
|
-
"HOST_INTERNAL": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
779
781
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
780
782
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
781
783
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
782
|
-
"KUBE_APP_NAME": "mr1234-api",
|
|
783
|
-
"KUBE_APP_NAME_PREFIX": "mr1234-",
|
|
784
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
785
|
-
"KUBE_NAMESPACE": "pan-test-app-review",
|
|
786
|
-
"KUBE_VALUES": "env:
|
|
787
|
-
secret:
|
|
788
|
-
POSTGRESQL_PASSWORD: '$CL_review_api_POSTGRESQL_PASSWORD'
|
|
789
|
-
cloudsqlProxyCredentials: '$CL_review_api_cloudsqlProxyCredentials'
|
|
790
|
-
public:
|
|
791
|
-
ENV_SHORT: 'review'
|
|
792
|
-
APP_DIR: 'api'
|
|
793
|
-
ENV_TYPE: 'review'
|
|
794
|
-
BUILD_INFO_ID: 'some-id'
|
|
795
|
-
BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
|
|
796
|
-
BUILD_INFO_CURRENT_VERSION: '3.2.1'
|
|
797
|
-
HOST: 'api.mr1234.review.test-app.pan.panter.cloud'
|
|
798
|
-
ROOT_URL: 'https://api.mr1234.review.test-app.pan.panter.cloud'
|
|
799
|
-
HOST_CANONICAL: 'api.mr1234.review.test-app.pan.panter.cloud'
|
|
800
|
-
ROOT_URL_INTERNAL: 'https://api.mr1234.review.test-app.pan.panter.cloud'
|
|
801
|
-
KUBE_NAMESPACE: 'pan-test-app-review'
|
|
802
|
-
KUBE_APP_NAME: 'mr1234-api'
|
|
803
|
-
KUBE_APP_NAME_PREFIX: 'mr1234-'
|
|
804
|
-
HOST_INTERNAL: 'api.mr1234.review.test-app.pan.panter.cloud'
|
|
805
|
-
_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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]'
|
|
806
|
-
application:
|
|
807
|
-
host: 'api.mr1234.review.test-app.pan.panter.cloud'
|
|
808
|
-
command: 'yarn start'
|
|
809
|
-
livenessProbe:
|
|
810
|
-
httpGet:
|
|
811
|
-
path: '__health'
|
|
812
|
-
readinessProbe:
|
|
813
|
-
httpGet:
|
|
814
|
-
path: '__health'
|
|
815
|
-
startupProbe:
|
|
816
|
-
httpGet:
|
|
817
|
-
path: '__health'
|
|
818
|
-
cloudsql:
|
|
819
|
-
enabled: true
|
|
820
|
-
dbUser: 'postgres'
|
|
821
|
-
instanceConnectionName: 'myproject:europe-west6:instance-name'
|
|
822
|
-
proxyCredentials: '$CL_review_api_cloudsqlProxyCredentials'
|
|
823
|
-
fullDbName: 'pan-test-app-review-mr1234-api'
|
|
824
|
-
type: 'unmanaged'
|
|
825
|
-
",
|
|
826
|
-
"POSTGRESQL_PASSWORD": "$CL_review_api_POSTGRESQL_PASSWORD",
|
|
827
|
-
"RELEASE_NAME": "pan-test-app-review-mr1234-api",
|
|
828
|
-
"ROOT_URL": "https://api.mr1234.review.test-app.pan.panter.cloud",
|
|
829
|
-
"ROOT_URL_INTERNAL": "https://api.mr1234.review.test-app.pan.panter.cloud",
|
|
830
|
-
"_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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]",
|
|
831
|
-
"cloudsqlProxyCredentials": "$CL_review_api_cloudsqlProxyCredentials",
|
|
832
784
|
},
|
|
833
785
|
},
|
|
834
786
|
"api ๐ฎ lint": {
|
|
@@ -859,6 +811,9 @@ cloudsql:
|
|
|
859
811
|
],
|
|
860
812
|
},
|
|
861
813
|
"script": [
|
|
814
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
815
|
+
"export APP_PATH="api"",
|
|
816
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
862
817
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
863
818
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
864
819
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -875,7 +830,6 @@ cloudsql:
|
|
|
875
830
|
],
|
|
876
831
|
"stage": "test",
|
|
877
832
|
"variables": {
|
|
878
|
-
"APP_PATH": "api",
|
|
879
833
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
880
834
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
881
835
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
@@ -928,7 +882,26 @@ cloudsql:
|
|
|
928
882
|
],
|
|
929
883
|
},
|
|
930
884
|
"script": [
|
|
931
|
-
"echo
|
|
885
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
886
|
+
"export ENV_SHORT="review"",
|
|
887
|
+
"export APP_DIR="api"",
|
|
888
|
+
"export ENV_TYPE="review"",
|
|
889
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
890
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
891
|
+
"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")"",
|
|
892
|
+
"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"",
|
|
893
|
+
"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"",
|
|
894
|
+
"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"",
|
|
895
|
+
"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"",
|
|
896
|
+
"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"",
|
|
897
|
+
"export KUBE_NAMESPACE="pan-test-app-review"",
|
|
898
|
+
"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"",
|
|
899
|
+
"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"; })-"",
|
|
900
|
+
"export POSTGRESQL_PASSWORD="$CL_review_api_POSTGRESQL_PASSWORD"",
|
|
901
|
+
"export cloudsqlProxyCredentials="$CL_review_api_cloudsqlProxyCredentials"",
|
|
902
|
+
"export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\"]"",
|
|
903
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
904
|
+
"echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
|
|
932
905
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
933
906
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
934
907
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -945,26 +918,9 @@ cloudsql:
|
|
|
945
918
|
],
|
|
946
919
|
"stage": "build",
|
|
947
920
|
"variables": {
|
|
948
|
-
"APP_DIR": "api",
|
|
949
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
950
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
951
|
-
"BUILD_INFO_ID": "some-id",
|
|
952
|
-
"ENV_SHORT": "review",
|
|
953
|
-
"ENV_TYPE": "review",
|
|
954
|
-
"HOST": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
955
|
-
"HOST_CANONICAL": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
956
|
-
"HOST_INTERNAL": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
957
921
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
958
922
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
959
923
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
960
|
-
"KUBE_APP_NAME": "mr1234-api",
|
|
961
|
-
"KUBE_APP_NAME_PREFIX": "mr1234-",
|
|
962
|
-
"KUBE_NAMESPACE": "pan-test-app-review",
|
|
963
|
-
"POSTGRESQL_PASSWORD": "$CL_review_api_POSTGRESQL_PASSWORD",
|
|
964
|
-
"ROOT_URL": "https://api.mr1234.review.test-app.pan.panter.cloud",
|
|
965
|
-
"ROOT_URL_INTERNAL": "https://api.mr1234.review.test-app.pan.panter.cloud",
|
|
966
|
-
"_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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]",
|
|
967
|
-
"cloudsqlProxyCredentials": "$CL_review_api_cloudsqlProxyCredentials",
|
|
968
924
|
},
|
|
969
925
|
},
|
|
970
926
|
"api ๐จ docker | review ": {
|
|
@@ -990,6 +946,22 @@ cloudsql:
|
|
|
990
946
|
],
|
|
991
947
|
},
|
|
992
948
|
"script": [
|
|
949
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
950
|
+
"export APP_DIR="api"",
|
|
951
|
+
"export DOCKER_DIR="."",
|
|
952
|
+
"export DOCKER_REGISTRY="$CI_REGISTRY"",
|
|
953
|
+
"export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
|
|
954
|
+
"export DOCKER_IMAGE_NAME="review/api"",
|
|
955
|
+
"export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
|
|
956
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
957
|
+
"export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
|
|
958
|
+
RUN yarn plugin import workspace-tools
|
|
959
|
+
RUN yarn workspaces focus --production && yarn rebuild"",
|
|
960
|
+
"export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
|
|
961
|
+
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
962
|
+
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
963
|
+
COPY --chown=node:node .yarn /app/.yarn"",
|
|
964
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
993
965
|
"ensureNodeDockerfile",
|
|
994
966
|
"echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
|
|
995
967
|
"docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
|
|
@@ -1013,25 +985,9 @@ cloudsql:
|
|
|
1013
985
|
],
|
|
1014
986
|
"stage": "build",
|
|
1015
987
|
"variables": {
|
|
1016
|
-
"APP_DIR": "api",
|
|
1017
|
-
"DOCKERFILE_ADDITIONS": undefined,
|
|
1018
|
-
"DOCKERFILE_ADDITIONS_END": undefined,
|
|
1019
988
|
"DOCKER_BUILDKIT": "1",
|
|
1020
|
-
"DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
|
|
1021
|
-
"DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
|
|
1022
|
-
RUN yarn plugin import workspace-tools
|
|
1023
|
-
RUN yarn workspaces focus --production && yarn rebuild",
|
|
1024
|
-
"DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
|
|
1025
|
-
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1026
|
-
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1027
|
-
COPY --chown=node:node .yarn /app/.yarn",
|
|
1028
|
-
"DOCKER_DIR": ".",
|
|
1029
989
|
"DOCKER_DRIVER": "overlay2",
|
|
1030
990
|
"DOCKER_HOST": "tcp://0.0.0.0:2375",
|
|
1031
|
-
"DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
|
|
1032
|
-
"DOCKER_IMAGE_NAME": "review/api",
|
|
1033
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
1034
|
-
"DOCKER_REGISTRY": "$CI_REGISTRY",
|
|
1035
991
|
"DOCKER_TLS_CERTDIR": "",
|
|
1036
992
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1037
993
|
"KUBERNETES_MEMORY_LIMIT": "2Gi",
|
|
@@ -1040,11 +996,16 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1040
996
|
},
|
|
1041
997
|
"api ๐ Deploy | review ": {
|
|
1042
998
|
"allow_failure": false,
|
|
999
|
+
"artifacts": {
|
|
1000
|
+
"reports": {
|
|
1001
|
+
"dotenv": "gitlab_environment.env",
|
|
1002
|
+
},
|
|
1003
|
+
},
|
|
1043
1004
|
"environment": {
|
|
1044
1005
|
"auto_stop_in": "1 week",
|
|
1045
|
-
"name": "review/
|
|
1006
|
+
"name": "review/$CI_COMMIT_REF_NAME/api",
|
|
1046
1007
|
"on_stop": "api ๐ Stop โ ๏ธ | review ",
|
|
1047
|
-
"url": "
|
|
1008
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
1048
1009
|
},
|
|
1049
1010
|
"image": "path/to/docker/kubernetes:the-version",
|
|
1050
1011
|
"interruptible": true,
|
|
@@ -1087,97 +1048,138 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1087
1048
|
},
|
|
1088
1049
|
],
|
|
1089
1050
|
"script": [
|
|
1090
|
-
"
|
|
1091
|
-
"
|
|
1092
|
-
"
|
|
1093
|
-
"
|
|
1094
|
-
"
|
|
1095
|
-
"
|
|
1096
|
-
"
|
|
1097
|
-
"
|
|
1098
|
-
"echo
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
"
|
|
1103
|
-
"
|
|
1104
|
-
"
|
|
1105
|
-
"
|
|
1106
|
-
"
|
|
1107
|
-
"
|
|
1108
|
-
"
|
|
1109
|
-
"
|
|
1110
|
-
"DOCKER_IMAGE_NAME"
|
|
1111
|
-
"
|
|
1112
|
-
"
|
|
1113
|
-
"
|
|
1114
|
-
"
|
|
1115
|
-
"
|
|
1116
|
-
"
|
|
1117
|
-
"
|
|
1118
|
-
"
|
|
1119
|
-
"
|
|
1120
|
-
"
|
|
1121
|
-
"
|
|
1122
|
-
"
|
|
1123
|
-
"
|
|
1124
|
-
"
|
|
1125
|
-
"
|
|
1126
|
-
"
|
|
1127
|
-
|
|
1128
|
-
"KUBE_VALUES": "env:
|
|
1051
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1052
|
+
"export ENV_SHORT="review"",
|
|
1053
|
+
"export APP_DIR="api"",
|
|
1054
|
+
"export ENV_TYPE="review"",
|
|
1055
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1056
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
1057
|
+
"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")"",
|
|
1058
|
+
"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"",
|
|
1059
|
+
"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"",
|
|
1060
|
+
"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"",
|
|
1061
|
+
"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"",
|
|
1062
|
+
"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"",
|
|
1063
|
+
"export KUBE_NAMESPACE="pan-test-app-review"",
|
|
1064
|
+
"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"",
|
|
1065
|
+
"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"; })-"",
|
|
1066
|
+
"export POSTGRESQL_PASSWORD="$CL_review_api_POSTGRESQL_PASSWORD"",
|
|
1067
|
+
"export cloudsqlProxyCredentials="$CL_review_api_cloudsqlProxyCredentials"",
|
|
1068
|
+
"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\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\"]"",
|
|
1069
|
+
"export DOCKER_REGISTRY="$CI_REGISTRY"",
|
|
1070
|
+
"export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
|
|
1071
|
+
"export DOCKER_IMAGE_NAME="review/api"",
|
|
1072
|
+
"export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
|
|
1073
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
1074
|
+
"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"",
|
|
1075
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
1076
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
1077
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
1078
|
+
"export HELM_ARGS=""",
|
|
1079
|
+
"export COMPONENT_NAME="api"",
|
|
1080
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1081
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1082
|
+
"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",
|
|
1083
|
+
"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"",
|
|
1084
|
+
"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"",
|
|
1085
|
+
"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"",
|
|
1086
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
|
|
1087
|
+
"cat > __all_values.yml <<EOF
|
|
1088
|
+
env:
|
|
1129
1089
|
secret:
|
|
1130
|
-
POSTGRESQL_PASSWORD:
|
|
1131
|
-
|
|
1090
|
+
POSTGRESQL_PASSWORD: |-
|
|
1091
|
+
$(printf %s "$CL_review_api_POSTGRESQL_PASSWORD" | sed 's/^/ /')
|
|
1092
|
+
cloudsqlProxyCredentials: |-
|
|
1093
|
+
$(printf %s "$CL_review_api_cloudsqlProxyCredentials" | sed 's/^/ /')
|
|
1132
1094
|
public:
|
|
1133
|
-
ENV_SHORT:
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1095
|
+
ENV_SHORT: |-
|
|
1096
|
+
review
|
|
1097
|
+
APP_DIR: |-
|
|
1098
|
+
api
|
|
1099
|
+
ENV_TYPE: |-
|
|
1100
|
+
review
|
|
1101
|
+
BUILD_INFO_BUILD_ID: |-
|
|
1102
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
|
|
1103
|
+
BUILD_INFO_BUILD_TIME: |-
|
|
1104
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
|
|
1105
|
+
BUILD_INFO_CURRENT_VERSION: |-
|
|
1106
|
+
$(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/^/ /')
|
|
1107
|
+
HOST: |-
|
|
1108
|
+
$(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/^/ /')
|
|
1109
|
+
ROOT_URL: |-
|
|
1110
|
+
$(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/^/ /')
|
|
1111
|
+
HOST_INTERNAL: |-
|
|
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
|
+
HOST_CANONICAL: |-
|
|
1114
|
+
$(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/^/ /')
|
|
1115
|
+
ROOT_URL_INTERNAL: |-
|
|
1116
|
+
$(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/^/ /')
|
|
1117
|
+
KUBE_NAMESPACE: |-
|
|
1118
|
+
pan-test-app-review
|
|
1119
|
+
KUBE_APP_NAME: |-
|
|
1120
|
+
$(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/^/ /')
|
|
1121
|
+
KUBE_APP_NAME_PREFIX: |-
|
|
1122
|
+
$(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/^/ /')
|
|
1123
|
+
_ALL_ENV_VAR_KEYS: |-
|
|
1124
|
+
["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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]
|
|
1148
1125
|
application:
|
|
1149
|
-
host:
|
|
1150
|
-
|
|
1126
|
+
host: |-
|
|
1127
|
+
$(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/^/ /')
|
|
1128
|
+
command: |-
|
|
1129
|
+
yarn start
|
|
1151
1130
|
livenessProbe:
|
|
1152
1131
|
httpGet:
|
|
1153
|
-
path:
|
|
1132
|
+
path: |-
|
|
1133
|
+
__health
|
|
1154
1134
|
readinessProbe:
|
|
1155
1135
|
httpGet:
|
|
1156
|
-
path:
|
|
1136
|
+
path: |-
|
|
1137
|
+
__health
|
|
1157
1138
|
startupProbe:
|
|
1158
1139
|
httpGet:
|
|
1159
|
-
path:
|
|
1140
|
+
path: |-
|
|
1141
|
+
__health
|
|
1160
1142
|
cloudsql:
|
|
1161
1143
|
enabled: true
|
|
1162
|
-
dbUser:
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1144
|
+
dbUser: |-
|
|
1145
|
+
postgres
|
|
1146
|
+
instanceConnectionName: |-
|
|
1147
|
+
myproject:europe-west6:instance-name
|
|
1148
|
+
proxyCredentials: |-
|
|
1149
|
+
$CL_review_api_cloudsqlProxyCredentials
|
|
1150
|
+
fullDbName: |-
|
|
1151
|
+
$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | sed 's/^/ /')
|
|
1152
|
+
type: |-
|
|
1153
|
+
unmanaged
|
|
1154
|
+
|
|
1155
|
+
EOF
|
|
1167
1156
|
",
|
|
1168
|
-
"
|
|
1169
|
-
"
|
|
1170
|
-
"
|
|
1171
|
-
"
|
|
1172
|
-
"
|
|
1173
|
-
"
|
|
1157
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
|
|
1158
|
+
"kubernetesCreateSecret",
|
|
1159
|
+
"kubernetesDeploy",
|
|
1160
|
+
"echo Uploading SBOM to Dependency Track",
|
|
1161
|
+
"/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",
|
|
1162
|
+
"echo deployment successful ๐ป",
|
|
1163
|
+
"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",
|
|
1164
|
+
],
|
|
1165
|
+
"stage": "deploy review",
|
|
1166
|
+
"variables": {
|
|
1167
|
+
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1168
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1169
|
+
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1174
1170
|
},
|
|
1175
1171
|
},
|
|
1176
1172
|
"api ๐ Stop โ ๏ธ | review ": {
|
|
1173
|
+
"allow_failure": true,
|
|
1174
|
+
"artifacts": {
|
|
1175
|
+
"reports": {
|
|
1176
|
+
"dotenv": "gitlab_environment.env",
|
|
1177
|
+
},
|
|
1178
|
+
},
|
|
1177
1179
|
"environment": {
|
|
1178
1180
|
"action": "stop",
|
|
1179
|
-
"name": "review/
|
|
1180
|
-
"url": "
|
|
1181
|
+
"name": "review/$CI_COMMIT_REF_NAME/api",
|
|
1182
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
1181
1183
|
},
|
|
1182
1184
|
"image": "path/to/docker/kubernetes:the-version",
|
|
1183
1185
|
"interruptible": true,
|
|
@@ -1191,94 +1193,55 @@ cloudsql:
|
|
|
1191
1193
|
},
|
|
1192
1194
|
"rules": [
|
|
1193
1195
|
{
|
|
1194
|
-
"allow_failure": true,
|
|
1195
1196
|
"if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
|
|
1196
1197
|
"when": "on_success",
|
|
1197
1198
|
},
|
|
1198
1199
|
{
|
|
1199
|
-
"allow_failure": true,
|
|
1200
1200
|
"when": "manual",
|
|
1201
1201
|
},
|
|
1202
1202
|
],
|
|
1203
1203
|
"script": [
|
|
1204
|
-
"
|
|
1205
|
-
"
|
|
1206
|
-
"
|
|
1207
|
-
"
|
|
1204
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1205
|
+
"export ENV_SHORT="review"",
|
|
1206
|
+
"export APP_DIR="api"",
|
|
1207
|
+
"export ENV_TYPE="review"",
|
|
1208
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1209
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
1210
|
+
"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")"",
|
|
1211
|
+
"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"",
|
|
1212
|
+
"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"",
|
|
1213
|
+
"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"",
|
|
1214
|
+
"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"",
|
|
1215
|
+
"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"",
|
|
1216
|
+
"export KUBE_NAMESPACE="pan-test-app-review"",
|
|
1217
|
+
"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"",
|
|
1218
|
+
"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"; })-"",
|
|
1219
|
+
"export POSTGRESQL_PASSWORD="$CL_review_api_POSTGRESQL_PASSWORD"",
|
|
1220
|
+
"export cloudsqlProxyCredentials="$CL_review_api_cloudsqlProxyCredentials"",
|
|
1221
|
+
"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\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\"]"",
|
|
1222
|
+
"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"",
|
|
1223
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
1224
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
1225
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
1226
|
+
"export HELM_ARGS=""",
|
|
1227
|
+
"export COMPONENT_NAME="api"",
|
|
1228
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1229
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1230
|
+
"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",
|
|
1231
|
+
"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"",
|
|
1232
|
+
"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"",
|
|
1233
|
+
"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"",
|
|
1208
1234
|
"kubernetesDelete",
|
|
1209
1235
|
"echo Disabling component in Dependency Track",
|
|
1210
|
-
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.
|
|
1236
|
+
"/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",
|
|
1237
|
+
"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",
|
|
1211
1238
|
],
|
|
1212
1239
|
"stage": "stop review",
|
|
1213
1240
|
"variables": {
|
|
1214
|
-
"APP_DIR": "api",
|
|
1215
|
-
"BUILD_ID": "some-id",
|
|
1216
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
1217
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
1218
|
-
"BUILD_INFO_ID": "some-id",
|
|
1219
|
-
"COMPONENT_NAME": "api",
|
|
1220
|
-
"ENV_SHORT": "review",
|
|
1221
|
-
"ENV_TYPE": "review",
|
|
1222
1241
|
"GIT_STRATEGY": "none",
|
|
1223
|
-
"HELM_ARGS": "",
|
|
1224
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
1225
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
1226
|
-
"HOST": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
1227
|
-
"HOST_CANONICAL": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
1228
|
-
"HOST_INTERNAL": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
1229
1242
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1230
1243
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1231
1244
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1232
|
-
"KUBE_APP_NAME": "mr1234-api",
|
|
1233
|
-
"KUBE_APP_NAME_PREFIX": "mr1234-",
|
|
1234
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
1235
|
-
"KUBE_NAMESPACE": "pan-test-app-review",
|
|
1236
|
-
"KUBE_VALUES": "env:
|
|
1237
|
-
secret:
|
|
1238
|
-
POSTGRESQL_PASSWORD: '$CL_review_api_POSTGRESQL_PASSWORD'
|
|
1239
|
-
cloudsqlProxyCredentials: '$CL_review_api_cloudsqlProxyCredentials'
|
|
1240
|
-
public:
|
|
1241
|
-
ENV_SHORT: 'review'
|
|
1242
|
-
APP_DIR: 'api'
|
|
1243
|
-
ENV_TYPE: 'review'
|
|
1244
|
-
BUILD_INFO_ID: 'some-id'
|
|
1245
|
-
BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
|
|
1246
|
-
BUILD_INFO_CURRENT_VERSION: '3.2.1'
|
|
1247
|
-
HOST: 'api.mr1234.review.test-app.pan.panter.cloud'
|
|
1248
|
-
ROOT_URL: 'https://api.mr1234.review.test-app.pan.panter.cloud'
|
|
1249
|
-
HOST_CANONICAL: 'api.mr1234.review.test-app.pan.panter.cloud'
|
|
1250
|
-
ROOT_URL_INTERNAL: 'https://api.mr1234.review.test-app.pan.panter.cloud'
|
|
1251
|
-
KUBE_NAMESPACE: 'pan-test-app-review'
|
|
1252
|
-
KUBE_APP_NAME: 'mr1234-api'
|
|
1253
|
-
KUBE_APP_NAME_PREFIX: 'mr1234-'
|
|
1254
|
-
HOST_INTERNAL: 'api.mr1234.review.test-app.pan.panter.cloud'
|
|
1255
|
-
_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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]'
|
|
1256
|
-
application:
|
|
1257
|
-
host: 'api.mr1234.review.test-app.pan.panter.cloud'
|
|
1258
|
-
command: 'yarn start'
|
|
1259
|
-
livenessProbe:
|
|
1260
|
-
httpGet:
|
|
1261
|
-
path: '__health'
|
|
1262
|
-
readinessProbe:
|
|
1263
|
-
httpGet:
|
|
1264
|
-
path: '__health'
|
|
1265
|
-
startupProbe:
|
|
1266
|
-
httpGet:
|
|
1267
|
-
path: '__health'
|
|
1268
|
-
cloudsql:
|
|
1269
|
-
enabled: true
|
|
1270
|
-
dbUser: 'postgres'
|
|
1271
|
-
instanceConnectionName: 'myproject:europe-west6:instance-name'
|
|
1272
|
-
proxyCredentials: '$CL_review_api_cloudsqlProxyCredentials'
|
|
1273
|
-
fullDbName: 'pan-test-app-review-mr1234-api'
|
|
1274
|
-
type: 'unmanaged'
|
|
1275
|
-
",
|
|
1276
|
-
"POSTGRESQL_PASSWORD": "$CL_review_api_POSTGRESQL_PASSWORD",
|
|
1277
|
-
"RELEASE_NAME": "pan-test-app-review-mr1234-api",
|
|
1278
|
-
"ROOT_URL": "https://api.mr1234.review.test-app.pan.panter.cloud",
|
|
1279
|
-
"ROOT_URL_INTERNAL": "https://api.mr1234.review.test-app.pan.panter.cloud",
|
|
1280
|
-
"_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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]",
|
|
1281
|
-
"cloudsqlProxyCredentials": "$CL_review_api_cloudsqlProxyCredentials",
|
|
1282
1245
|
},
|
|
1283
1246
|
},
|
|
1284
1247
|
"api ๐ก audit": {
|
|
@@ -1294,12 +1257,14 @@ cloudsql:
|
|
|
1294
1257
|
],
|
|
1295
1258
|
},
|
|
1296
1259
|
"script": [
|
|
1260
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1261
|
+
"export APP_PATH="api"",
|
|
1262
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1297
1263
|
"cd api",
|
|
1298
1264
|
"yarn npm audit --environment production",
|
|
1299
1265
|
],
|
|
1300
1266
|
"stage": "test",
|
|
1301
1267
|
"variables": {
|
|
1302
|
-
"APP_PATH": "api",
|
|
1303
1268
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1304
1269
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
1305
1270
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
@@ -1333,6 +1298,9 @@ cloudsql:
|
|
|
1333
1298
|
],
|
|
1334
1299
|
},
|
|
1335
1300
|
"script": [
|
|
1301
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1302
|
+
"export APP_PATH="api"",
|
|
1303
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1336
1304
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
1337
1305
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
1338
1306
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -1349,7 +1317,6 @@ cloudsql:
|
|
|
1349
1317
|
],
|
|
1350
1318
|
"stage": "test",
|
|
1351
1319
|
"variables": {
|
|
1352
|
-
"APP_PATH": "api",
|
|
1353
1320
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1354
1321
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
1355
1322
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
@@ -1373,6 +1340,8 @@ cloudsql:
|
|
|
1373
1340
|
],
|
|
1374
1341
|
},
|
|
1375
1342
|
"script": [
|
|
1343
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1344
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1376
1345
|
"trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
|
|
1377
1346
|
],
|
|
1378
1347
|
"stage": "build",
|
|
@@ -1425,7 +1394,7 @@ cloudsql:
|
|
|
1425
1394
|
],
|
|
1426
1395
|
"variables": {
|
|
1427
1396
|
"FF_USE_FASTZIP": "true",
|
|
1428
|
-
"GIT_DEPTH": 1,
|
|
1397
|
+
"GIT_DEPTH": "1",
|
|
1429
1398
|
},
|
|
1430
1399
|
"workflow": {
|
|
1431
1400
|
"rules": [
|
|
@@ -1456,10 +1425,16 @@ cloudsql:
|
|
|
1456
1425
|
"image": "path/to/docker/jobs-default:the-version",
|
|
1457
1426
|
"jobs": {
|
|
1458
1427
|
"api โฉ๏ธ Rollback โ ๏ธ | prod ": {
|
|
1428
|
+
"allow_failure": true,
|
|
1429
|
+
"artifacts": {
|
|
1430
|
+
"reports": {
|
|
1431
|
+
"dotenv": "gitlab_environment.env",
|
|
1432
|
+
},
|
|
1433
|
+
},
|
|
1459
1434
|
"environment": {
|
|
1460
1435
|
"action": "access",
|
|
1461
1436
|
"name": "prod/api",
|
|
1462
|
-
"url": "
|
|
1437
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
1463
1438
|
},
|
|
1464
1439
|
"image": "path/to/docker/kubernetes:the-version",
|
|
1465
1440
|
"interruptible": true,
|
|
@@ -1473,94 +1448,62 @@ cloudsql:
|
|
|
1473
1448
|
},
|
|
1474
1449
|
"rules": [
|
|
1475
1450
|
{
|
|
1476
|
-
"allow_failure": true,
|
|
1477
1451
|
"when": "manual",
|
|
1478
1452
|
},
|
|
1479
1453
|
],
|
|
1480
1454
|
"script": [
|
|
1455
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1456
|
+
"export ENV_SHORT="prod"",
|
|
1457
|
+
"export APP_DIR="api"",
|
|
1458
|
+
"export ENV_TYPE="prod"",
|
|
1459
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1460
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
1461
|
+
"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")"",
|
|
1462
|
+
"export HOST="api.prod.test-app.pan.panter.cloud"",
|
|
1463
|
+
"export ROOT_URL="https://api.prod.test-app.pan.panter.cloud"",
|
|
1464
|
+
"export HOST_INTERNAL="api.prod.test-app.pan.panter.cloud"",
|
|
1465
|
+
"export HOST_CANONICAL="api.prod.test-app.pan.panter.cloud"",
|
|
1466
|
+
"export ROOT_URL_INTERNAL="https://api.prod.test-app.pan.panter.cloud"",
|
|
1467
|
+
"export KUBE_NAMESPACE="pan-test-app-prod"",
|
|
1468
|
+
"export KUBE_APP_NAME="api"",
|
|
1469
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
1470
|
+
"export POSTGRESQL_PASSWORD="$CL_prod_api_POSTGRESQL_PASSWORD"",
|
|
1471
|
+
"export cloudsqlProxyCredentials="$CL_prod_api_cloudsqlProxyCredentials"",
|
|
1472
|
+
"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\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\"]"",
|
|
1473
|
+
"export RELEASE_NAME="pan-test-app-prod-api"",
|
|
1474
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
1475
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
1476
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
1477
|
+
"export HELM_ARGS=""",
|
|
1478
|
+
"export COMPONENT_NAME="api"",
|
|
1479
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1480
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1481
1481
|
"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",
|
|
1482
1482
|
"kubectl config set-credentials "kube-pan-test-app-prod-api" --token="$CL_prod_api_KUBE_TOKEN"",
|
|
1483
1483
|
"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"",
|
|
1484
1484
|
"kubectl config use-context "kube-pan-test-app-prod-api"",
|
|
1485
1485
|
"kubernetesRollback",
|
|
1486
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.prod.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
1486
1487
|
],
|
|
1487
1488
|
"stage": "rollback prod",
|
|
1488
1489
|
"variables": {
|
|
1489
|
-
"APP_DIR": "api",
|
|
1490
|
-
"BUILD_ID": "some-id",
|
|
1491
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
1492
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
1493
|
-
"BUILD_INFO_ID": "some-id",
|
|
1494
|
-
"COMPONENT_NAME": "api",
|
|
1495
|
-
"ENV_SHORT": "prod",
|
|
1496
|
-
"ENV_TYPE": "prod",
|
|
1497
1490
|
"GIT_STRATEGY": "none",
|
|
1498
|
-
"HELM_ARGS": "",
|
|
1499
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
1500
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
1501
|
-
"HOST": "api.prod.test-app.pan.panter.cloud",
|
|
1502
|
-
"HOST_CANONICAL": "api.prod.test-app.pan.panter.cloud",
|
|
1503
|
-
"HOST_INTERNAL": "api.prod.test-app.pan.panter.cloud",
|
|
1504
1491
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1505
1492
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1506
1493
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1507
|
-
"KUBE_APP_NAME": "api",
|
|
1508
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
1509
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
1510
|
-
"KUBE_NAMESPACE": "pan-test-app-prod",
|
|
1511
|
-
"KUBE_VALUES": "env:
|
|
1512
|
-
secret:
|
|
1513
|
-
POSTGRESQL_PASSWORD: '$CL_prod_api_POSTGRESQL_PASSWORD'
|
|
1514
|
-
cloudsqlProxyCredentials: '$CL_prod_api_cloudsqlProxyCredentials'
|
|
1515
|
-
public:
|
|
1516
|
-
ENV_SHORT: 'prod'
|
|
1517
|
-
APP_DIR: 'api'
|
|
1518
|
-
ENV_TYPE: 'prod'
|
|
1519
|
-
BUILD_INFO_ID: 'some-id'
|
|
1520
|
-
BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
|
|
1521
|
-
BUILD_INFO_CURRENT_VERSION: '3.2.1'
|
|
1522
|
-
HOST: 'api.prod.test-app.pan.panter.cloud'
|
|
1523
|
-
ROOT_URL: 'https://api.prod.test-app.pan.panter.cloud'
|
|
1524
|
-
HOST_CANONICAL: 'api.prod.test-app.pan.panter.cloud'
|
|
1525
|
-
ROOT_URL_INTERNAL: 'https://api.prod.test-app.pan.panter.cloud'
|
|
1526
|
-
KUBE_NAMESPACE: 'pan-test-app-prod'
|
|
1527
|
-
KUBE_APP_NAME: 'api'
|
|
1528
|
-
KUBE_APP_NAME_PREFIX: ''
|
|
1529
|
-
HOST_INTERNAL: 'api.prod.test-app.pan.panter.cloud'
|
|
1530
|
-
_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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]'
|
|
1531
|
-
application:
|
|
1532
|
-
host: 'api.prod.test-app.pan.panter.cloud'
|
|
1533
|
-
command: 'yarn start'
|
|
1534
|
-
livenessProbe:
|
|
1535
|
-
httpGet:
|
|
1536
|
-
path: '__health'
|
|
1537
|
-
readinessProbe:
|
|
1538
|
-
httpGet:
|
|
1539
|
-
path: '__health'
|
|
1540
|
-
startupProbe:
|
|
1541
|
-
httpGet:
|
|
1542
|
-
path: '__health'
|
|
1543
|
-
cloudsql:
|
|
1544
|
-
enabled: true
|
|
1545
|
-
dbUser: 'postgres'
|
|
1546
|
-
instanceConnectionName: 'myproject:europe-west6:instance-name'
|
|
1547
|
-
proxyCredentials: '$CL_prod_api_cloudsqlProxyCredentials'
|
|
1548
|
-
fullDbName: 'pan-test-app-prod-api'
|
|
1549
|
-
type: 'unmanaged'
|
|
1550
|
-
",
|
|
1551
|
-
"POSTGRESQL_PASSWORD": "$CL_prod_api_POSTGRESQL_PASSWORD",
|
|
1552
|
-
"RELEASE_NAME": "pan-test-app-prod-api",
|
|
1553
|
-
"ROOT_URL": "https://api.prod.test-app.pan.panter.cloud",
|
|
1554
|
-
"ROOT_URL_INTERNAL": "https://api.prod.test-app.pan.panter.cloud",
|
|
1555
|
-
"_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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]",
|
|
1556
|
-
"cloudsqlProxyCredentials": "$CL_prod_api_cloudsqlProxyCredentials",
|
|
1557
1494
|
},
|
|
1558
1495
|
},
|
|
1559
1496
|
"api โฉ๏ธ Rollback โ ๏ธ | stage ": {
|
|
1497
|
+
"allow_failure": true,
|
|
1498
|
+
"artifacts": {
|
|
1499
|
+
"reports": {
|
|
1500
|
+
"dotenv": "gitlab_environment.env",
|
|
1501
|
+
},
|
|
1502
|
+
},
|
|
1560
1503
|
"environment": {
|
|
1561
1504
|
"action": "access",
|
|
1562
1505
|
"name": "stage/api",
|
|
1563
|
-
"url": "
|
|
1506
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
1564
1507
|
},
|
|
1565
1508
|
"image": "path/to/docker/kubernetes:the-version",
|
|
1566
1509
|
"interruptible": true,
|
|
@@ -1574,87 +1517,49 @@ cloudsql:
|
|
|
1574
1517
|
},
|
|
1575
1518
|
"rules": [
|
|
1576
1519
|
{
|
|
1577
|
-
"allow_failure": true,
|
|
1578
1520
|
"when": "manual",
|
|
1579
1521
|
},
|
|
1580
1522
|
],
|
|
1581
1523
|
"script": [
|
|
1524
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1525
|
+
"export ENV_SHORT="stage"",
|
|
1526
|
+
"export APP_DIR="api"",
|
|
1527
|
+
"export ENV_TYPE="stage"",
|
|
1528
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1529
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
1530
|
+
"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")"",
|
|
1531
|
+
"export HOST="api.stage.test-app.pan.panter.cloud"",
|
|
1532
|
+
"export ROOT_URL="https://api.stage.test-app.pan.panter.cloud"",
|
|
1533
|
+
"export HOST_INTERNAL="api.stage.test-app.pan.panter.cloud"",
|
|
1534
|
+
"export HOST_CANONICAL="api.stage.test-app.pan.panter.cloud"",
|
|
1535
|
+
"export ROOT_URL_INTERNAL="https://api.stage.test-app.pan.panter.cloud"",
|
|
1536
|
+
"export KUBE_NAMESPACE="pan-test-app-stage"",
|
|
1537
|
+
"export KUBE_APP_NAME="api"",
|
|
1538
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
1539
|
+
"export POSTGRESQL_PASSWORD="$CL_stage_api_POSTGRESQL_PASSWORD"",
|
|
1540
|
+
"export cloudsqlProxyCredentials="$CL_stage_api_cloudsqlProxyCredentials"",
|
|
1541
|
+
"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\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\"]"",
|
|
1542
|
+
"export RELEASE_NAME="pan-test-app-stage-api"",
|
|
1543
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
1544
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
1545
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
1546
|
+
"export HELM_ARGS=""",
|
|
1547
|
+
"export COMPONENT_NAME="api"",
|
|
1548
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1549
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1582
1550
|
"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",
|
|
1583
1551
|
"kubectl config set-credentials "kube-pan-test-app-stage-api" --token="$CL_stage_api_KUBE_TOKEN"",
|
|
1584
1552
|
"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"",
|
|
1585
1553
|
"kubectl config use-context "kube-pan-test-app-stage-api"",
|
|
1586
1554
|
"kubernetesRollback",
|
|
1555
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
1587
1556
|
],
|
|
1588
1557
|
"stage": "rollback stage",
|
|
1589
1558
|
"variables": {
|
|
1590
|
-
"APP_DIR": "api",
|
|
1591
|
-
"BUILD_ID": "some-id",
|
|
1592
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
1593
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
1594
|
-
"BUILD_INFO_ID": "some-id",
|
|
1595
|
-
"COMPONENT_NAME": "api",
|
|
1596
|
-
"ENV_SHORT": "stage",
|
|
1597
|
-
"ENV_TYPE": "stage",
|
|
1598
1559
|
"GIT_STRATEGY": "none",
|
|
1599
|
-
"HELM_ARGS": "",
|
|
1600
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
1601
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
1602
|
-
"HOST": "api.stage.test-app.pan.panter.cloud",
|
|
1603
|
-
"HOST_CANONICAL": "api.stage.test-app.pan.panter.cloud",
|
|
1604
|
-
"HOST_INTERNAL": "api.stage.test-app.pan.panter.cloud",
|
|
1605
1560
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1606
1561
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1607
1562
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1608
|
-
"KUBE_APP_NAME": "api",
|
|
1609
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
1610
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
1611
|
-
"KUBE_NAMESPACE": "pan-test-app-stage",
|
|
1612
|
-
"KUBE_VALUES": "env:
|
|
1613
|
-
secret:
|
|
1614
|
-
POSTGRESQL_PASSWORD: '$CL_stage_api_POSTGRESQL_PASSWORD'
|
|
1615
|
-
cloudsqlProxyCredentials: '$CL_stage_api_cloudsqlProxyCredentials'
|
|
1616
|
-
public:
|
|
1617
|
-
ENV_SHORT: 'stage'
|
|
1618
|
-
APP_DIR: 'api'
|
|
1619
|
-
ENV_TYPE: 'stage'
|
|
1620
|
-
BUILD_INFO_ID: 'some-id'
|
|
1621
|
-
BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
|
|
1622
|
-
BUILD_INFO_CURRENT_VERSION: '3.2.1'
|
|
1623
|
-
HOST: 'api.stage.test-app.pan.panter.cloud'
|
|
1624
|
-
ROOT_URL: 'https://api.stage.test-app.pan.panter.cloud'
|
|
1625
|
-
HOST_CANONICAL: 'api.stage.test-app.pan.panter.cloud'
|
|
1626
|
-
ROOT_URL_INTERNAL: 'https://api.stage.test-app.pan.panter.cloud'
|
|
1627
|
-
KUBE_NAMESPACE: 'pan-test-app-stage'
|
|
1628
|
-
KUBE_APP_NAME: 'api'
|
|
1629
|
-
KUBE_APP_NAME_PREFIX: ''
|
|
1630
|
-
HOST_INTERNAL: 'api.stage.test-app.pan.panter.cloud'
|
|
1631
|
-
_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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]'
|
|
1632
|
-
application:
|
|
1633
|
-
host: 'api.stage.test-app.pan.panter.cloud'
|
|
1634
|
-
command: 'yarn start'
|
|
1635
|
-
livenessProbe:
|
|
1636
|
-
httpGet:
|
|
1637
|
-
path: '__health'
|
|
1638
|
-
readinessProbe:
|
|
1639
|
-
httpGet:
|
|
1640
|
-
path: '__health'
|
|
1641
|
-
startupProbe:
|
|
1642
|
-
httpGet:
|
|
1643
|
-
path: '__health'
|
|
1644
|
-
cloudsql:
|
|
1645
|
-
enabled: true
|
|
1646
|
-
dbUser: 'postgres'
|
|
1647
|
-
instanceConnectionName: 'myproject:europe-west6:instance-name'
|
|
1648
|
-
proxyCredentials: '$CL_stage_api_cloudsqlProxyCredentials'
|
|
1649
|
-
fullDbName: 'pan-test-app-stage-api'
|
|
1650
|
-
type: 'unmanaged'
|
|
1651
|
-
",
|
|
1652
|
-
"POSTGRESQL_PASSWORD": "$CL_stage_api_POSTGRESQL_PASSWORD",
|
|
1653
|
-
"RELEASE_NAME": "pan-test-app-stage-api",
|
|
1654
|
-
"ROOT_URL": "https://api.stage.test-app.pan.panter.cloud",
|
|
1655
|
-
"ROOT_URL_INTERNAL": "https://api.stage.test-app.pan.panter.cloud",
|
|
1656
|
-
"_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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]",
|
|
1657
|
-
"cloudsqlProxyCredentials": "$CL_stage_api_cloudsqlProxyCredentials",
|
|
1658
1563
|
},
|
|
1659
1564
|
},
|
|
1660
1565
|
"api ๐จ app | prod ": {
|
|
@@ -1704,7 +1609,26 @@ cloudsql:
|
|
|
1704
1609
|
],
|
|
1705
1610
|
},
|
|
1706
1611
|
"script": [
|
|
1707
|
-
"echo
|
|
1612
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1613
|
+
"export ENV_SHORT="prod"",
|
|
1614
|
+
"export APP_DIR="api"",
|
|
1615
|
+
"export ENV_TYPE="prod"",
|
|
1616
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1617
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
1618
|
+
"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")"",
|
|
1619
|
+
"export HOST="api.prod.test-app.pan.panter.cloud"",
|
|
1620
|
+
"export ROOT_URL="https://api.prod.test-app.pan.panter.cloud"",
|
|
1621
|
+
"export HOST_INTERNAL="api.prod.test-app.pan.panter.cloud"",
|
|
1622
|
+
"export HOST_CANONICAL="api.prod.test-app.pan.panter.cloud"",
|
|
1623
|
+
"export ROOT_URL_INTERNAL="https://api.prod.test-app.pan.panter.cloud"",
|
|
1624
|
+
"export KUBE_NAMESPACE="pan-test-app-prod"",
|
|
1625
|
+
"export KUBE_APP_NAME="api"",
|
|
1626
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
1627
|
+
"export POSTGRESQL_PASSWORD="$CL_prod_api_POSTGRESQL_PASSWORD"",
|
|
1628
|
+
"export cloudsqlProxyCredentials="$CL_prod_api_cloudsqlProxyCredentials"",
|
|
1629
|
+
"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\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\"]"",
|
|
1630
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1631
|
+
"echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
|
|
1708
1632
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
1709
1633
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
1710
1634
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -1721,26 +1645,9 @@ cloudsql:
|
|
|
1721
1645
|
],
|
|
1722
1646
|
"stage": "build",
|
|
1723
1647
|
"variables": {
|
|
1724
|
-
"APP_DIR": "api",
|
|
1725
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
1726
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
1727
|
-
"BUILD_INFO_ID": "some-id",
|
|
1728
|
-
"ENV_SHORT": "prod",
|
|
1729
|
-
"ENV_TYPE": "prod",
|
|
1730
|
-
"HOST": "api.prod.test-app.pan.panter.cloud",
|
|
1731
|
-
"HOST_CANONICAL": "api.prod.test-app.pan.panter.cloud",
|
|
1732
|
-
"HOST_INTERNAL": "api.prod.test-app.pan.panter.cloud",
|
|
1733
1648
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1734
1649
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
1735
1650
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
1736
|
-
"KUBE_APP_NAME": "api",
|
|
1737
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
1738
|
-
"KUBE_NAMESPACE": "pan-test-app-prod",
|
|
1739
|
-
"POSTGRESQL_PASSWORD": "$CL_prod_api_POSTGRESQL_PASSWORD",
|
|
1740
|
-
"ROOT_URL": "https://api.prod.test-app.pan.panter.cloud",
|
|
1741
|
-
"ROOT_URL_INTERNAL": "https://api.prod.test-app.pan.panter.cloud",
|
|
1742
|
-
"_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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]",
|
|
1743
|
-
"cloudsqlProxyCredentials": "$CL_prod_api_cloudsqlProxyCredentials",
|
|
1744
1651
|
},
|
|
1745
1652
|
},
|
|
1746
1653
|
"api ๐จ app | stage ": {
|
|
@@ -1790,7 +1697,26 @@ cloudsql:
|
|
|
1790
1697
|
],
|
|
1791
1698
|
},
|
|
1792
1699
|
"script": [
|
|
1793
|
-
"echo
|
|
1700
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1701
|
+
"export ENV_SHORT="stage"",
|
|
1702
|
+
"export APP_DIR="api"",
|
|
1703
|
+
"export ENV_TYPE="stage"",
|
|
1704
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1705
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
1706
|
+
"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")"",
|
|
1707
|
+
"export HOST="api.stage.test-app.pan.panter.cloud"",
|
|
1708
|
+
"export ROOT_URL="https://api.stage.test-app.pan.panter.cloud"",
|
|
1709
|
+
"export HOST_INTERNAL="api.stage.test-app.pan.panter.cloud"",
|
|
1710
|
+
"export HOST_CANONICAL="api.stage.test-app.pan.panter.cloud"",
|
|
1711
|
+
"export ROOT_URL_INTERNAL="https://api.stage.test-app.pan.panter.cloud"",
|
|
1712
|
+
"export KUBE_NAMESPACE="pan-test-app-stage"",
|
|
1713
|
+
"export KUBE_APP_NAME="api"",
|
|
1714
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
1715
|
+
"export POSTGRESQL_PASSWORD="$CL_stage_api_POSTGRESQL_PASSWORD"",
|
|
1716
|
+
"export cloudsqlProxyCredentials="$CL_stage_api_cloudsqlProxyCredentials"",
|
|
1717
|
+
"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\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\"]"",
|
|
1718
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1719
|
+
"echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
|
|
1794
1720
|
"echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
|
|
1795
1721
|
"if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
|
|
1796
1722
|
"if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
|
|
@@ -1807,26 +1733,9 @@ cloudsql:
|
|
|
1807
1733
|
],
|
|
1808
1734
|
"stage": "build",
|
|
1809
1735
|
"variables": {
|
|
1810
|
-
"APP_DIR": "api",
|
|
1811
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
1812
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
1813
|
-
"BUILD_INFO_ID": "some-id",
|
|
1814
|
-
"ENV_SHORT": "stage",
|
|
1815
|
-
"ENV_TYPE": "stage",
|
|
1816
|
-
"HOST": "api.stage.test-app.pan.panter.cloud",
|
|
1817
|
-
"HOST_CANONICAL": "api.stage.test-app.pan.panter.cloud",
|
|
1818
|
-
"HOST_INTERNAL": "api.stage.test-app.pan.panter.cloud",
|
|
1819
1736
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1820
1737
|
"KUBERNETES_MEMORY_LIMIT": "4Gi",
|
|
1821
1738
|
"KUBERNETES_MEMORY_REQUEST": "2Gi",
|
|
1822
|
-
"KUBE_APP_NAME": "api",
|
|
1823
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
1824
|
-
"KUBE_NAMESPACE": "pan-test-app-stage",
|
|
1825
|
-
"POSTGRESQL_PASSWORD": "$CL_stage_api_POSTGRESQL_PASSWORD",
|
|
1826
|
-
"ROOT_URL": "https://api.stage.test-app.pan.panter.cloud",
|
|
1827
|
-
"ROOT_URL_INTERNAL": "https://api.stage.test-app.pan.panter.cloud",
|
|
1828
|
-
"_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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]",
|
|
1829
|
-
"cloudsqlProxyCredentials": "$CL_stage_api_cloudsqlProxyCredentials",
|
|
1830
1739
|
},
|
|
1831
1740
|
},
|
|
1832
1741
|
"api ๐จ docker | prod ": {
|
|
@@ -1852,6 +1761,22 @@ cloudsql:
|
|
|
1852
1761
|
],
|
|
1853
1762
|
},
|
|
1854
1763
|
"script": [
|
|
1764
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1765
|
+
"export APP_DIR="api"",
|
|
1766
|
+
"export DOCKER_DIR="."",
|
|
1767
|
+
"export DOCKER_REGISTRY="$CI_REGISTRY"",
|
|
1768
|
+
"export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
|
|
1769
|
+
"export DOCKER_IMAGE_NAME="prod/api"",
|
|
1770
|
+
"export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
|
|
1771
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
1772
|
+
"export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
|
|
1773
|
+
RUN yarn plugin import workspace-tools
|
|
1774
|
+
RUN yarn workspaces focus --production && yarn rebuild"",
|
|
1775
|
+
"export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
|
|
1776
|
+
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1777
|
+
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1778
|
+
COPY --chown=node:node .yarn /app/.yarn"",
|
|
1779
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1855
1780
|
"ensureNodeDockerfile",
|
|
1856
1781
|
"echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
|
|
1857
1782
|
"docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
|
|
@@ -1875,25 +1800,9 @@ cloudsql:
|
|
|
1875
1800
|
],
|
|
1876
1801
|
"stage": "build",
|
|
1877
1802
|
"variables": {
|
|
1878
|
-
"APP_DIR": "api",
|
|
1879
|
-
"DOCKERFILE_ADDITIONS": undefined,
|
|
1880
|
-
"DOCKERFILE_ADDITIONS_END": undefined,
|
|
1881
1803
|
"DOCKER_BUILDKIT": "1",
|
|
1882
|
-
"DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
|
|
1883
|
-
"DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
|
|
1884
|
-
RUN yarn plugin import workspace-tools
|
|
1885
|
-
RUN yarn workspaces focus --production && yarn rebuild",
|
|
1886
|
-
"DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
|
|
1887
|
-
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1888
|
-
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1889
|
-
COPY --chown=node:node .yarn /app/.yarn",
|
|
1890
|
-
"DOCKER_DIR": ".",
|
|
1891
1804
|
"DOCKER_DRIVER": "overlay2",
|
|
1892
1805
|
"DOCKER_HOST": "tcp://0.0.0.0:2375",
|
|
1893
|
-
"DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
|
|
1894
|
-
"DOCKER_IMAGE_NAME": "prod/api",
|
|
1895
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
1896
|
-
"DOCKER_REGISTRY": "$CI_REGISTRY",
|
|
1897
1806
|
"DOCKER_TLS_CERTDIR": "",
|
|
1898
1807
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1899
1808
|
"KUBERNETES_MEMORY_LIMIT": "2Gi",
|
|
@@ -1923,6 +1832,22 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1923
1832
|
],
|
|
1924
1833
|
},
|
|
1925
1834
|
"script": [
|
|
1835
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1836
|
+
"export APP_DIR="api"",
|
|
1837
|
+
"export DOCKER_DIR="."",
|
|
1838
|
+
"export DOCKER_REGISTRY="$CI_REGISTRY"",
|
|
1839
|
+
"export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
|
|
1840
|
+
"export DOCKER_IMAGE_NAME="stage/api"",
|
|
1841
|
+
"export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
|
|
1842
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
1843
|
+
"export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
|
|
1844
|
+
RUN yarn plugin import workspace-tools
|
|
1845
|
+
RUN yarn workspaces focus --production && yarn rebuild"",
|
|
1846
|
+
"export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
|
|
1847
|
+
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1848
|
+
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1849
|
+
COPY --chown=node:node .yarn /app/.yarn"",
|
|
1850
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1926
1851
|
"ensureNodeDockerfile",
|
|
1927
1852
|
"echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
|
|
1928
1853
|
"docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
|
|
@@ -1946,25 +1871,9 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1946
1871
|
],
|
|
1947
1872
|
"stage": "build",
|
|
1948
1873
|
"variables": {
|
|
1949
|
-
"APP_DIR": "api",
|
|
1950
|
-
"DOCKERFILE_ADDITIONS": undefined,
|
|
1951
|
-
"DOCKERFILE_ADDITIONS_END": undefined,
|
|
1952
1874
|
"DOCKER_BUILDKIT": "1",
|
|
1953
|
-
"DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
|
|
1954
|
-
"DOCKER_COPY_AND_INSTALL_APP": "COPY --chown=node:node $APP_DIR .
|
|
1955
|
-
RUN yarn plugin import workspace-tools
|
|
1956
|
-
RUN yarn workspaces focus --production && yarn rebuild",
|
|
1957
|
-
"DOCKER_COPY_WORKSPACE_FILES": "COPY --chown=node:node api/package.json /app/api/package.json
|
|
1958
|
-
COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
|
|
1959
|
-
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1960
|
-
COPY --chown=node:node .yarn /app/.yarn",
|
|
1961
|
-
"DOCKER_DIR": ".",
|
|
1962
1875
|
"DOCKER_DRIVER": "overlay2",
|
|
1963
1876
|
"DOCKER_HOST": "tcp://0.0.0.0:2375",
|
|
1964
|
-
"DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
|
|
1965
|
-
"DOCKER_IMAGE_NAME": "stage/api",
|
|
1966
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
1967
|
-
"DOCKER_REGISTRY": "$CI_REGISTRY",
|
|
1968
1877
|
"DOCKER_TLS_CERTDIR": "",
|
|
1969
1878
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1970
1879
|
"KUBERNETES_MEMORY_LIMIT": "2Gi",
|
|
@@ -1973,11 +1882,16 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1973
1882
|
},
|
|
1974
1883
|
"api ๐ Deploy | prod ": {
|
|
1975
1884
|
"allow_failure": true,
|
|
1885
|
+
"artifacts": {
|
|
1886
|
+
"reports": {
|
|
1887
|
+
"dotenv": "gitlab_environment.env",
|
|
1888
|
+
},
|
|
1889
|
+
},
|
|
1976
1890
|
"environment": {
|
|
1977
1891
|
"auto_stop_in": undefined,
|
|
1978
1892
|
"name": "prod/api",
|
|
1979
1893
|
"on_stop": "api ๐ Stop โ ๏ธ | prod ",
|
|
1980
|
-
"url": "
|
|
1894
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
1981
1895
|
},
|
|
1982
1896
|
"image": "path/to/docker/kubernetes:the-version",
|
|
1983
1897
|
"interruptible": true,
|
|
@@ -2008,99 +1922,138 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
2008
1922
|
},
|
|
2009
1923
|
],
|
|
2010
1924
|
"script": [
|
|
1925
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
1926
|
+
"export ENV_SHORT="prod"",
|
|
1927
|
+
"export APP_DIR="api"",
|
|
1928
|
+
"export ENV_TYPE="prod"",
|
|
1929
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1930
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
1931
|
+
"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")"",
|
|
1932
|
+
"export HOST="api.prod.test-app.pan.panter.cloud"",
|
|
1933
|
+
"export ROOT_URL="https://api.prod.test-app.pan.panter.cloud"",
|
|
1934
|
+
"export HOST_INTERNAL="api.prod.test-app.pan.panter.cloud"",
|
|
1935
|
+
"export HOST_CANONICAL="api.prod.test-app.pan.panter.cloud"",
|
|
1936
|
+
"export ROOT_URL_INTERNAL="https://api.prod.test-app.pan.panter.cloud"",
|
|
1937
|
+
"export KUBE_NAMESPACE="pan-test-app-prod"",
|
|
1938
|
+
"export KUBE_APP_NAME="api"",
|
|
1939
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
1940
|
+
"export POSTGRESQL_PASSWORD="$CL_prod_api_POSTGRESQL_PASSWORD"",
|
|
1941
|
+
"export cloudsqlProxyCredentials="$CL_prod_api_cloudsqlProxyCredentials"",
|
|
1942
|
+
"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\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\"]"",
|
|
1943
|
+
"export DOCKER_REGISTRY="$CI_REGISTRY"",
|
|
1944
|
+
"export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
|
|
1945
|
+
"export DOCKER_IMAGE_NAME="prod/api"",
|
|
1946
|
+
"export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
|
|
1947
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
1948
|
+
"export RELEASE_NAME="pan-test-app-prod-api"",
|
|
1949
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
1950
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
1951
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
1952
|
+
"export HELM_ARGS=""",
|
|
1953
|
+
"export COMPONENT_NAME="api"",
|
|
1954
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
1955
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
2011
1956
|
"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",
|
|
2012
1957
|
"kubectl config set-credentials "kube-pan-test-app-prod-api" --token="$CL_prod_api_KUBE_TOKEN"",
|
|
2013
1958
|
"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"",
|
|
2014
1959
|
"kubectl config use-context "kube-pan-test-app-prod-api"",
|
|
2015
|
-
"
|
|
2016
|
-
"
|
|
2017
|
-
|
|
2018
|
-
"/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",
|
|
2019
|
-
"echo deployment successful ๐ป",
|
|
2020
|
-
],
|
|
2021
|
-
"stage": "deploy prod",
|
|
2022
|
-
"variables": {
|
|
2023
|
-
"APP_DIR": "api",
|
|
2024
|
-
"BUILD_ID": "some-id",
|
|
2025
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
2026
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
2027
|
-
"BUILD_INFO_ID": "some-id",
|
|
2028
|
-
"COMPONENT_NAME": "api",
|
|
2029
|
-
"DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
|
|
2030
|
-
"DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
|
|
2031
|
-
"DOCKER_IMAGE_NAME": "prod/api",
|
|
2032
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
2033
|
-
"DOCKER_REGISTRY": "$CI_REGISTRY",
|
|
2034
|
-
"ENV_SHORT": "prod",
|
|
2035
|
-
"ENV_TYPE": "prod",
|
|
2036
|
-
"HELM_ARGS": "",
|
|
2037
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
2038
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
2039
|
-
"HOST": "api.prod.test-app.pan.panter.cloud",
|
|
2040
|
-
"HOST_CANONICAL": "api.prod.test-app.pan.panter.cloud",
|
|
2041
|
-
"HOST_INTERNAL": "api.prod.test-app.pan.panter.cloud",
|
|
2042
|
-
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
2043
|
-
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
2044
|
-
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
2045
|
-
"KUBE_APP_NAME": "api",
|
|
2046
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
2047
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
2048
|
-
"KUBE_NAMESPACE": "pan-test-app-prod",
|
|
2049
|
-
"KUBE_VALUES": "env:
|
|
1960
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
|
|
1961
|
+
"cat > __all_values.yml <<EOF
|
|
1962
|
+
env:
|
|
2050
1963
|
secret:
|
|
2051
|
-
POSTGRESQL_PASSWORD:
|
|
2052
|
-
|
|
1964
|
+
POSTGRESQL_PASSWORD: |-
|
|
1965
|
+
$(printf %s "$CL_prod_api_POSTGRESQL_PASSWORD" | sed 's/^/ /')
|
|
1966
|
+
cloudsqlProxyCredentials: |-
|
|
1967
|
+
$(printf %s "$CL_prod_api_cloudsqlProxyCredentials" | sed 's/^/ /')
|
|
2053
1968
|
public:
|
|
2054
|
-
ENV_SHORT:
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
1969
|
+
ENV_SHORT: |-
|
|
1970
|
+
prod
|
|
1971
|
+
APP_DIR: |-
|
|
1972
|
+
api
|
|
1973
|
+
ENV_TYPE: |-
|
|
1974
|
+
prod
|
|
1975
|
+
BUILD_INFO_BUILD_ID: |-
|
|
1976
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
|
|
1977
|
+
BUILD_INFO_BUILD_TIME: |-
|
|
1978
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
|
|
1979
|
+
BUILD_INFO_CURRENT_VERSION: |-
|
|
1980
|
+
$(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/^/ /')
|
|
1981
|
+
HOST: |-
|
|
1982
|
+
api.prod.test-app.pan.panter.cloud
|
|
1983
|
+
ROOT_URL: |-
|
|
1984
|
+
https://api.prod.test-app.pan.panter.cloud
|
|
1985
|
+
HOST_INTERNAL: |-
|
|
1986
|
+
api.prod.test-app.pan.panter.cloud
|
|
1987
|
+
HOST_CANONICAL: |-
|
|
1988
|
+
api.prod.test-app.pan.panter.cloud
|
|
1989
|
+
ROOT_URL_INTERNAL: |-
|
|
1990
|
+
https://api.prod.test-app.pan.panter.cloud
|
|
1991
|
+
KUBE_NAMESPACE: |-
|
|
1992
|
+
pan-test-app-prod
|
|
1993
|
+
KUBE_APP_NAME: |-
|
|
1994
|
+
api
|
|
1995
|
+
KUBE_APP_NAME_PREFIX: ""
|
|
1996
|
+
_ALL_ENV_VAR_KEYS: |-
|
|
1997
|
+
["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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]
|
|
2069
1998
|
application:
|
|
2070
|
-
host:
|
|
2071
|
-
|
|
1999
|
+
host: |-
|
|
2000
|
+
api.prod.test-app.pan.panter.cloud
|
|
2001
|
+
command: |-
|
|
2002
|
+
yarn start
|
|
2072
2003
|
livenessProbe:
|
|
2073
2004
|
httpGet:
|
|
2074
|
-
path:
|
|
2005
|
+
path: |-
|
|
2006
|
+
__health
|
|
2075
2007
|
readinessProbe:
|
|
2076
2008
|
httpGet:
|
|
2077
|
-
path:
|
|
2009
|
+
path: |-
|
|
2010
|
+
__health
|
|
2078
2011
|
startupProbe:
|
|
2079
2012
|
httpGet:
|
|
2080
|
-
path:
|
|
2013
|
+
path: |-
|
|
2014
|
+
__health
|
|
2081
2015
|
cloudsql:
|
|
2082
2016
|
enabled: true
|
|
2083
|
-
dbUser:
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2017
|
+
dbUser: |-
|
|
2018
|
+
postgres
|
|
2019
|
+
instanceConnectionName: |-
|
|
2020
|
+
myproject:europe-west6:instance-name
|
|
2021
|
+
proxyCredentials: |-
|
|
2022
|
+
$CL_prod_api_cloudsqlProxyCredentials
|
|
2023
|
+
fullDbName: |-
|
|
2024
|
+
pan-test-app-prod-api
|
|
2025
|
+
type: |-
|
|
2026
|
+
unmanaged
|
|
2027
|
+
|
|
2028
|
+
EOF
|
|
2088
2029
|
",
|
|
2089
|
-
"
|
|
2090
|
-
"
|
|
2091
|
-
"
|
|
2092
|
-
"
|
|
2093
|
-
"
|
|
2094
|
-
"
|
|
2030
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
|
|
2031
|
+
"kubernetesCreateSecret",
|
|
2032
|
+
"kubernetesDeploy",
|
|
2033
|
+
"echo Uploading SBOM to Dependency Track",
|
|
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
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.prod.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
2037
|
+
],
|
|
2038
|
+
"stage": "deploy prod",
|
|
2039
|
+
"variables": {
|
|
2040
|
+
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
2041
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
2042
|
+
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
2095
2043
|
},
|
|
2096
2044
|
},
|
|
2097
2045
|
"api ๐ Deploy | stage ": {
|
|
2098
2046
|
"allow_failure": false,
|
|
2047
|
+
"artifacts": {
|
|
2048
|
+
"reports": {
|
|
2049
|
+
"dotenv": "gitlab_environment.env",
|
|
2050
|
+
},
|
|
2051
|
+
},
|
|
2099
2052
|
"environment": {
|
|
2100
2053
|
"auto_stop_in": undefined,
|
|
2101
2054
|
"name": "stage/api",
|
|
2102
2055
|
"on_stop": "api ๐ Stop โ ๏ธ | stage ",
|
|
2103
|
-
"url": "
|
|
2056
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
2104
2057
|
},
|
|
2105
2058
|
"image": "path/to/docker/kubernetes:the-version",
|
|
2106
2059
|
"interruptible": true,
|
|
@@ -2131,97 +2084,137 @@ cloudsql:
|
|
|
2131
2084
|
},
|
|
2132
2085
|
],
|
|
2133
2086
|
"script": [
|
|
2087
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
2088
|
+
"export ENV_SHORT="stage"",
|
|
2089
|
+
"export APP_DIR="api"",
|
|
2090
|
+
"export ENV_TYPE="stage"",
|
|
2091
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
2092
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
2093
|
+
"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")"",
|
|
2094
|
+
"export HOST="api.stage.test-app.pan.panter.cloud"",
|
|
2095
|
+
"export ROOT_URL="https://api.stage.test-app.pan.panter.cloud"",
|
|
2096
|
+
"export HOST_INTERNAL="api.stage.test-app.pan.panter.cloud"",
|
|
2097
|
+
"export HOST_CANONICAL="api.stage.test-app.pan.panter.cloud"",
|
|
2098
|
+
"export ROOT_URL_INTERNAL="https://api.stage.test-app.pan.panter.cloud"",
|
|
2099
|
+
"export KUBE_NAMESPACE="pan-test-app-stage"",
|
|
2100
|
+
"export KUBE_APP_NAME="api"",
|
|
2101
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
2102
|
+
"export POSTGRESQL_PASSWORD="$CL_stage_api_POSTGRESQL_PASSWORD"",
|
|
2103
|
+
"export cloudsqlProxyCredentials="$CL_stage_api_cloudsqlProxyCredentials"",
|
|
2104
|
+
"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\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\"]"",
|
|
2105
|
+
"export DOCKER_REGISTRY="$CI_REGISTRY"",
|
|
2106
|
+
"export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
|
|
2107
|
+
"export DOCKER_IMAGE_NAME="stage/api"",
|
|
2108
|
+
"export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
|
|
2109
|
+
"export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
|
|
2110
|
+
"export RELEASE_NAME="pan-test-app-stage-api"",
|
|
2111
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
2112
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
2113
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
2114
|
+
"export HELM_ARGS=""",
|
|
2115
|
+
"export COMPONENT_NAME="api"",
|
|
2116
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
2117
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
2134
2118
|
"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",
|
|
2135
2119
|
"kubectl config set-credentials "kube-pan-test-app-stage-api" --token="$CL_stage_api_KUBE_TOKEN"",
|
|
2136
2120
|
"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"",
|
|
2137
2121
|
"kubectl config use-context "kube-pan-test-app-stage-api"",
|
|
2138
|
-
"
|
|
2139
|
-
"
|
|
2140
|
-
|
|
2141
|
-
"/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",
|
|
2142
|
-
"echo deployment successful ๐ป",
|
|
2143
|
-
],
|
|
2144
|
-
"stage": "deploy stage",
|
|
2145
|
-
"variables": {
|
|
2146
|
-
"APP_DIR": "api",
|
|
2147
|
-
"BUILD_ID": "some-id",
|
|
2148
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
2149
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
2150
|
-
"BUILD_INFO_ID": "some-id",
|
|
2151
|
-
"COMPONENT_NAME": "api",
|
|
2152
|
-
"DOCKER_CACHE_IMAGE": "$CI_REGISTRY_IMAGE/caches/api",
|
|
2153
|
-
"DOCKER_IMAGE": "$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME",
|
|
2154
|
-
"DOCKER_IMAGE_NAME": "stage/api",
|
|
2155
|
-
"DOCKER_IMAGE_TAG": "$CI_COMMIT_SHA",
|
|
2156
|
-
"DOCKER_REGISTRY": "$CI_REGISTRY",
|
|
2157
|
-
"ENV_SHORT": "stage",
|
|
2158
|
-
"ENV_TYPE": "stage",
|
|
2159
|
-
"HELM_ARGS": "",
|
|
2160
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
2161
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
2162
|
-
"HOST": "api.stage.test-app.pan.panter.cloud",
|
|
2163
|
-
"HOST_CANONICAL": "api.stage.test-app.pan.panter.cloud",
|
|
2164
|
-
"HOST_INTERNAL": "api.stage.test-app.pan.panter.cloud",
|
|
2165
|
-
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
2166
|
-
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
2167
|
-
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
2168
|
-
"KUBE_APP_NAME": "api",
|
|
2169
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
2170
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
2171
|
-
"KUBE_NAMESPACE": "pan-test-app-stage",
|
|
2172
|
-
"KUBE_VALUES": "env:
|
|
2122
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
|
|
2123
|
+
"cat > __all_values.yml <<EOF
|
|
2124
|
+
env:
|
|
2173
2125
|
secret:
|
|
2174
|
-
POSTGRESQL_PASSWORD:
|
|
2175
|
-
|
|
2126
|
+
POSTGRESQL_PASSWORD: |-
|
|
2127
|
+
$(printf %s "$CL_stage_api_POSTGRESQL_PASSWORD" | sed 's/^/ /')
|
|
2128
|
+
cloudsqlProxyCredentials: |-
|
|
2129
|
+
$(printf %s "$CL_stage_api_cloudsqlProxyCredentials" | sed 's/^/ /')
|
|
2176
2130
|
public:
|
|
2177
|
-
ENV_SHORT:
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2131
|
+
ENV_SHORT: |-
|
|
2132
|
+
stage
|
|
2133
|
+
APP_DIR: |-
|
|
2134
|
+
api
|
|
2135
|
+
ENV_TYPE: |-
|
|
2136
|
+
stage
|
|
2137
|
+
BUILD_INFO_BUILD_ID: |-
|
|
2138
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
|
|
2139
|
+
BUILD_INFO_BUILD_TIME: |-
|
|
2140
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
|
|
2141
|
+
BUILD_INFO_CURRENT_VERSION: |-
|
|
2142
|
+
$(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/^/ /')
|
|
2143
|
+
HOST: |-
|
|
2144
|
+
api.stage.test-app.pan.panter.cloud
|
|
2145
|
+
ROOT_URL: |-
|
|
2146
|
+
https://api.stage.test-app.pan.panter.cloud
|
|
2147
|
+
HOST_INTERNAL: |-
|
|
2148
|
+
api.stage.test-app.pan.panter.cloud
|
|
2149
|
+
HOST_CANONICAL: |-
|
|
2150
|
+
api.stage.test-app.pan.panter.cloud
|
|
2151
|
+
ROOT_URL_INTERNAL: |-
|
|
2152
|
+
https://api.stage.test-app.pan.panter.cloud
|
|
2153
|
+
KUBE_NAMESPACE: |-
|
|
2154
|
+
pan-test-app-stage
|
|
2155
|
+
KUBE_APP_NAME: |-
|
|
2156
|
+
api
|
|
2157
|
+
KUBE_APP_NAME_PREFIX: ""
|
|
2158
|
+
_ALL_ENV_VAR_KEYS: |-
|
|
2159
|
+
["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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]
|
|
2192
2160
|
application:
|
|
2193
|
-
host:
|
|
2194
|
-
|
|
2161
|
+
host: |-
|
|
2162
|
+
api.stage.test-app.pan.panter.cloud
|
|
2163
|
+
command: |-
|
|
2164
|
+
yarn start
|
|
2195
2165
|
livenessProbe:
|
|
2196
2166
|
httpGet:
|
|
2197
|
-
path:
|
|
2167
|
+
path: |-
|
|
2168
|
+
__health
|
|
2198
2169
|
readinessProbe:
|
|
2199
2170
|
httpGet:
|
|
2200
|
-
path:
|
|
2171
|
+
path: |-
|
|
2172
|
+
__health
|
|
2201
2173
|
startupProbe:
|
|
2202
2174
|
httpGet:
|
|
2203
|
-
path:
|
|
2175
|
+
path: |-
|
|
2176
|
+
__health
|
|
2204
2177
|
cloudsql:
|
|
2205
2178
|
enabled: true
|
|
2206
|
-
dbUser:
|
|
2207
|
-
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2179
|
+
dbUser: |-
|
|
2180
|
+
postgres
|
|
2181
|
+
instanceConnectionName: |-
|
|
2182
|
+
myproject:europe-west6:instance-name
|
|
2183
|
+
proxyCredentials: |-
|
|
2184
|
+
$CL_stage_api_cloudsqlProxyCredentials
|
|
2185
|
+
fullDbName: |-
|
|
2186
|
+
pan-test-app-stage-api
|
|
2187
|
+
type: |-
|
|
2188
|
+
unmanaged
|
|
2189
|
+
|
|
2190
|
+
EOF
|
|
2211
2191
|
",
|
|
2212
|
-
"
|
|
2213
|
-
"
|
|
2214
|
-
"
|
|
2215
|
-
"
|
|
2216
|
-
"
|
|
2217
|
-
"
|
|
2192
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
|
|
2193
|
+
"kubernetesCreateSecret",
|
|
2194
|
+
"kubernetesDeploy",
|
|
2195
|
+
"echo Uploading SBOM to Dependency Track",
|
|
2196
|
+
"/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",
|
|
2197
|
+
"echo deployment successful ๐ป",
|
|
2198
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
2199
|
+
],
|
|
2200
|
+
"stage": "deploy stage",
|
|
2201
|
+
"variables": {
|
|
2202
|
+
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
2203
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
2204
|
+
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
2218
2205
|
},
|
|
2219
2206
|
},
|
|
2220
2207
|
"api ๐ Stop โ ๏ธ | prod ": {
|
|
2208
|
+
"allow_failure": true,
|
|
2209
|
+
"artifacts": {
|
|
2210
|
+
"reports": {
|
|
2211
|
+
"dotenv": "gitlab_environment.env",
|
|
2212
|
+
},
|
|
2213
|
+
},
|
|
2221
2214
|
"environment": {
|
|
2222
2215
|
"action": "stop",
|
|
2223
2216
|
"name": "prod/api",
|
|
2224
|
-
"url": "
|
|
2217
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
2225
2218
|
},
|
|
2226
2219
|
"image": "path/to/docker/kubernetes:the-version",
|
|
2227
2220
|
"interruptible": true,
|
|
@@ -2235,16 +2228,40 @@ cloudsql:
|
|
|
2235
2228
|
},
|
|
2236
2229
|
"rules": [
|
|
2237
2230
|
{
|
|
2238
|
-
"allow_failure": true,
|
|
2239
2231
|
"if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
|
|
2240
2232
|
"when": "on_success",
|
|
2241
2233
|
},
|
|
2242
2234
|
{
|
|
2243
|
-
"allow_failure": true,
|
|
2244
2235
|
"when": "manual",
|
|
2245
2236
|
},
|
|
2246
2237
|
],
|
|
2247
2238
|
"script": [
|
|
2239
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
2240
|
+
"export ENV_SHORT="prod"",
|
|
2241
|
+
"export APP_DIR="api"",
|
|
2242
|
+
"export ENV_TYPE="prod"",
|
|
2243
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
2244
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
2245
|
+
"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")"",
|
|
2246
|
+
"export HOST="api.prod.test-app.pan.panter.cloud"",
|
|
2247
|
+
"export ROOT_URL="https://api.prod.test-app.pan.panter.cloud"",
|
|
2248
|
+
"export HOST_INTERNAL="api.prod.test-app.pan.panter.cloud"",
|
|
2249
|
+
"export HOST_CANONICAL="api.prod.test-app.pan.panter.cloud"",
|
|
2250
|
+
"export ROOT_URL_INTERNAL="https://api.prod.test-app.pan.panter.cloud"",
|
|
2251
|
+
"export KUBE_NAMESPACE="pan-test-app-prod"",
|
|
2252
|
+
"export KUBE_APP_NAME="api"",
|
|
2253
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
2254
|
+
"export POSTGRESQL_PASSWORD="$CL_prod_api_POSTGRESQL_PASSWORD"",
|
|
2255
|
+
"export cloudsqlProxyCredentials="$CL_prod_api_cloudsqlProxyCredentials"",
|
|
2256
|
+
"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\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\"]"",
|
|
2257
|
+
"export RELEASE_NAME="pan-test-app-prod-api"",
|
|
2258
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
2259
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
2260
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
2261
|
+
"export HELM_ARGS=""",
|
|
2262
|
+
"export COMPONENT_NAME="api"",
|
|
2263
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
2264
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
2248
2265
|
"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",
|
|
2249
2266
|
"kubectl config set-credentials "kube-pan-test-app-prod-api" --token="$CL_prod_api_KUBE_TOKEN"",
|
|
2250
2267
|
"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"",
|
|
@@ -2252,84 +2269,27 @@ cloudsql:
|
|
|
2252
2269
|
"kubernetesDelete",
|
|
2253
2270
|
"echo Disabling component in Dependency Track",
|
|
2254
2271
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.prod.test-app.pan.panter.cloud" || true",
|
|
2272
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.prod.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
2255
2273
|
],
|
|
2256
2274
|
"stage": "stop prod",
|
|
2257
2275
|
"variables": {
|
|
2258
|
-
"APP_DIR": "api",
|
|
2259
|
-
"BUILD_ID": "some-id",
|
|
2260
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
2261
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
2262
|
-
"BUILD_INFO_ID": "some-id",
|
|
2263
|
-
"COMPONENT_NAME": "api",
|
|
2264
|
-
"ENV_SHORT": "prod",
|
|
2265
|
-
"ENV_TYPE": "prod",
|
|
2266
2276
|
"GIT_STRATEGY": "none",
|
|
2267
|
-
"HELM_ARGS": "",
|
|
2268
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
2269
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
2270
|
-
"HOST": "api.prod.test-app.pan.panter.cloud",
|
|
2271
|
-
"HOST_CANONICAL": "api.prod.test-app.pan.panter.cloud",
|
|
2272
|
-
"HOST_INTERNAL": "api.prod.test-app.pan.panter.cloud",
|
|
2273
2277
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
2274
2278
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
2275
2279
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
2276
|
-
"KUBE_APP_NAME": "api",
|
|
2277
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
2278
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
2279
|
-
"KUBE_NAMESPACE": "pan-test-app-prod",
|
|
2280
|
-
"KUBE_VALUES": "env:
|
|
2281
|
-
secret:
|
|
2282
|
-
POSTGRESQL_PASSWORD: '$CL_prod_api_POSTGRESQL_PASSWORD'
|
|
2283
|
-
cloudsqlProxyCredentials: '$CL_prod_api_cloudsqlProxyCredentials'
|
|
2284
|
-
public:
|
|
2285
|
-
ENV_SHORT: 'prod'
|
|
2286
|
-
APP_DIR: 'api'
|
|
2287
|
-
ENV_TYPE: 'prod'
|
|
2288
|
-
BUILD_INFO_ID: 'some-id'
|
|
2289
|
-
BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
|
|
2290
|
-
BUILD_INFO_CURRENT_VERSION: '3.2.1'
|
|
2291
|
-
HOST: 'api.prod.test-app.pan.panter.cloud'
|
|
2292
|
-
ROOT_URL: 'https://api.prod.test-app.pan.panter.cloud'
|
|
2293
|
-
HOST_CANONICAL: 'api.prod.test-app.pan.panter.cloud'
|
|
2294
|
-
ROOT_URL_INTERNAL: 'https://api.prod.test-app.pan.panter.cloud'
|
|
2295
|
-
KUBE_NAMESPACE: 'pan-test-app-prod'
|
|
2296
|
-
KUBE_APP_NAME: 'api'
|
|
2297
|
-
KUBE_APP_NAME_PREFIX: ''
|
|
2298
|
-
HOST_INTERNAL: 'api.prod.test-app.pan.panter.cloud'
|
|
2299
|
-
_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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]'
|
|
2300
|
-
application:
|
|
2301
|
-
host: 'api.prod.test-app.pan.panter.cloud'
|
|
2302
|
-
command: 'yarn start'
|
|
2303
|
-
livenessProbe:
|
|
2304
|
-
httpGet:
|
|
2305
|
-
path: '__health'
|
|
2306
|
-
readinessProbe:
|
|
2307
|
-
httpGet:
|
|
2308
|
-
path: '__health'
|
|
2309
|
-
startupProbe:
|
|
2310
|
-
httpGet:
|
|
2311
|
-
path: '__health'
|
|
2312
|
-
cloudsql:
|
|
2313
|
-
enabled: true
|
|
2314
|
-
dbUser: 'postgres'
|
|
2315
|
-
instanceConnectionName: 'myproject:europe-west6:instance-name'
|
|
2316
|
-
proxyCredentials: '$CL_prod_api_cloudsqlProxyCredentials'
|
|
2317
|
-
fullDbName: 'pan-test-app-prod-api'
|
|
2318
|
-
type: 'unmanaged'
|
|
2319
|
-
",
|
|
2320
|
-
"POSTGRESQL_PASSWORD": "$CL_prod_api_POSTGRESQL_PASSWORD",
|
|
2321
|
-
"RELEASE_NAME": "pan-test-app-prod-api",
|
|
2322
|
-
"ROOT_URL": "https://api.prod.test-app.pan.panter.cloud",
|
|
2323
|
-
"ROOT_URL_INTERNAL": "https://api.prod.test-app.pan.panter.cloud",
|
|
2324
|
-
"_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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]",
|
|
2325
|
-
"cloudsqlProxyCredentials": "$CL_prod_api_cloudsqlProxyCredentials",
|
|
2326
2280
|
},
|
|
2327
2281
|
},
|
|
2328
2282
|
"api ๐ Stop โ ๏ธ | stage ": {
|
|
2283
|
+
"allow_failure": true,
|
|
2284
|
+
"artifacts": {
|
|
2285
|
+
"reports": {
|
|
2286
|
+
"dotenv": "gitlab_environment.env",
|
|
2287
|
+
},
|
|
2288
|
+
},
|
|
2329
2289
|
"environment": {
|
|
2330
2290
|
"action": "stop",
|
|
2331
2291
|
"name": "stage/api",
|
|
2332
|
-
"url": "
|
|
2292
|
+
"url": "$CL_GITLAB_ENVIRONMENT_URL",
|
|
2333
2293
|
},
|
|
2334
2294
|
"image": "path/to/docker/kubernetes:the-version",
|
|
2335
2295
|
"interruptible": true,
|
|
@@ -2343,16 +2303,40 @@ cloudsql:
|
|
|
2343
2303
|
},
|
|
2344
2304
|
"rules": [
|
|
2345
2305
|
{
|
|
2346
|
-
"allow_failure": true,
|
|
2347
2306
|
"if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
|
|
2348
2307
|
"when": "on_success",
|
|
2349
2308
|
},
|
|
2350
2309
|
{
|
|
2351
|
-
"allow_failure": true,
|
|
2352
2310
|
"when": "manual",
|
|
2353
2311
|
},
|
|
2354
2312
|
],
|
|
2355
2313
|
"script": [
|
|
2314
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
2315
|
+
"export ENV_SHORT="stage"",
|
|
2316
|
+
"export APP_DIR="api"",
|
|
2317
|
+
"export ENV_TYPE="stage"",
|
|
2318
|
+
"export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
2319
|
+
"export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
|
|
2320
|
+
"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")"",
|
|
2321
|
+
"export HOST="api.stage.test-app.pan.panter.cloud"",
|
|
2322
|
+
"export ROOT_URL="https://api.stage.test-app.pan.panter.cloud"",
|
|
2323
|
+
"export HOST_INTERNAL="api.stage.test-app.pan.panter.cloud"",
|
|
2324
|
+
"export HOST_CANONICAL="api.stage.test-app.pan.panter.cloud"",
|
|
2325
|
+
"export ROOT_URL_INTERNAL="https://api.stage.test-app.pan.panter.cloud"",
|
|
2326
|
+
"export KUBE_NAMESPACE="pan-test-app-stage"",
|
|
2327
|
+
"export KUBE_APP_NAME="api"",
|
|
2328
|
+
"export KUBE_APP_NAME_PREFIX=""",
|
|
2329
|
+
"export POSTGRESQL_PASSWORD="$CL_stage_api_POSTGRESQL_PASSWORD"",
|
|
2330
|
+
"export cloudsqlProxyCredentials="$CL_stage_api_cloudsqlProxyCredentials"",
|
|
2331
|
+
"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\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\"]"",
|
|
2332
|
+
"export RELEASE_NAME="pan-test-app-stage-api"",
|
|
2333
|
+
"export HELM_EXPERIMENTAL_OCI="1"",
|
|
2334
|
+
"export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
|
|
2335
|
+
"export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
|
|
2336
|
+
"export HELM_ARGS=""",
|
|
2337
|
+
"export COMPONENT_NAME="api"",
|
|
2338
|
+
"export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
|
|
2339
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
2356
2340
|
"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",
|
|
2357
2341
|
"kubectl config set-credentials "kube-pan-test-app-stage-api" --token="$CL_stage_api_KUBE_TOKEN"",
|
|
2358
2342
|
"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"",
|
|
@@ -2360,77 +2344,14 @@ cloudsql:
|
|
|
2360
2344
|
"kubernetesDelete",
|
|
2361
2345
|
"echo Disabling component in Dependency Track",
|
|
2362
2346
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.stage.test-app.pan.panter.cloud" || true",
|
|
2347
|
+
"echo "CL_GITLAB_ENVIRONMENT_URL=https://api.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
2363
2348
|
],
|
|
2364
2349
|
"stage": "stop stage",
|
|
2365
2350
|
"variables": {
|
|
2366
|
-
"APP_DIR": "api",
|
|
2367
|
-
"BUILD_ID": "some-id",
|
|
2368
|
-
"BUILD_INFO_BUILD_TIME": "01-01-2023 12:13:14",
|
|
2369
|
-
"BUILD_INFO_CURRENT_VERSION": "3.2.1",
|
|
2370
|
-
"BUILD_INFO_ID": "some-id",
|
|
2371
|
-
"COMPONENT_NAME": "api",
|
|
2372
|
-
"ENV_SHORT": "stage",
|
|
2373
|
-
"ENV_TYPE": "stage",
|
|
2374
2351
|
"GIT_STRATEGY": "none",
|
|
2375
|
-
"HELM_ARGS": "",
|
|
2376
|
-
"HELM_EXPERIMENTAL_OCI": "1",
|
|
2377
|
-
"HELM_GITLAB_CHART_NAME": "/helm-charts/the-panter-chart",
|
|
2378
|
-
"HOST": "api.stage.test-app.pan.panter.cloud",
|
|
2379
|
-
"HOST_CANONICAL": "api.stage.test-app.pan.panter.cloud",
|
|
2380
|
-
"HOST_INTERNAL": "api.stage.test-app.pan.panter.cloud",
|
|
2381
2352
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
2382
2353
|
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
2383
2354
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
2384
|
-
"KUBE_APP_NAME": "api",
|
|
2385
|
-
"KUBE_APP_NAME_PREFIX": "",
|
|
2386
|
-
"KUBE_DOCKER_IMAGE_PULL_SECRET": "gitlab-registry-api",
|
|
2387
|
-
"KUBE_NAMESPACE": "pan-test-app-stage",
|
|
2388
|
-
"KUBE_VALUES": "env:
|
|
2389
|
-
secret:
|
|
2390
|
-
POSTGRESQL_PASSWORD: '$CL_stage_api_POSTGRESQL_PASSWORD'
|
|
2391
|
-
cloudsqlProxyCredentials: '$CL_stage_api_cloudsqlProxyCredentials'
|
|
2392
|
-
public:
|
|
2393
|
-
ENV_SHORT: 'stage'
|
|
2394
|
-
APP_DIR: 'api'
|
|
2395
|
-
ENV_TYPE: 'stage'
|
|
2396
|
-
BUILD_INFO_ID: 'some-id'
|
|
2397
|
-
BUILD_INFO_BUILD_TIME: '01-01-2023 12:13:14'
|
|
2398
|
-
BUILD_INFO_CURRENT_VERSION: '3.2.1'
|
|
2399
|
-
HOST: 'api.stage.test-app.pan.panter.cloud'
|
|
2400
|
-
ROOT_URL: 'https://api.stage.test-app.pan.panter.cloud'
|
|
2401
|
-
HOST_CANONICAL: 'api.stage.test-app.pan.panter.cloud'
|
|
2402
|
-
ROOT_URL_INTERNAL: 'https://api.stage.test-app.pan.panter.cloud'
|
|
2403
|
-
KUBE_NAMESPACE: 'pan-test-app-stage'
|
|
2404
|
-
KUBE_APP_NAME: 'api'
|
|
2405
|
-
KUBE_APP_NAME_PREFIX: ''
|
|
2406
|
-
HOST_INTERNAL: 'api.stage.test-app.pan.panter.cloud'
|
|
2407
|
-
_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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]'
|
|
2408
|
-
application:
|
|
2409
|
-
host: 'api.stage.test-app.pan.panter.cloud'
|
|
2410
|
-
command: 'yarn start'
|
|
2411
|
-
livenessProbe:
|
|
2412
|
-
httpGet:
|
|
2413
|
-
path: '__health'
|
|
2414
|
-
readinessProbe:
|
|
2415
|
-
httpGet:
|
|
2416
|
-
path: '__health'
|
|
2417
|
-
startupProbe:
|
|
2418
|
-
httpGet:
|
|
2419
|
-
path: '__health'
|
|
2420
|
-
cloudsql:
|
|
2421
|
-
enabled: true
|
|
2422
|
-
dbUser: 'postgres'
|
|
2423
|
-
instanceConnectionName: 'myproject:europe-west6:instance-name'
|
|
2424
|
-
proxyCredentials: '$CL_stage_api_cloudsqlProxyCredentials'
|
|
2425
|
-
fullDbName: 'pan-test-app-stage-api'
|
|
2426
|
-
type: 'unmanaged'
|
|
2427
|
-
",
|
|
2428
|
-
"POSTGRESQL_PASSWORD": "$CL_stage_api_POSTGRESQL_PASSWORD",
|
|
2429
|
-
"RELEASE_NAME": "pan-test-app-stage-api",
|
|
2430
|
-
"ROOT_URL": "https://api.stage.test-app.pan.panter.cloud",
|
|
2431
|
-
"ROOT_URL_INTERNAL": "https://api.stage.test-app.pan.panter.cloud",
|
|
2432
|
-
"_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","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials"]",
|
|
2433
|
-
"cloudsqlProxyCredentials": "$CL_stage_api_cloudsqlProxyCredentials",
|
|
2434
2355
|
},
|
|
2435
2356
|
},
|
|
2436
2357
|
"api ๐งพ sbom | prod ": {
|
|
@@ -2451,6 +2372,8 @@ cloudsql:
|
|
|
2451
2372
|
],
|
|
2452
2373
|
},
|
|
2453
2374
|
"script": [
|
|
2375
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
2376
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
2454
2377
|
"trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
|
|
2455
2378
|
],
|
|
2456
2379
|
"stage": "build",
|
|
@@ -2474,6 +2397,8 @@ cloudsql:
|
|
|
2474
2397
|
],
|
|
2475
2398
|
},
|
|
2476
2399
|
"script": [
|
|
2400
|
+
"echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
|
|
2401
|
+
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
2477
2402
|
"trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
|
|
2478
2403
|
],
|
|
2479
2404
|
"stage": "build",
|
|
@@ -2526,7 +2451,7 @@ cloudsql:
|
|
|
2526
2451
|
],
|
|
2527
2452
|
"variables": {
|
|
2528
2453
|
"FF_USE_FASTZIP": "true",
|
|
2529
|
-
"GIT_DEPTH": 1,
|
|
2454
|
+
"GIT_DEPTH": "1",
|
|
2530
2455
|
},
|
|
2531
2456
|
"workflow": {
|
|
2532
2457
|
"rules": [
|