@catladder/pipeline 0.0.0-refactore-catenv-command-validates-argument-78d05852 โ 0.0.0-reference-database-url-1befbbee
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/README.md +15 -1
- package/dist/bash/BashExpression.d.ts +36 -0
- package/dist/bash/BashExpression.js +114 -0
- package/dist/bash/bashEscape.d.ts +37 -0
- package/dist/bash/bashEscape.js +119 -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 +69 -0
- package/dist/bash/getInjectVarsScript.d.ts +2 -0
- package/dist/bash/getInjectVarsScript.js +47 -0
- package/dist/bash/index.d.ts +2 -0
- package/dist/bash/index.js +26 -0
- package/dist/build/artifacts/createBuildJobArtifact.d.ts +3 -0
- package/dist/build/artifacts/createBuildJobArtifact.js +97 -0
- package/dist/build/base/__tests__/createArtifactsConfig.test.js +3 -1
- package/dist/build/base/constants.js +4 -2
- package/dist/build/base/createAppBuildJob.d.ts +5 -3
- package/dist/build/base/createAppBuildJob.js +18 -15
- package/dist/build/base/createArtifactsConfig.d.ts +1 -1
- package/dist/build/base/createArtifactsConfig.js +3 -1
- package/dist/build/base/createBuildJobDefinition.d.ts +6 -0
- package/dist/build/base/createBuildJobDefinition.js +58 -0
- package/dist/build/base/index.d.ts +6 -4
- package/dist/build/base/index.js +17 -6
- package/dist/build/base/writeBuildInfo.d.ts +2 -2
- package/dist/build/base/writeBuildInfo.js +4 -3
- package/dist/build/base/writeDotEnv.d.ts +3 -2
- package/dist/build/base/writeDotEnv.js +30 -6
- package/dist/build/cache/createJobCache.d.ts +7 -0
- package/dist/build/cache/createJobCache.js +115 -0
- package/dist/build/cache/getAllCacheConfigsFromConfig.d.ts +3 -0
- package/dist/build/cache/getAllCacheConfigsFromConfig.js +64 -0
- package/dist/build/cache/transformLegacyJobCache.d.ts +3 -0
- package/dist/build/cache/transformLegacyJobCache.js +29 -0
- package/dist/build/custom/__tests__/testJob.test.js +15 -16
- package/dist/build/custom/buildJob.d.ts +2 -2
- package/dist/build/custom/buildJob.js +8 -66
- package/dist/build/custom/index.d.ts +2 -2
- package/dist/build/custom/index.js +3 -1
- package/dist/build/custom/testJob.d.ts +4 -4
- package/dist/build/custom/testJob.js +25 -20
- package/dist/build/docker.d.ts +37 -46
- package/dist/build/docker.js +65 -34
- package/dist/build/index.d.ts +14 -7
- package/dist/build/index.js +44 -17
- package/dist/build/node/buildJob.d.ts +8 -2
- package/dist/build/node/buildJob.js +39 -52
- package/dist/build/node/cache.d.ts +4 -5
- package/dist/build/node/cache.js +18 -24
- package/dist/build/node/constants.js +5 -3
- package/dist/build/node/index.d.ts +4 -4
- package/dist/build/node/index.js +3 -1
- package/dist/build/node/meteor.d.ts +2 -2
- package/dist/build/node/meteor.js +10 -12
- package/dist/build/node/testJob.d.ts +3 -2
- package/dist/build/node/testJob.js +29 -19
- package/dist/build/node/yarn.d.ts +4 -3
- package/dist/build/node/yarn.js +11 -12
- package/dist/build/rails/build.d.ts +2 -2
- package/dist/build/rails/build.js +13 -6
- package/dist/build/rails/index.d.ts +2 -2
- package/dist/build/rails/index.js +3 -1
- package/dist/build/rails/test.d.ts +2 -2
- package/dist/build/rails/test.js +30 -11
- package/dist/build/sbom.d.ts +2 -2
- package/dist/build/sbom.js +13 -7
- package/dist/build/types.d.ts +160 -47
- package/dist/build/types.js +10 -2
- package/dist/catladder-gitlab.js +129 -49
- package/dist/config/__tests__/configruedEnvs.test.js +3 -1
- package/dist/config/__tests__/getAllEnvs.test.js +79 -0
- package/dist/config/__tests__/getAllEnvsInAllComponents.test.d.ts +1 -0
- package/dist/config/__tests__/getAllEnvsInAllComponents.test.js +73 -0
- package/dist/config/configruedEnvs.js +3 -1
- package/dist/config/index.js +13 -7
- package/dist/config/readConfig.d.ts +2 -2
- package/dist/config/readConfig.js +191 -40
- package/dist/constants.js +5 -3
- package/dist/context/createAllComponentsContext.d.ts +12 -0
- package/dist/{pipeline/commitInfo/getCommitInfo.js โ context/createAllComponentsContext.js} +35 -19
- package/dist/context/createComponentContext.d.ts +11 -0
- package/dist/context/createComponentContext.js +262 -0
- package/dist/context/createWorkspaceContext.d.ts +16 -0
- package/dist/context/createWorkspaceContext.js +173 -0
- package/dist/context/getBuildInfoVariables.d.ts +6 -0
- package/dist/context/getBuildInfoVariables.js +55 -0
- package/dist/context/getEnvConfig.js +21 -4
- package/dist/context/getEnvType.js +3 -1
- package/dist/context/getEnvironment.d.ts +3 -3
- package/dist/context/getEnvironment.js +11 -12
- package/dist/context/getEnvironmentContext.d.ts +7 -3
- package/dist/context/getEnvironmentContext.js +21 -11
- package/dist/context/getEnvironmentVariables.d.ts +22 -5
- package/dist/context/getEnvironmentVariables.js +79 -53
- package/dist/context/getLabels.d.ts +2 -2
- package/dist/context/getLabels.js +9 -7
- package/dist/context/getReviewSlug.d.ts +4 -0
- package/dist/context/getReviewSlug.js +21 -0
- package/dist/context/index.d.ts +2 -4
- package/dist/context/index.js +15 -162
- 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 +3 -3
- package/dist/deploy/base/deploy.js +37 -21
- package/dist/deploy/base/index.d.ts +3 -5
- package/dist/deploy/base/index.js +3 -1
- package/dist/deploy/base/rollback.d.ts +3 -3
- package/dist/deploy/base/rollback.js +13 -9
- package/dist/deploy/base/stop.d.ts +3 -3
- 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 +4 -2
- package/dist/deploy/cloudRun/artifactsRegistry.d.ts +8 -11
- package/dist/deploy/cloudRun/artifactsRegistry.js +15 -14
- package/dist/deploy/cloudRun/cleanup.d.ts +2 -2
- package/dist/deploy/cloudRun/cleanup.js +3 -1
- package/dist/deploy/cloudRun/cloudRunRevisions.d.ts +2 -2
- package/dist/deploy/cloudRun/cloudRunRevisions.js +7 -6
- package/dist/deploy/cloudRun/createJobs/cloudRunJobs.d.ts +8 -6
- package/dist/deploy/cloudRun/createJobs/cloudRunJobs.js +57 -106
- package/dist/deploy/cloudRun/createJobs/cloudRunServices.d.ts +3 -3
- package/dist/deploy/cloudRun/createJobs/cloudRunServices.js +79 -15
- package/dist/deploy/cloudRun/createJobs/common.d.ts +7 -7
- package/dist/deploy/cloudRun/createJobs/common.js +6 -3
- package/dist/deploy/cloudRun/createJobs/constants.d.ts +1 -0
- package/dist/deploy/cloudRun/createJobs/constants.js +7 -0
- package/dist/deploy/cloudRun/createJobs/execute/onDeploy.d.ts +3 -0
- package/dist/deploy/cloudRun/createJobs/execute/onDeploy.js +115 -0
- package/dist/deploy/cloudRun/createJobs/execute/schedules.d.ts +3 -0
- package/dist/deploy/cloudRun/createJobs/execute/schedules.js +173 -0
- package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.d.ts +2 -2
- package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +13 -5
- package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.d.ts +2 -2
- package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.js +7 -3
- package/dist/deploy/cloudRun/createJobs/healthCheck.d.ts +5 -0
- package/dist/deploy/cloudRun/createJobs/healthCheck.js +82 -0
- package/dist/deploy/cloudRun/createJobs/index.d.ts +2 -2
- package/dist/deploy/cloudRun/createJobs/index.js +26 -12
- package/dist/deploy/cloudRun/createJobs/volumes.d.ts +3 -0
- package/dist/deploy/cloudRun/createJobs/volumes.js +58 -0
- package/dist/deploy/cloudRun/index.d.ts +2 -2
- package/dist/deploy/cloudRun/index.js +25 -13
- package/dist/deploy/cloudRun/utils/cloudRunExecutionUrl.d.ts +10 -0
- package/dist/deploy/cloudRun/utils/cloudRunExecutionUrl.js +16 -0
- package/dist/deploy/cloudRun/utils/createArgsString.d.ts +2 -2
- package/dist/deploy/cloudRun/utils/createArgsString.js +3 -1
- package/dist/deploy/cloudRun/utils/database.d.ts +25 -4
- package/dist/deploy/cloudRun/utils/database.js +49 -15
- package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.d.ts +2 -2
- package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.js +3 -1
- package/dist/deploy/cloudRun/utils/getJobOrServiceArgs.d.ts +2 -0
- package/dist/deploy/cloudRun/utils/getJobOrServiceArgs.js +12 -0
- package/dist/deploy/cloudRun/utils/getServiceName.d.ts +2 -2
- package/dist/deploy/cloudRun/utils/getServiceName.js +3 -1
- package/dist/deploy/cloudRun/utils/jobName.d.ts +6 -1
- package/dist/deploy/cloudRun/utils/jobName.js +18 -4
- 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.d.ts +2 -2
- package/dist/deploy/custom/deployJob.js +10 -9
- package/dist/deploy/custom/index.d.ts +2 -2
- package/dist/deploy/custom/index.js +3 -1
- package/dist/deploy/dockerTag/deployJob.d.ts +2 -2
- package/dist/deploy/dockerTag/deployJob.js +6 -6
- package/dist/deploy/dockerTag/index.d.ts +2 -2
- package/dist/deploy/dockerTag/index.js +3 -1
- package/dist/deploy/index.d.ts +10 -9
- package/dist/deploy/index.js +13 -7
- package/dist/deploy/kubernetes/additionalSecretKeys.d.ts +3 -1
- package/dist/deploy/kubernetes/additionalSecretKeys.js +3 -1
- package/dist/deploy/kubernetes/cloudSql/index.d.ts +6 -5
- package/dist/deploy/kubernetes/cloudSql/index.js +14 -21
- package/dist/deploy/kubernetes/deployJob.d.ts +2 -2
- package/dist/deploy/kubernetes/deployJob.js +23 -22
- package/dist/deploy/kubernetes/index.d.ts +2 -2
- package/dist/deploy/kubernetes/index.js +52 -15
- package/dist/deploy/kubernetes/kubeEnv.d.ts +5 -4
- package/dist/deploy/kubernetes/kubeEnv.js +9 -5
- package/dist/deploy/kubernetes/kubeValues.d.ts +5 -6
- package/dist/deploy/kubernetes/kubeValues.js +17 -19
- package/dist/deploy/kubernetes/mongodb.d.ts +2 -2
- package/dist/deploy/kubernetes/mongodb.js +14 -12
- package/dist/deploy/sbom.d.ts +4 -4
- package/dist/deploy/sbom.js +8 -4
- package/dist/deploy/types/base.d.ts +5 -5
- package/dist/deploy/types/base.js +3 -1
- package/dist/deploy/types/custom.d.ts +3 -7
- 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 +291 -16
- package/dist/deploy/types/googleCloudRun.js +28 -1
- package/dist/deploy/types/index.d.ts +8 -7
- package/dist/deploy/types/index.js +21 -10
- package/dist/deploy/types/kubernetes.d.ts +21 -54
- package/dist/deploy/types/kubernetes.js +3 -1
- package/dist/deploy/utils.d.ts +2 -2
- package/dist/deploy/utils.js +5 -2
- package/dist/globalScriptFunctions/index.d.ts +14 -0
- package/dist/globalScriptFunctions/index.js +37 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.js +18 -9
- package/dist/packageInfos.d.ts +4 -0
- package/dist/packageInfos.js +20 -0
- package/dist/pipeline/__tests__/getPipelineStages.test.d.ts +1 -0
- package/dist/pipeline/__tests__/getPipelineStages.test.js +73 -0
- package/dist/pipeline/createAllJobs.d.ts +16 -6
- package/dist/pipeline/createAllJobs.js +99 -27
- package/dist/pipeline/createJobsForComponent.d.ts +2 -2
- package/dist/pipeline/createJobsForComponent.js +9 -149
- package/dist/pipeline/createJobsForWorkspace.d.ts +3 -0
- package/dist/pipeline/createJobsForWorkspace.js +12 -0
- package/dist/pipeline/createMainPipeline.d.ts +3 -0
- package/dist/pipeline/createMainPipeline.js +283 -0
- package/dist/pipeline/generatePipelineFiles.d.ts +7 -0
- package/dist/pipeline/generatePipelineFiles.js +305 -0
- package/dist/pipeline/getPipelineStages.d.ts +7 -0
- package/dist/pipeline/getPipelineStages.js +56 -0
- package/dist/pipeline/gitlab/createGitlabJobs.d.ts +11 -14
- package/dist/pipeline/gitlab/createGitlabJobs.js +264 -74
- package/dist/pipeline/gitlab/createGitlabPipeline.d.ts +9 -0
- package/dist/pipeline/gitlab/createGitlabPipeline.js +77 -0
- package/dist/pipeline/gitlab/gitlabReleaseJobs.d.ts +33 -0
- package/dist/pipeline/gitlab/gitlabReleaseJobs.js +25 -0
- package/dist/pipeline/gitlab/sortGitLabJobDefProps.d.ts +7 -0
- package/dist/pipeline/gitlab/sortGitLabJobDefProps.js +27 -0
- package/dist/pipeline/index.d.ts +3 -2
- package/dist/pipeline/index.js +16 -9
- package/dist/pipeline/packageManager.d.ts +4 -2
- package/dist/pipeline/packageManager.js +56 -19
- package/dist/pipeline/yarn/yarnUtils.d.ts +2 -2
- package/dist/pipeline/yarn/yarnUtils.js +18 -15
- package/dist/rules/index.d.ts +10 -3
- package/dist/rules/index.js +35 -17
- 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 +54 -36
- package/dist/types/config.js +5 -2
- package/dist/types/context.d.ts +123 -38
- package/dist/types/context.js +12 -1
- package/dist/types/environmentContext.d.ts +15 -12
- 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 +8 -8
- package/dist/types/gitlab-types.js +3 -1
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.js +16 -8
- package/dist/types/jobDefinition.d.ts +11 -0
- package/dist/types/jobDefinition.js +5 -0
- package/dist/types/jobs.d.ts +30 -15
- package/dist/types/jobs.js +3 -1
- package/dist/types/pipeline.d.ts +3 -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 +7 -2
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.js +10 -3
- package/dist/utils/jsonParse.d.ts +1 -0
- package/dist/utils/jsonParse.js +14 -0
- package/dist/utils/removeUndefined.d.ts +1 -0
- package/dist/utils/removeUndefined.js +36 -0
- package/dist/utils/writeFiles.d.ts +11 -0
- package/dist/{pipeline/commitInfo/getBuildId.js โ utils/writeFiles.js} +39 -22
- package/dist/variables/VariableValue.d.ts +3 -0
- package/dist/variables/VariableValue.js +5 -0
- package/dist/variables/VariableValueContainingReferences.d.ts +24 -0
- package/dist/variables/VariableValueContainingReferences.js +97 -0
- package/dist/variables/__tests__/resolveAllReferences.test.d.ts +1 -0
- package/dist/variables/__tests__/resolveAllReferences.test.js +218 -0
- package/dist/variables/__tests__/resolveAllReferencesOnce.test.d.ts +1 -0
- package/dist/variables/__tests__/resolveAllReferencesOnce.test.js +171 -0
- package/dist/variables/__tests__/resolveReferencesOnce.test.d.ts +1 -0
- package/dist/variables/__tests__/resolveReferencesOnce.test.js +199 -0
- package/dist/variables/__tests__/variableValue.test.d.ts +1 -0
- package/dist/variables/__tests__/variableValue.test.js +36 -0
- package/dist/variables/resolveAllReferences.d.ts +3 -0
- package/dist/{pipeline/createChildPipeline.js โ variables/resolveAllReferences.js} +44 -48
- package/dist/variables/resolveAllReferencesOnce.d.ts +5 -0
- package/dist/variables/resolveAllReferencesOnce.js +191 -0
- package/dist/variables/resolveReferencesOnce.d.ts +8 -0
- package/dist/variables/resolveReferencesOnce.js +22 -0
- package/examples/.test-gen-ignore +1 -0
- package/examples/__snapshots__/cloud-run-health-check-defaults.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-health-check-only-startup.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-health-check.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-http2.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-llama.test.ts.snap +624 -0
- package/examples/__snapshots__/cloud-run-memory-limit.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-meteor-with-worker.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-nextjs.test.ts.snap +1410 -0
- package/examples/__snapshots__/cloud-run-no-cpu-throttling.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-no-service.test.ts.snap +1502 -0
- package/examples/__snapshots__/cloud-run-non-public.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-post-stop-job.test.ts.snap +1412 -0
- package/examples/__snapshots__/cloud-run-service-custom-vpc-connector.test.ts.snap +1462 -0
- package/examples/__snapshots__/cloud-run-service-custom-vpc.test.ts.snap +1462 -0
- package/examples/__snapshots__/cloud-run-service-gen2.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-service-increase-timout.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-service-with-volumes.test.ts.snap +1466 -0
- package/examples/__snapshots__/cloud-run-storybook.test.ts.snap +1284 -0
- package/examples/__snapshots__/cloud-run-with-gpu.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-with-ngnix.test.ts.snap +1394 -0
- package/examples/__snapshots__/cloud-run-with-sql-legacy-jobs.test.ts.snap +1709 -0
- package/examples/__snapshots__/cloud-run-with-sql-multiple-dbs.test.ts.snap +4515 -0
- package/examples/__snapshots__/cloud-run-with-sql-reuse-db.test.ts.snap +2950 -0
- package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +1772 -0
- package/examples/__snapshots__/cloud-run-with-worker.test.ts.snap +1402 -0
- package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +1261 -0
- package/examples/__snapshots__/custom-build-job.test.ts.snap +1156 -0
- package/examples/__snapshots__/custom-deploy.test.ts.snap +1059 -0
- package/examples/__snapshots__/custom-envs.test.ts.snap +786 -0
- package/examples/__snapshots__/custom-sbom-java.test.ts.snap +1152 -0
- package/examples/__snapshots__/custom-verify-job.test.ts.snap +1606 -0
- package/examples/__snapshots__/git-submodule.test.ts.snap +1395 -0
- package/examples/__snapshots__/kubernetes-application-customization.test.ts.snap +1713 -0
- package/examples/__snapshots__/kubernetes-with-cloud-sql.test.ts.snap +1733 -0
- package/examples/__snapshots__/kubernetes-with-jobs.test.ts.snap +3265 -0
- package/examples/__snapshots__/kubernetes-with-mongodb.test.ts.snap +1837 -0
- package/examples/__snapshots__/local-dot-env.test.ts.snap +1318 -0
- package/examples/__snapshots__/meteor-kubernetes.test.ts.snap +1790 -0
- package/examples/__snapshots__/multiline-var.test.ts.snap +5585 -0
- package/examples/__snapshots__/native-app.test.ts.snap +2210 -0
- package/examples/__snapshots__/node-build-with-custom-image.test.ts.snap +1394 -0
- package/examples/__snapshots__/node-build-with-docker-additions.test.ts.snap +1402 -0
- package/examples/__snapshots__/override-secrets.test.ts.snap +1419 -0
- package/examples/__snapshots__/rails-k8s-with-worker-dockerfile.test.ts.snap +1464 -0
- package/examples/__snapshots__/rails-k8s-with-worker.test.ts.snap +1444 -0
- package/examples/__snapshots__/referencing-other-vars.test.ts.snap +4645 -0
- package/examples/__snapshots__/wait-for-other-deploy.test.ts.snap +1424 -0
- package/examples/__snapshots__/workspace-api-www-turbo-cache.test.ts.snap +2298 -0
- package/examples/__snapshots__/workspace-api-www.test.ts.snap +2290 -0
- package/examples/__utils__/helpers.ts +9 -12
- package/examples/cloud-run-health-check-defaults.test.ts +11 -0
- package/examples/cloud-run-health-check-defaults.ts +28 -0
- package/examples/cloud-run-health-check-only-startup.test.ts +11 -0
- package/examples/cloud-run-health-check-only-startup.ts +38 -0
- package/examples/cloud-run-health-check.test.ts +11 -0
- package/examples/cloud-run-health-check.ts +45 -0
- package/examples/cloud-run-http2.test.ts +11 -0
- package/examples/cloud-run-http2.ts +29 -0
- package/examples/cloud-run-llama.test.ts +11 -0
- package/examples/cloud-run-llama.ts +40 -0
- package/examples/cloud-run-memory-limit.test.ts +11 -0
- package/examples/cloud-run-memory-limit.ts +12 -7
- package/examples/cloud-run-meteor-with-worker.test.ts +11 -0
- package/examples/cloud-run-meteor-with-worker.ts +13 -7
- package/examples/cloud-run-nextjs.test.ts +11 -0
- package/examples/cloud-run-nextjs.ts +28 -0
- package/examples/cloud-run-no-cpu-throttling.test.ts +11 -0
- package/examples/cloud-run-no-cpu-throttling.ts +8 -6
- package/examples/cloud-run-no-service.test.ts +11 -0
- package/examples/cloud-run-no-service.ts +39 -0
- package/examples/cloud-run-non-public.test.ts +11 -0
- package/examples/cloud-run-non-public.ts +7 -6
- package/examples/cloud-run-post-stop-job.test.ts +11 -0
- package/examples/cloud-run-post-stop-job.ts +15 -6
- package/examples/cloud-run-service-custom-vpc-connector.test.ts +11 -0
- package/examples/cloud-run-service-custom-vpc-connector.ts +37 -0
- package/examples/cloud-run-service-custom-vpc.test.ts +11 -0
- package/examples/cloud-run-service-custom-vpc.ts +39 -0
- package/examples/cloud-run-service-gen2.test.ts +11 -0
- package/examples/cloud-run-service-gen2.ts +8 -6
- package/examples/cloud-run-service-increase-timout.test.ts +11 -0
- package/examples/cloud-run-service-increase-timout.ts +29 -0
- package/examples/cloud-run-service-with-volumes.test.ts +11 -0
- package/examples/cloud-run-service-with-volumes.ts +64 -0
- package/examples/cloud-run-storybook.test.ts +11 -0
- package/examples/cloud-run-storybook.ts +33 -0
- package/examples/cloud-run-with-gpu.test.ts +11 -0
- package/examples/cloud-run-with-gpu.ts +30 -0
- package/examples/cloud-run-with-ngnix.test.ts +11 -0
- package/examples/cloud-run-with-ngnix.ts +29 -0
- package/examples/cloud-run-with-sql-legacy-jobs.test.ts +11 -0
- package/examples/cloud-run-with-sql-legacy-jobs.ts +49 -0
- package/examples/cloud-run-with-sql-multiple-dbs.test.ts +11 -0
- package/examples/cloud-run-with-sql-multiple-dbs.ts +87 -0
- package/examples/cloud-run-with-sql-reuse-db.test.ts +11 -0
- package/examples/cloud-run-with-sql-reuse-db.ts +7 -6
- package/examples/cloud-run-with-sql.test.ts +11 -0
- package/examples/cloud-run-with-sql.ts +45 -24
- package/examples/cloud-run-with-worker.test.ts +11 -0
- package/examples/cloud-run-with-worker.ts +8 -6
- package/examples/custom-build-job-with-tests.test.ts +11 -0
- package/examples/custom-build-job-with-tests.ts +7 -6
- package/examples/custom-build-job.test.ts +11 -0
- package/examples/custom-build-job.ts +7 -6
- package/examples/custom-deploy.test.ts +11 -0
- package/examples/custom-deploy.ts +22 -14
- package/examples/custom-envs.test.ts +11 -0
- package/examples/custom-envs.ts +7 -6
- package/examples/custom-sbom-java.test.ts +11 -0
- package/examples/custom-sbom-java.ts +12 -8
- package/examples/custom-verify-job.test.ts +11 -0
- package/examples/custom-verify-job.ts +65 -0
- package/examples/git-submodule.test.ts +11 -0
- package/examples/git-submodule.ts +30 -0
- package/examples/kubernetes-application-customization.test.ts +11 -0
- package/examples/kubernetes-application-customization.ts +9 -6
- package/examples/kubernetes-with-cloud-sql.test.ts +11 -0
- package/examples/kubernetes-with-cloud-sql.ts +9 -6
- package/examples/kubernetes-with-jobs.test.ts +11 -0
- package/examples/kubernetes-with-jobs.ts +9 -6
- package/examples/kubernetes-with-mongodb.test.ts +11 -0
- package/examples/kubernetes-with-mongodb.ts +9 -6
- package/examples/local-dot-env.test.ts +11 -0
- package/examples/local-dot-env.ts +27 -0
- package/examples/meteor-kubernetes.test.ts +11 -0
- package/examples/meteor-kubernetes.ts +6 -7
- package/examples/multiline-var.test.ts +11 -0
- package/examples/multiline-var.ts +107 -0
- package/examples/native-app.test.ts +11 -0
- package/examples/native-app.ts +24 -19
- package/examples/node-build-with-custom-image.test.ts +11 -0
- package/examples/node-build-with-custom-image.ts +7 -6
- package/examples/node-build-with-docker-additions.test.ts +11 -0
- package/examples/node-build-with-docker-additions.ts +7 -6
- package/examples/override-secrets.test.ts +11 -0
- package/examples/override-secrets.ts +44 -0
- package/examples/rails-k8s-with-worker-dockerfile.test.ts +33 -0
- package/examples/rails-k8s-with-worker.test.ts +11 -0
- package/examples/rails-k8s-with-worker.ts +13 -13
- package/examples/referencing-other-vars.test.ts +11 -0
- package/examples/referencing-other-vars.ts +83 -0
- package/examples/wait-for-other-deploy.test.ts +11 -0
- package/examples/wait-for-other-deploy.ts +6 -5
- package/examples/workspace-api-www-turbo-cache.test.ts +11 -0
- package/examples/workspace-api-www-turbo-cache.ts +52 -0
- package/examples/workspace-api-www.test.ts +11 -0
- package/examples/workspace-api-www.ts +46 -0
- package/package.json +23 -26
- package/scripts/generate-examples-test.ts +84 -0
- package/scripts/generate-gitlab-ci-types.ts +2 -2
- package/scripts/tsconfig.json +7 -0
- package/src/bash/BashExpression.ts +78 -0
- package/src/bash/bashEscape.ts +164 -0
- package/src/bash/bashExpressionPerPipelineType.ts +16 -0
- package/src/bash/bashYaml.ts +80 -0
- package/src/bash/getInjectVarsScript.ts +21 -0
- package/src/bash/index.ts +2 -0
- package/src/build/artifacts/createBuildJobArtifact.ts +63 -0
- package/src/build/base/__tests__/createArtifactsConfig.test.ts +3 -3
- package/src/build/base/constants.ts +1 -1
- package/src/build/base/createAppBuildJob.ts +40 -24
- package/src/build/base/createArtifactsConfig.ts +2 -2
- package/src/build/base/createBuildJobDefinition.ts +37 -0
- package/src/build/base/index.ts +40 -8
- package/src/build/base/writeBuildInfo.ts +3 -3
- package/src/build/base/writeDotEnv.ts +25 -6
- package/src/build/cache/createJobCache.ts +83 -0
- package/src/build/cache/getAllCacheConfigsFromConfig.ts +29 -0
- package/src/build/cache/transformLegacyJobCache.ts +14 -0
- package/src/build/custom/__tests__/testJob.test.ts +10 -13
- package/src/build/custom/buildJob.ts +11 -37
- package/src/build/custom/index.ts +4 -2
- package/src/build/custom/testJob.ts +24 -21
- package/src/build/docker.ts +110 -49
- package/src/build/index.ts +45 -11
- package/src/build/node/buildJob.ts +68 -69
- package/src/build/node/cache.ts +28 -34
- package/src/build/node/constants.ts +2 -2
- package/src/build/node/index.ts +13 -4
- package/src/build/node/meteor.ts +19 -24
- package/src/build/node/testJob.ts +44 -25
- package/src/build/node/yarn.ts +22 -15
- package/src/build/rails/build.ts +15 -9
- package/src/build/rails/index.ts +4 -2
- package/src/build/rails/test.ts +41 -12
- package/src/build/sbom.ts +21 -11
- package/src/build/types.ts +198 -47
- package/src/catladder-gitlab.ts +7 -56
- package/src/config/__tests__/__snapshots__/getAllEnvs.test.ts.snap +31 -0
- package/src/config/__tests__/__snapshots__/getAllEnvsInAllComponents.test.ts.snap +15 -0
- package/src/config/__tests__/getAllEnvs.test.ts +71 -0
- package/src/config/__tests__/getAllEnvsInAllComponents.test.ts +63 -0
- package/src/config/configruedEnvs.ts +6 -6
- package/src/config/readConfig.ts +15 -22
- package/src/constants.ts +5 -2
- package/src/context/createAllComponentsContext.ts +31 -0
- package/src/context/createComponentContext.ts +148 -0
- package/src/context/createWorkspaceContext.ts +56 -0
- package/src/context/getBuildInfoVariables.ts +36 -0
- package/src/context/getEnvConfig.ts +25 -5
- package/src/context/getEnvType.ts +1 -1
- package/src/context/getEnvironment.ts +8 -24
- package/src/context/getEnvironmentContext.ts +25 -29
- package/src/context/getEnvironmentVariables.ts +101 -83
- package/src/context/getLabels.ts +8 -5
- package/src/context/getReviewSlug.ts +27 -0
- package/src/context/index.ts +1 -65
- package/src/context/transformJobOnlyVars.ts +6 -3
- package/src/context/utils/envVars.ts +5 -4
- package/src/deploy/base/deploy.ts +63 -47
- package/src/deploy/base/index.ts +11 -6
- package/src/deploy/base/rollback.ts +11 -16
- package/src/deploy/base/stop.ts +11 -15
- package/src/deploy/base/variables.ts +1 -1
- package/src/deploy/cloudRun/artifactsRegistry.ts +32 -28
- package/src/deploy/cloudRun/cleanup.ts +5 -5
- package/src/deploy/cloudRun/cloudRunRevisions.ts +9 -11
- package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +71 -153
- package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +65 -26
- package/src/deploy/cloudRun/createJobs/common.ts +7 -7
- package/src/deploy/cloudRun/createJobs/constants.ts +1 -0
- package/src/deploy/cloudRun/createJobs/execute/onDeploy.ts +102 -0
- package/src/deploy/cloudRun/createJobs/execute/schedules.ts +186 -0
- package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +27 -16
- package/src/deploy/cloudRun/createJobs/getCloudRunStopScripts.ts +9 -11
- package/src/deploy/cloudRun/createJobs/healthCheck.ts +64 -0
- package/src/deploy/cloudRun/createJobs/index.ts +20 -14
- package/src/deploy/cloudRun/createJobs/volumes.ts +23 -0
- package/src/deploy/cloudRun/index.ts +94 -60
- package/src/deploy/cloudRun/utils/cloudRunExecutionUrl.ts +20 -0
- package/src/deploy/cloudRun/utils/createArgsString.ts +6 -2
- package/src/deploy/cloudRun/utils/database.ts +116 -9
- package/src/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.ts +5 -3
- package/src/deploy/cloudRun/utils/getJobOrServiceArgs.ts +18 -0
- package/src/deploy/cloudRun/utils/getServiceName.ts +2 -2
- package/src/deploy/cloudRun/utils/jobName.ts +22 -2
- package/src/deploy/cloudRun/utils/removeFirstLinesFromCommandOutput.ts +1 -1
- package/src/deploy/cloudSql/utils.ts +13 -10
- package/src/deploy/custom/deployJob.ts +15 -10
- package/src/deploy/custom/index.ts +2 -2
- package/src/deploy/dockerTag/deployJob.ts +6 -7
- package/src/deploy/dockerTag/index.ts +8 -7
- package/src/deploy/index.ts +15 -12
- package/src/deploy/kubernetes/additionalSecretKeys.ts +3 -1
- package/src/deploy/kubernetes/cloudSql/index.ts +16 -25
- package/src/deploy/kubernetes/deployJob.ts +30 -21
- package/src/deploy/kubernetes/index.ts +43 -35
- package/src/deploy/kubernetes/kubeEnv.ts +12 -10
- package/src/deploy/kubernetes/kubeValues.ts +25 -20
- package/src/deploy/kubernetes/mongodb.ts +15 -15
- package/src/deploy/sbom.ts +20 -10
- package/src/deploy/types/base.ts +3 -3
- package/src/deploy/types/custom.ts +3 -7
- package/src/deploy/types/googleCloudRun.ts +359 -2
- package/src/deploy/types/index.ts +9 -2
- package/src/deploy/types/kubernetes.ts +1 -36
- package/src/deploy/utils.ts +5 -5
- package/src/globalScriptFunctions/index.ts +30 -0
- package/src/index.ts +4 -1
- package/src/packageInfos.ts +14 -0
- package/src/pipeline/__tests__/__snapshots__/getPipelineStages.test.ts.snap +69 -0
- package/src/pipeline/__tests__/getPipelineStages.test.ts +63 -0
- package/src/pipeline/createAllJobs.ts +67 -33
- package/src/pipeline/createJobsForComponent.ts +17 -37
- package/src/pipeline/createJobsForWorkspace.ts +12 -0
- package/src/pipeline/createMainPipeline.ts +118 -0
- package/src/pipeline/generatePipelineFiles.ts +100 -0
- package/src/pipeline/getPipelineStages.ts +23 -0
- package/src/pipeline/gitlab/createGitlabJobs.ts +398 -108
- package/src/pipeline/gitlab/createGitlabPipeline.ts +35 -0
- package/src/pipeline/gitlab/gitlabReleaseJobs.ts +23 -0
- package/src/pipeline/gitlab/sortGitLabJobDefProps.ts +59 -0
- package/src/pipeline/index.ts +2 -1
- package/src/pipeline/packageManager.ts +42 -18
- package/src/pipeline/yarn/yarnUtils.ts +15 -12
- package/src/rules/index.ts +41 -18
- package/src/runner/index.ts +0 -1
- package/src/types/config.ts +62 -23
- package/src/types/context.ts +167 -36
- package/src/types/environmentContext.ts +18 -13
- package/src/types/gitlab-ci-yml.ts +0 -1
- package/src/types/gitlab-types.ts +10 -7
- package/src/types/index.ts +2 -0
- package/src/types/jobDefinition.ts +34 -0
- package/src/types/jobs.ts +31 -15
- package/src/types/utils.ts +4 -4
- package/src/utils/gitlab.ts +20 -3
- package/src/utils/index.ts +6 -3
- package/src/utils/jsonParse.ts +7 -0
- package/src/utils/removeUndefined.ts +4 -0
- package/src/utils/writeFiles.ts +52 -0
- package/src/variables/VariableValue.ts +6 -0
- package/src/variables/VariableValueContainingReferences.ts +89 -0
- package/src/variables/__tests__/resolveAllReferences.test.ts +110 -0
- package/src/variables/__tests__/resolveAllReferencesOnce.test.ts +64 -0
- package/src/variables/__tests__/resolveReferencesOnce.test.ts +117 -0
- package/src/variables/__tests__/variableValue.test.ts +73 -0
- package/src/variables/resolveAllReferences.ts +46 -0
- package/src/variables/resolveAllReferencesOnce.ts +44 -0
- package/src/variables/resolveReferencesOnce.ts +29 -0
- package/bin/catladder-gitlab-dev.js +0 -3
- package/bin/catladder-gitlab.js +0 -3
- package/dist/bundles/catladder-gitlab/index.js +0 -34559
- package/dist/context/__tests__/resolveReferences.test.js +0 -336
- package/dist/context/resolveReferences.d.ts +0 -4
- package/dist/context/resolveReferences.js +0 -254
- package/dist/deploy/cloudRun/createJobs/variables.d.ts +0 -5
- package/dist/deploy/cloudRun/createJobs/variables.js +0 -19
- package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +0 -84
- package/dist/deploy/kubernetes/processSecretsAsFiles.js +0 -31
- package/dist/pipeline/commitInfo/getBuildId.d.ts +0 -6
- package/dist/pipeline/commitInfo/getCommitInfo.d.ts +0 -2
- package/dist/pipeline/createChildPipeline.d.ts +0 -3
- package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +0 -1839
- package/examples/__snapshots__/cloud-run-meteor-with-worker.ts.snap +0 -1807
- package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +0 -1839
- package/examples/__snapshots__/cloud-run-non-public.ts.snap +0 -1839
- package/examples/__snapshots__/cloud-run-post-stop-job.ts.snap +0 -1849
- package/examples/__snapshots__/cloud-run-service-gen2.ts.snap +0 -1839
- package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +0 -3647
- package/examples/__snapshots__/cloud-run-with-sql.ts.snap +0 -3658
- package/examples/__snapshots__/cloud-run-with-worker.ts.snap +0 -1847
- package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +0 -1663
- package/examples/__snapshots__/custom-build-job.ts.snap +0 -1375
- package/examples/__snapshots__/custom-deploy.ts.snap +0 -1625
- package/examples/__snapshots__/custom-envs.ts.snap +0 -1127
- package/examples/__snapshots__/custom-sbom-java.ts.snap +0 -1383
- package/examples/__snapshots__/kubernetes-application-customization.ts.snap +0 -2573
- package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +0 -2533
- package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +0 -2545
- package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +0 -4660
- package/examples/__snapshots__/kubernetes-with-mongodb.ts.snap +0 -2737
- package/examples/__snapshots__/meteor-kubernetes.ts.snap +0 -2658
- package/examples/__snapshots__/native-app.ts.snap +0 -3007
- package/examples/__snapshots__/node-build-with-custom-image.ts.snap +0 -1839
- package/examples/__snapshots__/node-build-with-docker-additions.ts.snap +0 -1839
- package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +0 -4291
- package/examples/__snapshots__/wait-for-other-deploy.ts.snap +0 -2049
- package/examples/kubernetes-with-cloud-sql-legacy.ts +0 -33
- package/scripts/bundle +0 -2
- package/src/context/__tests__/resolveReferences.test.ts +0 -143
- package/src/context/resolveReferences.ts +0 -70
- package/src/deploy/cloudRun/createJobs/variables.ts +0 -21
- package/src/deploy/kubernetes/processSecretsAsFiles.ts +0 -34
- package/src/pipeline/commitInfo/getBuildId.ts +0 -17
- package/src/pipeline/commitInfo/getCommitInfo.ts +0 -15
- package/src/pipeline/createChildPipeline.ts +0 -46
- /package/dist/{context/__tests__/resolveReferences.test.d.ts โ config/__tests__/getAllEnvs.test.d.ts} +0 -0
|
@@ -0,0 +1,1790 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`matches snapshot for meteor-kubernetes local pipeline YAML 1`] = `
|
|
4
|
+
"image: path/to/docker/jobs-default:the-version
|
|
5
|
+
stages:
|
|
6
|
+
- setup
|
|
7
|
+
- setup dev
|
|
8
|
+
- setup review
|
|
9
|
+
- setup stage
|
|
10
|
+
- setup prod
|
|
11
|
+
- test
|
|
12
|
+
- test dev
|
|
13
|
+
- test review
|
|
14
|
+
- test stage
|
|
15
|
+
- test prod
|
|
16
|
+
- build
|
|
17
|
+
- build dev
|
|
18
|
+
- build review
|
|
19
|
+
- build stage
|
|
20
|
+
- build prod
|
|
21
|
+
- deploy
|
|
22
|
+
- deploy dev
|
|
23
|
+
- deploy review
|
|
24
|
+
- deploy stage
|
|
25
|
+
- deploy prod
|
|
26
|
+
- verify
|
|
27
|
+
- verify dev
|
|
28
|
+
- verify review
|
|
29
|
+
- verify stage
|
|
30
|
+
- verify prod
|
|
31
|
+
- rollback
|
|
32
|
+
- rollback dev
|
|
33
|
+
- rollback review
|
|
34
|
+
- rollback stage
|
|
35
|
+
- rollback prod
|
|
36
|
+
- stop
|
|
37
|
+
- stop dev
|
|
38
|
+
- stop review
|
|
39
|
+
- stop stage
|
|
40
|
+
- stop prod
|
|
41
|
+
- release
|
|
42
|
+
variables:
|
|
43
|
+
FF_USE_FASTZIP: 'true'
|
|
44
|
+
ARTIFACT_COMPRESSION_LEVEL: fast
|
|
45
|
+
CACHE_COMPRESSION_LEVEL: fast
|
|
46
|
+
TRANSFER_METER_FREQUENCY: 5s
|
|
47
|
+
GIT_DEPTH: '1'
|
|
48
|
+
before_script:
|
|
49
|
+
- |-
|
|
50
|
+
function escapeForDotEnv () {
|
|
51
|
+
input="\${1:-$(cat)}"
|
|
52
|
+
input="\${input//$'\\n'/\\\\n}"
|
|
53
|
+
if [[ "$input" == *\\\\n* ]]; then
|
|
54
|
+
if [[ "$input" == *\\"* && "$input" == *\\'* && "$input" == *\\\`* ]]; then
|
|
55
|
+
printf "\\"%s\\"\\n" "$input"
|
|
56
|
+
elif [[ "$input" == *\\"* && "$input" == *\\'* ]]; then
|
|
57
|
+
printf "\`%s\`\\n" "$input"
|
|
58
|
+
elif [[ "$input" == *\\"* ]]; then
|
|
59
|
+
printf "'%s'\\n" "$input"
|
|
60
|
+
else
|
|
61
|
+
printf "\\"%s\\"\\n" "$input"
|
|
62
|
+
fi
|
|
63
|
+
else
|
|
64
|
+
printf "%s\\n" "$input"
|
|
65
|
+
fi
|
|
66
|
+
}
|
|
67
|
+
- |-
|
|
68
|
+
function collapseable_section_start () {
|
|
69
|
+
local section_title="\${1}"
|
|
70
|
+
local section_description="\${2:-$section_title}"
|
|
71
|
+
echo -e "section_start:\`date +%s\`:\${section_title}[collapsed=true]\\r\\e[0K\${section_description}"
|
|
72
|
+
}
|
|
73
|
+
- |-
|
|
74
|
+
function collapseable_section_end () {
|
|
75
|
+
local section_title="\${1}"
|
|
76
|
+
echo -e "section_end:\`date +%s\`:\${section_title}\\r\\e[0K"
|
|
77
|
+
}
|
|
78
|
+
web ๐ก audit:
|
|
79
|
+
stage: test
|
|
80
|
+
image: path/to/docker/jobs-default:the-version
|
|
81
|
+
variables:
|
|
82
|
+
KUBERNETES_CPU_REQUEST: '0.45'
|
|
83
|
+
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
84
|
+
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
85
|
+
script:
|
|
86
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
87
|
+
- export APP_PATH="app"
|
|
88
|
+
- collapseable_section_end "injectvars"
|
|
89
|
+
- cd app
|
|
90
|
+
- yarn npm audit --environment production
|
|
91
|
+
rules:
|
|
92
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_COMMIT_MESSAGE !~ /^chore\\(release\\).*/
|
|
93
|
+
- if: $CI_MERGE_REQUEST_ID
|
|
94
|
+
needs: []
|
|
95
|
+
retry: &a1
|
|
96
|
+
max: 2
|
|
97
|
+
when:
|
|
98
|
+
- runner_system_failure
|
|
99
|
+
- stuck_or_timeout_failure
|
|
100
|
+
interruptible: true
|
|
101
|
+
allow_failure: true
|
|
102
|
+
web ๐ฎ lint:
|
|
103
|
+
stage: test
|
|
104
|
+
image: path/to/docker/jobs-default:the-version
|
|
105
|
+
variables:
|
|
106
|
+
KUBERNETES_CPU_REQUEST: '0.45'
|
|
107
|
+
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
108
|
+
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
109
|
+
script:
|
|
110
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
111
|
+
- export APP_PATH="app"
|
|
112
|
+
- collapseable_section_end "injectvars"
|
|
113
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
114
|
+
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
115
|
+
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
116
|
+
- collapseable_section_end "nodeinstall"
|
|
117
|
+
- cd app
|
|
118
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
119
|
+
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
120
|
+
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
121
|
+
- collapseable_section_end "nodeinstall"
|
|
122
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
123
|
+
- yarn install --immutable
|
|
124
|
+
- collapseable_section_end "yarninstall"
|
|
125
|
+
- yarn lint
|
|
126
|
+
cache:
|
|
127
|
+
- key: app-yarn
|
|
128
|
+
policy: pull-push
|
|
129
|
+
paths:
|
|
130
|
+
- app/.yarn
|
|
131
|
+
- key: app-node-modules
|
|
132
|
+
policy: pull-push
|
|
133
|
+
paths:
|
|
134
|
+
- app/node_modules
|
|
135
|
+
rules:
|
|
136
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_COMMIT_MESSAGE !~ /^chore\\(release\\).*/
|
|
137
|
+
- if: $CI_MERGE_REQUEST_ID
|
|
138
|
+
needs: []
|
|
139
|
+
retry: *a1
|
|
140
|
+
interruptible: true
|
|
141
|
+
web ๐งช test:
|
|
142
|
+
stage: test
|
|
143
|
+
image: path/to/docker/jobs-testing-chrome:the-version
|
|
144
|
+
variables:
|
|
145
|
+
KUBERNETES_CPU_REQUEST: '0.45'
|
|
146
|
+
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
147
|
+
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
148
|
+
script:
|
|
149
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
150
|
+
- export APP_PATH="app"
|
|
151
|
+
- collapseable_section_end "injectvars"
|
|
152
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
153
|
+
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
154
|
+
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
155
|
+
- collapseable_section_end "nodeinstall"
|
|
156
|
+
- cd app
|
|
157
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
158
|
+
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
159
|
+
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
160
|
+
- collapseable_section_end "nodeinstall"
|
|
161
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
162
|
+
- yarn install --immutable
|
|
163
|
+
- collapseable_section_end "yarninstall"
|
|
164
|
+
- yarn test
|
|
165
|
+
cache:
|
|
166
|
+
- key: app-yarn
|
|
167
|
+
policy: pull-push
|
|
168
|
+
paths:
|
|
169
|
+
- app/.yarn
|
|
170
|
+
- key: app-node-modules
|
|
171
|
+
policy: pull-push
|
|
172
|
+
paths:
|
|
173
|
+
- app/node_modules
|
|
174
|
+
rules:
|
|
175
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_COMMIT_MESSAGE !~ /^chore\\(release\\).*/
|
|
176
|
+
- if: $CI_MERGE_REQUEST_ID
|
|
177
|
+
needs: []
|
|
178
|
+
retry: *a1
|
|
179
|
+
interruptible: true
|
|
180
|
+
'web ๐จ app | dev ':
|
|
181
|
+
stage: build
|
|
182
|
+
image: path/to/docker/jobs-meteor:the-version
|
|
183
|
+
variables:
|
|
184
|
+
KUBERNETES_CPU_REQUEST: '0.45'
|
|
185
|
+
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
186
|
+
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
187
|
+
script:
|
|
188
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
189
|
+
- export METEOR_DISABLE_OPTIMISTIC_CACHING="1"
|
|
190
|
+
- export ENV_SHORT="dev"
|
|
191
|
+
- export APP_DIR="app"
|
|
192
|
+
- export ENV_TYPE="dev"
|
|
193
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
194
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
195
|
+
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
196
|
+
- export HOSTNAME="web.dev.my-app.pan.panter.cloud"
|
|
197
|
+
- export ROOT_URL="https://web.dev.my-app.pan.panter.cloud"
|
|
198
|
+
- export HOSTNAME_INTERNAL="web.dev.my-app.pan.panter.cloud"
|
|
199
|
+
- export ROOT_URL_INTERNAL="https://web.dev.my-app.pan.panter.cloud"
|
|
200
|
+
- export KUBE_NAMESPACE="pan-my-app-dev"
|
|
201
|
+
- export KUBE_APP_NAME="web"
|
|
202
|
+
- export KUBE_APP_NAME_PREFIX=""
|
|
203
|
+
- export MONGODB_ROOT_PASSWORD="$CL_dev_web_MONGODB_ROOT_PASSWORD"
|
|
204
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"
|
|
205
|
+
- collapseable_section_end "injectvars"
|
|
206
|
+
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app/__build_info.json
|
|
207
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
208
|
+
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
209
|
+
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
210
|
+
- collapseable_section_end "nodeinstall"
|
|
211
|
+
- cd app
|
|
212
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
213
|
+
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
214
|
+
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
215
|
+
- collapseable_section_end "nodeinstall"
|
|
216
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
217
|
+
- yarn install --immutable
|
|
218
|
+
- collapseable_section_end "yarninstall"
|
|
219
|
+
- echo "add healthcheck package"
|
|
220
|
+
- meteor add panter:healthroute --allow-superuser
|
|
221
|
+
- meteor add qualia:prod-shell --allow-superuser
|
|
222
|
+
- TOOL_NODE_FLAGS="--max_old_space_size=3584 --min_semi_space_size=8 --max_semi_space_size=256 --optimize_for_size" meteor build ./dist --architecture os.linux.x86_64 --allow-superuser --server-only --directory
|
|
223
|
+
- cp ./__build_info.json ./dist/bundle/programs/server
|
|
224
|
+
cache:
|
|
225
|
+
- key: app-yarn
|
|
226
|
+
policy: pull-push
|
|
227
|
+
paths:
|
|
228
|
+
- app/.yarn
|
|
229
|
+
- key: app-node-modules
|
|
230
|
+
policy: pull-push
|
|
231
|
+
paths:
|
|
232
|
+
- app/node_modules
|
|
233
|
+
- key: web-meteor-build-cache
|
|
234
|
+
policy: pull-push
|
|
235
|
+
paths:
|
|
236
|
+
- app/.meteor/local/resolver-result-cache.json
|
|
237
|
+
- app/.meteor/local/plugin-cache
|
|
238
|
+
- app/.meteor/local/isopacks
|
|
239
|
+
- app/.meteor/local/bundler-cache/scanner
|
|
240
|
+
artifacts:
|
|
241
|
+
paths:
|
|
242
|
+
- app/__build_info.json
|
|
243
|
+
- app/dist
|
|
244
|
+
expire_in: 1 day
|
|
245
|
+
when: always
|
|
246
|
+
reports: {}
|
|
247
|
+
rules:
|
|
248
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_COMMIT_MESSAGE !~ /^chore\\(release\\).*/
|
|
249
|
+
needs: []
|
|
250
|
+
retry: *a1
|
|
251
|
+
interruptible: true
|
|
252
|
+
'web ๐จ docker | dev ':
|
|
253
|
+
stage: build
|
|
254
|
+
image: path/to/docker/docker-build:the-version
|
|
255
|
+
services:
|
|
256
|
+
- name: docker:24.0.6-dind
|
|
257
|
+
command:
|
|
258
|
+
- --tls=false
|
|
259
|
+
- --registry-mirror=https://mirror.gcr.io
|
|
260
|
+
variables:
|
|
261
|
+
DOCKER_HOST: tcp://docker:2375
|
|
262
|
+
DOCKER_TLS_CERTDIR: ''
|
|
263
|
+
DOCKER_DRIVER: overlay2
|
|
264
|
+
DOCKER_BUILDKIT: '1'
|
|
265
|
+
KUBERNETES_CPU_REQUEST: '0.45'
|
|
266
|
+
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
267
|
+
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
268
|
+
script:
|
|
269
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
270
|
+
- export APP_DIR="app"
|
|
271
|
+
- export DOCKER_BUILD_CONTEXT="."
|
|
272
|
+
- export DOCKER_REGISTRY="$CI_REGISTRY"
|
|
273
|
+
- export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/web"
|
|
274
|
+
- export DOCKER_IMAGE_NAME="dev/web"
|
|
275
|
+
- export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
|
|
276
|
+
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
277
|
+
- export METEOR_INSTALL_SCRIPTS=""
|
|
278
|
+
- collapseable_section_end "injectvars"
|
|
279
|
+
- ensureMeteorDockerfile
|
|
280
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
281
|
+
- docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
|
|
282
|
+
- collapseable_section_end "docker-login"
|
|
283
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
284
|
+
- docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
|
|
285
|
+
- collapseable_section_end "docker-build"
|
|
286
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
287
|
+
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
288
|
+
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
289
|
+
- docker push $DOCKER_CACHE_IMAGE
|
|
290
|
+
- collapseable_section_end "docker-push"
|
|
291
|
+
rules:
|
|
292
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_COMMIT_MESSAGE !~ /^chore\\(release\\).*/
|
|
293
|
+
needs:
|
|
294
|
+
- 'web ๐จ app | dev '
|
|
295
|
+
retry: *a1
|
|
296
|
+
interruptible: true
|
|
297
|
+
'web ๐งพ sbom | dev ':
|
|
298
|
+
stage: build
|
|
299
|
+
image:
|
|
300
|
+
name: aquasec/trivy:0.58.2
|
|
301
|
+
entrypoint:
|
|
302
|
+
- ''
|
|
303
|
+
variables: {}
|
|
304
|
+
script:
|
|
305
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
306
|
+
- collapseable_section_end "injectvars"
|
|
307
|
+
- trivy fs --quiet --format cyclonedx --output "__sbom.json" app
|
|
308
|
+
artifacts:
|
|
309
|
+
paths:
|
|
310
|
+
- __sbom.json
|
|
311
|
+
rules:
|
|
312
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_COMMIT_MESSAGE !~ /^chore\\(release\\).*/
|
|
313
|
+
needs: []
|
|
314
|
+
retry: *a1
|
|
315
|
+
interruptible: true
|
|
316
|
+
allow_failure: true
|
|
317
|
+
'web ๐ Deploy | dev ':
|
|
318
|
+
stage: deploy dev
|
|
319
|
+
image: path/to/docker/kubernetes:the-version
|
|
320
|
+
variables:
|
|
321
|
+
KUBERNETES_CPU_REQUEST: '0.22'
|
|
322
|
+
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
323
|
+
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
324
|
+
script:
|
|
325
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
326
|
+
- export ENV_SHORT="dev"
|
|
327
|
+
- export APP_DIR="app"
|
|
328
|
+
- export ENV_TYPE="dev"
|
|
329
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
330
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
331
|
+
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
332
|
+
- export HOSTNAME="web.dev.my-app.pan.panter.cloud"
|
|
333
|
+
- export ROOT_URL="https://web.dev.my-app.pan.panter.cloud"
|
|
334
|
+
- export HOSTNAME_INTERNAL="web.dev.my-app.pan.panter.cloud"
|
|
335
|
+
- export ROOT_URL_INTERNAL="https://web.dev.my-app.pan.panter.cloud"
|
|
336
|
+
- export KUBE_NAMESPACE="pan-my-app-dev"
|
|
337
|
+
- export KUBE_APP_NAME="web"
|
|
338
|
+
- export KUBE_APP_NAME_PREFIX=""
|
|
339
|
+
- export MONGODB_ROOT_PASSWORD="$CL_dev_web_MONGODB_ROOT_PASSWORD"
|
|
340
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"
|
|
341
|
+
- export DOCKER_REGISTRY="$CI_REGISTRY"
|
|
342
|
+
- export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/web"
|
|
343
|
+
- export DOCKER_IMAGE_NAME="dev/web"
|
|
344
|
+
- export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
|
|
345
|
+
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
346
|
+
- export RELEASE_NAME="pan-my-app-dev-web"
|
|
347
|
+
- export HELM_EXPERIMENTAL_OCI="1"
|
|
348
|
+
- export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"
|
|
349
|
+
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
350
|
+
- export HELM_ARGS=""
|
|
351
|
+
- export COMPONENT_NAME="web"
|
|
352
|
+
- collapseable_section_end "injectvars"
|
|
353
|
+
- kubectl config set-cluster "kube-pan-my-app-dev-web" --server="$CL_dev_web_KUBE_URL" --certificate-authority <(echo $CL_dev_web_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
354
|
+
- kubectl config set-credentials "kube-pan-my-app-dev-web" --token="$CL_dev_web_KUBE_TOKEN"
|
|
355
|
+
- kubectl config set-context "kube-pan-my-app-dev-web" --cluster="kube-pan-my-app-dev-web" --user="kube-pan-my-app-dev-web" --namespace="pan-my-app-dev"
|
|
356
|
+
- kubectl config use-context "kube-pan-my-app-dev-web"
|
|
357
|
+
- collapseable_section_start "writeallvalues" "Write __all_values.yml for helm deployment"
|
|
358
|
+
- |
|
|
359
|
+
cat > __all_values.yml <<EOF
|
|
360
|
+
env:
|
|
361
|
+
secret:
|
|
362
|
+
MONGODB_ROOT_PASSWORD: |-
|
|
363
|
+
$(printf %s "$CL_dev_web_MONGODB_ROOT_PASSWORD" | sed '1!s/^/ /')
|
|
364
|
+
MONGO_URL: |-
|
|
365
|
+
mongodb://root:$CL_dev_web_MONGODB_ROOT_PASSWORD@web-mongodb.pan-my-app-dev.svc.cluster.local:27017/app?authSource=admin
|
|
366
|
+
public:
|
|
367
|
+
ENV_SHORT: |-
|
|
368
|
+
dev
|
|
369
|
+
APP_DIR: |-
|
|
370
|
+
app
|
|
371
|
+
ENV_TYPE: |-
|
|
372
|
+
dev
|
|
373
|
+
BUILD_INFO_BUILD_ID: |-
|
|
374
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
375
|
+
BUILD_INFO_BUILD_TIME: |-
|
|
376
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
377
|
+
BUILD_INFO_CURRENT_VERSION: |-
|
|
378
|
+
$(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed '1!s/^/ /')
|
|
379
|
+
HOSTNAME: |-
|
|
380
|
+
web.dev.my-app.pan.panter.cloud
|
|
381
|
+
ROOT_URL: |-
|
|
382
|
+
https://web.dev.my-app.pan.panter.cloud
|
|
383
|
+
HOSTNAME_INTERNAL: |-
|
|
384
|
+
web.dev.my-app.pan.panter.cloud
|
|
385
|
+
ROOT_URL_INTERNAL: |-
|
|
386
|
+
https://web.dev.my-app.pan.panter.cloud
|
|
387
|
+
KUBE_NAMESPACE: |-
|
|
388
|
+
pan-my-app-dev
|
|
389
|
+
KUBE_APP_NAME: |-
|
|
390
|
+
web
|
|
391
|
+
KUBE_APP_NAME_PREFIX: ""
|
|
392
|
+
_ALL_ENV_VAR_KEYS: |-
|
|
393
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","MONGODB_ROOT_PASSWORD"]
|
|
394
|
+
application:
|
|
395
|
+
host: |-
|
|
396
|
+
web.dev.my-app.pan.panter.cloud
|
|
397
|
+
command: |-
|
|
398
|
+
node main.js
|
|
399
|
+
livenessProbe:
|
|
400
|
+
httpGet:
|
|
401
|
+
path: |-
|
|
402
|
+
__health
|
|
403
|
+
readinessProbe:
|
|
404
|
+
httpGet:
|
|
405
|
+
path: |-
|
|
406
|
+
__health
|
|
407
|
+
startupProbe:
|
|
408
|
+
httpGet:
|
|
409
|
+
path: |-
|
|
410
|
+
__health
|
|
411
|
+
worker:
|
|
412
|
+
enabled: true
|
|
413
|
+
mongodb:
|
|
414
|
+
enabled: true
|
|
415
|
+
auth:
|
|
416
|
+
enabled: true
|
|
417
|
+
rootPassword: |-
|
|
418
|
+
$CL_dev_web_MONGODB_ROOT_PASSWORD
|
|
419
|
+
replicaSetKey: |-
|
|
420
|
+
$CL_dev_web_MONGODB_REPLICASET_KEY
|
|
421
|
+
persistence:
|
|
422
|
+
storageClass: |-
|
|
423
|
+
standard-rwo
|
|
424
|
+
backup:
|
|
425
|
+
enabled: false
|
|
426
|
+
hostToBackup: |-
|
|
427
|
+
web-mongodb.pan-my-app-dev.svc.cluster.local:27017
|
|
428
|
+
pvcToBackup: |-
|
|
429
|
+
web-mongodb
|
|
430
|
+
image: |-
|
|
431
|
+
mrelite/kubectlmongoshell:v1.0
|
|
432
|
+
schedule: |-
|
|
433
|
+
0 4 * * *
|
|
434
|
+
volumeSnapshotClass: |-
|
|
435
|
+
snapshotclass
|
|
436
|
+
architecture: |-
|
|
437
|
+
standalone
|
|
438
|
+
|
|
439
|
+
EOF
|
|
440
|
+
- collapseable_section_end "writeallvalues"
|
|
441
|
+
- kubernetesCreateSecret
|
|
442
|
+
- kubernetesDeploy
|
|
443
|
+
- echo 'Uploading SBOM to Dependency Track'
|
|
444
|
+
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-my-app/web" "$ROOT_URL" "__sbom.json" vex.json || true
|
|
445
|
+
- echo deployment successful ๐ป
|
|
446
|
+
- echo "CL_GITLAB_ENVIRONMENT_URL=$ROOT_URL" >> gitlab_environment.env
|
|
447
|
+
environment:
|
|
448
|
+
name: dev/web
|
|
449
|
+
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
450
|
+
on_stop: 'web ๐ Stop โ ๏ธ | dev '
|
|
451
|
+
auto_stop_in: 4 weeks
|
|
452
|
+
artifacts:
|
|
453
|
+
reports:
|
|
454
|
+
dotenv: gitlab_environment.env
|
|
455
|
+
rules:
|
|
456
|
+
- when: on_success
|
|
457
|
+
if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_COMMIT_MESSAGE !~ /^chore\\(release\\).*/
|
|
458
|
+
needs:
|
|
459
|
+
- job: web ๐ฎ lint
|
|
460
|
+
artifacts: false
|
|
461
|
+
- job: 'web ๐จ app | dev '
|
|
462
|
+
artifacts: false
|
|
463
|
+
- job: 'web ๐จ docker | dev '
|
|
464
|
+
artifacts: false
|
|
465
|
+
- job: web ๐งช test
|
|
466
|
+
artifacts: false
|
|
467
|
+
- job: 'web ๐งพ sbom | dev '
|
|
468
|
+
artifacts: true
|
|
469
|
+
- job: web ๐ก audit
|
|
470
|
+
artifacts: false
|
|
471
|
+
retry: *a1
|
|
472
|
+
interruptible: true
|
|
473
|
+
allow_failure: false
|
|
474
|
+
'web ๐ Stop โ ๏ธ | dev ':
|
|
475
|
+
stage: stop dev
|
|
476
|
+
image: path/to/docker/kubernetes:the-version
|
|
477
|
+
variables:
|
|
478
|
+
KUBERNETES_CPU_REQUEST: '0.22'
|
|
479
|
+
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
480
|
+
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
481
|
+
GIT_STRATEGY: none
|
|
482
|
+
script:
|
|
483
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
484
|
+
- export ENV_SHORT="dev"
|
|
485
|
+
- export APP_DIR="app"
|
|
486
|
+
- export ENV_TYPE="dev"
|
|
487
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
488
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
489
|
+
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
490
|
+
- export HOSTNAME="web.dev.my-app.pan.panter.cloud"
|
|
491
|
+
- export ROOT_URL="https://web.dev.my-app.pan.panter.cloud"
|
|
492
|
+
- export HOSTNAME_INTERNAL="web.dev.my-app.pan.panter.cloud"
|
|
493
|
+
- export ROOT_URL_INTERNAL="https://web.dev.my-app.pan.panter.cloud"
|
|
494
|
+
- export KUBE_NAMESPACE="pan-my-app-dev"
|
|
495
|
+
- export KUBE_APP_NAME="web"
|
|
496
|
+
- export KUBE_APP_NAME_PREFIX=""
|
|
497
|
+
- export MONGODB_ROOT_PASSWORD="$CL_dev_web_MONGODB_ROOT_PASSWORD"
|
|
498
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"
|
|
499
|
+
- export RELEASE_NAME="pan-my-app-dev-web"
|
|
500
|
+
- export HELM_EXPERIMENTAL_OCI="1"
|
|
501
|
+
- export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"
|
|
502
|
+
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
503
|
+
- export HELM_ARGS=""
|
|
504
|
+
- export COMPONENT_NAME="web"
|
|
505
|
+
- collapseable_section_end "injectvars"
|
|
506
|
+
- kubectl config set-cluster "kube-pan-my-app-dev-web" --server="$CL_dev_web_KUBE_URL" --certificate-authority <(echo $CL_dev_web_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
507
|
+
- kubectl config set-credentials "kube-pan-my-app-dev-web" --token="$CL_dev_web_KUBE_TOKEN"
|
|
508
|
+
- kubectl config set-context "kube-pan-my-app-dev-web" --cluster="kube-pan-my-app-dev-web" --user="kube-pan-my-app-dev-web" --namespace="pan-my-app-dev"
|
|
509
|
+
- kubectl config use-context "kube-pan-my-app-dev-web"
|
|
510
|
+
- kubernetesDelete
|
|
511
|
+
- echo 'Disabling component in Dependency Track'
|
|
512
|
+
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-my-app/web" "$CI_ENVIRONMENT_URL" || true
|
|
513
|
+
environment:
|
|
514
|
+
name: dev/web
|
|
515
|
+
action: stop
|
|
516
|
+
rules:
|
|
517
|
+
- if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
|
|
518
|
+
when: on_success
|
|
519
|
+
- when: manual
|
|
520
|
+
if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_COMMIT_MESSAGE !~ /^chore\\(release\\).*/
|
|
521
|
+
needs: []
|
|
522
|
+
retry: *a1
|
|
523
|
+
interruptible: true
|
|
524
|
+
allow_failure: true
|
|
525
|
+
'web โฉ๏ธ Rollback โ ๏ธ | dev ':
|
|
526
|
+
stage: rollback dev
|
|
527
|
+
image: path/to/docker/kubernetes:the-version
|
|
528
|
+
variables:
|
|
529
|
+
KUBERNETES_CPU_REQUEST: '0.22'
|
|
530
|
+
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
531
|
+
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
532
|
+
GIT_STRATEGY: none
|
|
533
|
+
script:
|
|
534
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
535
|
+
- export ENV_SHORT="dev"
|
|
536
|
+
- export APP_DIR="app"
|
|
537
|
+
- export ENV_TYPE="dev"
|
|
538
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
539
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
540
|
+
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
541
|
+
- export HOSTNAME="web.dev.my-app.pan.panter.cloud"
|
|
542
|
+
- export ROOT_URL="https://web.dev.my-app.pan.panter.cloud"
|
|
543
|
+
- export HOSTNAME_INTERNAL="web.dev.my-app.pan.panter.cloud"
|
|
544
|
+
- export ROOT_URL_INTERNAL="https://web.dev.my-app.pan.panter.cloud"
|
|
545
|
+
- export KUBE_NAMESPACE="pan-my-app-dev"
|
|
546
|
+
- export KUBE_APP_NAME="web"
|
|
547
|
+
- export KUBE_APP_NAME_PREFIX=""
|
|
548
|
+
- export MONGODB_ROOT_PASSWORD="$CL_dev_web_MONGODB_ROOT_PASSWORD"
|
|
549
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"
|
|
550
|
+
- export RELEASE_NAME="pan-my-app-dev-web"
|
|
551
|
+
- export HELM_EXPERIMENTAL_OCI="1"
|
|
552
|
+
- export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"
|
|
553
|
+
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
554
|
+
- export HELM_ARGS=""
|
|
555
|
+
- export COMPONENT_NAME="web"
|
|
556
|
+
- collapseable_section_end "injectvars"
|
|
557
|
+
- kubectl config set-cluster "kube-pan-my-app-dev-web" --server="$CL_dev_web_KUBE_URL" --certificate-authority <(echo $CL_dev_web_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
558
|
+
- kubectl config set-credentials "kube-pan-my-app-dev-web" --token="$CL_dev_web_KUBE_TOKEN"
|
|
559
|
+
- kubectl config set-context "kube-pan-my-app-dev-web" --cluster="kube-pan-my-app-dev-web" --user="kube-pan-my-app-dev-web" --namespace="pan-my-app-dev"
|
|
560
|
+
- kubectl config use-context "kube-pan-my-app-dev-web"
|
|
561
|
+
- kubernetesRollback
|
|
562
|
+
environment:
|
|
563
|
+
name: dev/web
|
|
564
|
+
action: access
|
|
565
|
+
rules:
|
|
566
|
+
- when: manual
|
|
567
|
+
if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_COMMIT_MESSAGE !~ /^chore\\(release\\).*/
|
|
568
|
+
needs: []
|
|
569
|
+
retry: *a1
|
|
570
|
+
interruptible: true
|
|
571
|
+
allow_failure: true
|
|
572
|
+
'web ๐จ app | review ':
|
|
573
|
+
stage: build
|
|
574
|
+
image: path/to/docker/jobs-meteor:the-version
|
|
575
|
+
variables:
|
|
576
|
+
KUBERNETES_CPU_REQUEST: '0.45'
|
|
577
|
+
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
578
|
+
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
579
|
+
script:
|
|
580
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
581
|
+
- export METEOR_DISABLE_OPTIMISTIC_CACHING="1"
|
|
582
|
+
- export ENV_SHORT="review"
|
|
583
|
+
- export APP_DIR="app"
|
|
584
|
+
- export ENV_TYPE="review"
|
|
585
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
586
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
587
|
+
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
588
|
+
- export HOSTNAME="web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"
|
|
589
|
+
- export ROOT_URL="https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"
|
|
590
|
+
- export HOSTNAME_INTERNAL="web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"
|
|
591
|
+
- export ROOT_URL_INTERNAL="https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"
|
|
592
|
+
- export KUBE_NAMESPACE="pan-my-app-review"
|
|
593
|
+
- export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web"
|
|
594
|
+
- 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"; })-"
|
|
595
|
+
- export MONGODB_ROOT_PASSWORD="$CL_review_web_MONGODB_ROOT_PASSWORD"
|
|
596
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"
|
|
597
|
+
- collapseable_section_end "injectvars"
|
|
598
|
+
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app/__build_info.json
|
|
599
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
600
|
+
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
601
|
+
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
602
|
+
- collapseable_section_end "nodeinstall"
|
|
603
|
+
- cd app
|
|
604
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
605
|
+
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
606
|
+
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
607
|
+
- collapseable_section_end "nodeinstall"
|
|
608
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
609
|
+
- yarn install --immutable
|
|
610
|
+
- collapseable_section_end "yarninstall"
|
|
611
|
+
- echo "add healthcheck package"
|
|
612
|
+
- meteor add panter:healthroute --allow-superuser
|
|
613
|
+
- meteor add qualia:prod-shell --allow-superuser
|
|
614
|
+
- TOOL_NODE_FLAGS="--max_old_space_size=3584 --min_semi_space_size=8 --max_semi_space_size=256 --optimize_for_size" meteor build ./dist --architecture os.linux.x86_64 --allow-superuser --server-only --directory
|
|
615
|
+
- cp ./__build_info.json ./dist/bundle/programs/server
|
|
616
|
+
cache:
|
|
617
|
+
- key: app-yarn
|
|
618
|
+
policy: pull-push
|
|
619
|
+
paths:
|
|
620
|
+
- app/.yarn
|
|
621
|
+
- key: app-node-modules
|
|
622
|
+
policy: pull-push
|
|
623
|
+
paths:
|
|
624
|
+
- app/node_modules
|
|
625
|
+
- key: web-meteor-build-cache
|
|
626
|
+
policy: pull-push
|
|
627
|
+
paths:
|
|
628
|
+
- app/.meteor/local/resolver-result-cache.json
|
|
629
|
+
- app/.meteor/local/plugin-cache
|
|
630
|
+
- app/.meteor/local/isopacks
|
|
631
|
+
- app/.meteor/local/bundler-cache/scanner
|
|
632
|
+
artifacts:
|
|
633
|
+
paths:
|
|
634
|
+
- app/__build_info.json
|
|
635
|
+
- app/dist
|
|
636
|
+
expire_in: 1 day
|
|
637
|
+
when: always
|
|
638
|
+
reports: {}
|
|
639
|
+
rules:
|
|
640
|
+
- if: $CI_MERGE_REQUEST_ID
|
|
641
|
+
needs: []
|
|
642
|
+
retry: *a1
|
|
643
|
+
interruptible: true
|
|
644
|
+
'web ๐จ docker | review ':
|
|
645
|
+
stage: build
|
|
646
|
+
image: path/to/docker/docker-build:the-version
|
|
647
|
+
services:
|
|
648
|
+
- name: docker:24.0.6-dind
|
|
649
|
+
command:
|
|
650
|
+
- --tls=false
|
|
651
|
+
- --registry-mirror=https://mirror.gcr.io
|
|
652
|
+
variables:
|
|
653
|
+
DOCKER_HOST: tcp://docker:2375
|
|
654
|
+
DOCKER_TLS_CERTDIR: ''
|
|
655
|
+
DOCKER_DRIVER: overlay2
|
|
656
|
+
DOCKER_BUILDKIT: '1'
|
|
657
|
+
KUBERNETES_CPU_REQUEST: '0.45'
|
|
658
|
+
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
659
|
+
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
660
|
+
script:
|
|
661
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
662
|
+
- export APP_DIR="app"
|
|
663
|
+
- export DOCKER_BUILD_CONTEXT="."
|
|
664
|
+
- export DOCKER_REGISTRY="$CI_REGISTRY"
|
|
665
|
+
- export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/web"
|
|
666
|
+
- export DOCKER_IMAGE_NAME="review/web"
|
|
667
|
+
- export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
|
|
668
|
+
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
669
|
+
- export METEOR_INSTALL_SCRIPTS=""
|
|
670
|
+
- collapseable_section_end "injectvars"
|
|
671
|
+
- ensureMeteorDockerfile
|
|
672
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
673
|
+
- docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
|
|
674
|
+
- collapseable_section_end "docker-login"
|
|
675
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
676
|
+
- docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
|
|
677
|
+
- collapseable_section_end "docker-build"
|
|
678
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
679
|
+
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
680
|
+
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
681
|
+
- docker push $DOCKER_CACHE_IMAGE
|
|
682
|
+
- collapseable_section_end "docker-push"
|
|
683
|
+
rules:
|
|
684
|
+
- if: $CI_MERGE_REQUEST_ID
|
|
685
|
+
needs:
|
|
686
|
+
- 'web ๐จ app | review '
|
|
687
|
+
retry: *a1
|
|
688
|
+
interruptible: true
|
|
689
|
+
'web ๐งพ sbom | review ':
|
|
690
|
+
stage: build
|
|
691
|
+
image:
|
|
692
|
+
name: aquasec/trivy:0.58.2
|
|
693
|
+
entrypoint:
|
|
694
|
+
- ''
|
|
695
|
+
variables: {}
|
|
696
|
+
script:
|
|
697
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
698
|
+
- collapseable_section_end "injectvars"
|
|
699
|
+
- trivy fs --quiet --format cyclonedx --output "__sbom.json" app
|
|
700
|
+
artifacts:
|
|
701
|
+
paths:
|
|
702
|
+
- __sbom.json
|
|
703
|
+
rules:
|
|
704
|
+
- if: $CI_MERGE_REQUEST_ID
|
|
705
|
+
needs: []
|
|
706
|
+
retry: *a1
|
|
707
|
+
interruptible: true
|
|
708
|
+
allow_failure: true
|
|
709
|
+
'web ๐ Deploy | review ':
|
|
710
|
+
stage: deploy review
|
|
711
|
+
image: path/to/docker/kubernetes:the-version
|
|
712
|
+
variables:
|
|
713
|
+
KUBERNETES_CPU_REQUEST: '0.22'
|
|
714
|
+
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
715
|
+
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
716
|
+
script:
|
|
717
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
718
|
+
- export ENV_SHORT="review"
|
|
719
|
+
- export APP_DIR="app"
|
|
720
|
+
- export ENV_TYPE="review"
|
|
721
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
722
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
723
|
+
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
724
|
+
- export HOSTNAME="web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"
|
|
725
|
+
- export ROOT_URL="https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"
|
|
726
|
+
- export HOSTNAME_INTERNAL="web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"
|
|
727
|
+
- export ROOT_URL_INTERNAL="https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"
|
|
728
|
+
- export KUBE_NAMESPACE="pan-my-app-review"
|
|
729
|
+
- export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web"
|
|
730
|
+
- 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"; })-"
|
|
731
|
+
- export MONGODB_ROOT_PASSWORD="$CL_review_web_MONGODB_ROOT_PASSWORD"
|
|
732
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"
|
|
733
|
+
- export DOCKER_REGISTRY="$CI_REGISTRY"
|
|
734
|
+
- export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/web"
|
|
735
|
+
- export DOCKER_IMAGE_NAME="review/web"
|
|
736
|
+
- export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
|
|
737
|
+
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
738
|
+
- export RELEASE_NAME="pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web"
|
|
739
|
+
- export HELM_EXPERIMENTAL_OCI="1"
|
|
740
|
+
- export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"
|
|
741
|
+
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
742
|
+
- export HELM_ARGS=""
|
|
743
|
+
- export COMPONENT_NAME="web"
|
|
744
|
+
- collapseable_section_end "injectvars"
|
|
745
|
+
- kubectl config set-cluster "kube-pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web" --server="$CL_review_web_KUBE_URL" --certificate-authority <(echo $CL_review_web_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
746
|
+
- kubectl config set-credentials "kube-pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web" --token="$CL_review_web_KUBE_TOKEN"
|
|
747
|
+
- kubectl config set-context "kube-pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web" --cluster="kube-pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web" --user="kube-pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web" --namespace="pan-my-app-review"
|
|
748
|
+
- kubectl config use-context "kube-pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web"
|
|
749
|
+
- collapseable_section_start "writeallvalues" "Write __all_values.yml for helm deployment"
|
|
750
|
+
- |
|
|
751
|
+
cat > __all_values.yml <<EOF
|
|
752
|
+
env:
|
|
753
|
+
secret:
|
|
754
|
+
MONGODB_ROOT_PASSWORD: |-
|
|
755
|
+
$(printf %s "$CL_review_web_MONGODB_ROOT_PASSWORD" | sed '1!s/^/ /')
|
|
756
|
+
MONGO_URL: |-
|
|
757
|
+
mongodb://root:$CL_review_web_MONGODB_ROOT_PASSWORD@$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web-mongodb.pan-my-app-review.svc.cluster.local:27017/app?authSource=admin
|
|
758
|
+
public:
|
|
759
|
+
ENV_SHORT: |-
|
|
760
|
+
review
|
|
761
|
+
APP_DIR: |-
|
|
762
|
+
app
|
|
763
|
+
ENV_TYPE: |-
|
|
764
|
+
review
|
|
765
|
+
BUILD_INFO_BUILD_ID: |-
|
|
766
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
767
|
+
BUILD_INFO_BUILD_TIME: |-
|
|
768
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
769
|
+
BUILD_INFO_CURRENT_VERSION: |-
|
|
770
|
+
$(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed '1!s/^/ /')
|
|
771
|
+
HOSTNAME: |-
|
|
772
|
+
$(printf %s "web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud" | sed '1!s/^/ /')
|
|
773
|
+
ROOT_URL: |-
|
|
774
|
+
$(printf %s "https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud" | sed '1!s/^/ /')
|
|
775
|
+
HOSTNAME_INTERNAL: |-
|
|
776
|
+
$(printf %s "web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud" | sed '1!s/^/ /')
|
|
777
|
+
ROOT_URL_INTERNAL: |-
|
|
778
|
+
$(printf %s "https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud" | sed '1!s/^/ /')
|
|
779
|
+
KUBE_NAMESPACE: |-
|
|
780
|
+
pan-my-app-review
|
|
781
|
+
KUBE_APP_NAME: |-
|
|
782
|
+
$(printf %s "$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web" | sed '1!s/^/ /')
|
|
783
|
+
KUBE_APP_NAME_PREFIX: |-
|
|
784
|
+
$(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 '1!s/^/ /')
|
|
785
|
+
_ALL_ENV_VAR_KEYS: |-
|
|
786
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","MONGODB_ROOT_PASSWORD"]
|
|
787
|
+
application:
|
|
788
|
+
host: |-
|
|
789
|
+
$(printf %s "web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud" | sed '1!s/^/ /')
|
|
790
|
+
command: |-
|
|
791
|
+
node main.js
|
|
792
|
+
livenessProbe:
|
|
793
|
+
httpGet:
|
|
794
|
+
path: |-
|
|
795
|
+
__health
|
|
796
|
+
readinessProbe:
|
|
797
|
+
httpGet:
|
|
798
|
+
path: |-
|
|
799
|
+
__health
|
|
800
|
+
startupProbe:
|
|
801
|
+
httpGet:
|
|
802
|
+
path: |-
|
|
803
|
+
__health
|
|
804
|
+
worker:
|
|
805
|
+
enabled: true
|
|
806
|
+
mongodb:
|
|
807
|
+
enabled: true
|
|
808
|
+
auth:
|
|
809
|
+
enabled: true
|
|
810
|
+
rootPassword: |-
|
|
811
|
+
$CL_review_web_MONGODB_ROOT_PASSWORD
|
|
812
|
+
replicaSetKey: |-
|
|
813
|
+
$CL_review_web_MONGODB_REPLICASET_KEY
|
|
814
|
+
persistence:
|
|
815
|
+
storageClass: |-
|
|
816
|
+
standard-rwo
|
|
817
|
+
backup:
|
|
818
|
+
enabled: false
|
|
819
|
+
hostToBackup: |-
|
|
820
|
+
$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web-mongodb.pan-my-app-review.svc.cluster.local:27017
|
|
821
|
+
pvcToBackup: |-
|
|
822
|
+
$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web-mongodb
|
|
823
|
+
image: |-
|
|
824
|
+
mrelite/kubectlmongoshell:v1.0
|
|
825
|
+
schedule: |-
|
|
826
|
+
0 4 * * *
|
|
827
|
+
volumeSnapshotClass: |-
|
|
828
|
+
snapshotclass
|
|
829
|
+
architecture: |-
|
|
830
|
+
standalone
|
|
831
|
+
|
|
832
|
+
EOF
|
|
833
|
+
- collapseable_section_end "writeallvalues"
|
|
834
|
+
- kubernetesCreateSecret
|
|
835
|
+
- kubernetesDeploy
|
|
836
|
+
- echo 'Uploading SBOM to Dependency Track'
|
|
837
|
+
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-my-app/web" "$ROOT_URL" "__sbom.json" vex.json || true
|
|
838
|
+
- echo deployment successful ๐ป
|
|
839
|
+
- echo "CL_GITLAB_ENVIRONMENT_URL=$ROOT_URL" >> gitlab_environment.env
|
|
840
|
+
environment:
|
|
841
|
+
name: review/$CI_COMMIT_REF_NAME/web
|
|
842
|
+
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
843
|
+
on_stop: 'web ๐ Stop โ ๏ธ | review '
|
|
844
|
+
auto_stop_in: 1 week
|
|
845
|
+
artifacts:
|
|
846
|
+
reports:
|
|
847
|
+
dotenv: gitlab_environment.env
|
|
848
|
+
rules:
|
|
849
|
+
- when: on_success
|
|
850
|
+
if: $CI_MERGE_REQUEST_ID
|
|
851
|
+
needs:
|
|
852
|
+
- job: web ๐ฎ lint
|
|
853
|
+
artifacts: false
|
|
854
|
+
- job: 'web ๐จ app | review '
|
|
855
|
+
artifacts: false
|
|
856
|
+
- job: 'web ๐จ docker | review '
|
|
857
|
+
artifacts: false
|
|
858
|
+
- job: web ๐งช test
|
|
859
|
+
artifacts: false
|
|
860
|
+
- job: 'web ๐งพ sbom | review '
|
|
861
|
+
artifacts: true
|
|
862
|
+
- job: web ๐ก audit
|
|
863
|
+
artifacts: false
|
|
864
|
+
retry: *a1
|
|
865
|
+
interruptible: true
|
|
866
|
+
allow_failure: false
|
|
867
|
+
'web ๐ Stop โ ๏ธ | review ':
|
|
868
|
+
stage: stop review
|
|
869
|
+
image: path/to/docker/kubernetes:the-version
|
|
870
|
+
variables:
|
|
871
|
+
KUBERNETES_CPU_REQUEST: '0.22'
|
|
872
|
+
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
873
|
+
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
874
|
+
GIT_STRATEGY: none
|
|
875
|
+
script:
|
|
876
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
877
|
+
- export ENV_SHORT="review"
|
|
878
|
+
- export APP_DIR="app"
|
|
879
|
+
- export ENV_TYPE="review"
|
|
880
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
881
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
882
|
+
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
883
|
+
- export HOSTNAME="web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"
|
|
884
|
+
- export ROOT_URL="https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"
|
|
885
|
+
- export HOSTNAME_INTERNAL="web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"
|
|
886
|
+
- export ROOT_URL_INTERNAL="https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"
|
|
887
|
+
- export KUBE_NAMESPACE="pan-my-app-review"
|
|
888
|
+
- export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web"
|
|
889
|
+
- 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"; })-"
|
|
890
|
+
- export MONGODB_ROOT_PASSWORD="$CL_review_web_MONGODB_ROOT_PASSWORD"
|
|
891
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"
|
|
892
|
+
- export RELEASE_NAME="pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web"
|
|
893
|
+
- export HELM_EXPERIMENTAL_OCI="1"
|
|
894
|
+
- export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"
|
|
895
|
+
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
896
|
+
- export HELM_ARGS=""
|
|
897
|
+
- export COMPONENT_NAME="web"
|
|
898
|
+
- collapseable_section_end "injectvars"
|
|
899
|
+
- kubectl config set-cluster "kube-pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web" --server="$CL_review_web_KUBE_URL" --certificate-authority <(echo $CL_review_web_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
900
|
+
- kubectl config set-credentials "kube-pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web" --token="$CL_review_web_KUBE_TOKEN"
|
|
901
|
+
- kubectl config set-context "kube-pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web" --cluster="kube-pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web" --user="kube-pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web" --namespace="pan-my-app-review"
|
|
902
|
+
- kubectl config use-context "kube-pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web"
|
|
903
|
+
- kubernetesDelete
|
|
904
|
+
- echo 'Disabling component in Dependency Track'
|
|
905
|
+
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-my-app/web" "$CI_ENVIRONMENT_URL" || true
|
|
906
|
+
environment:
|
|
907
|
+
name: review/$CI_COMMIT_REF_NAME/web
|
|
908
|
+
action: stop
|
|
909
|
+
rules:
|
|
910
|
+
- if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
|
|
911
|
+
when: on_success
|
|
912
|
+
- when: manual
|
|
913
|
+
if: $CI_MERGE_REQUEST_ID
|
|
914
|
+
needs: []
|
|
915
|
+
retry: *a1
|
|
916
|
+
interruptible: true
|
|
917
|
+
allow_failure: true
|
|
918
|
+
'web โฉ๏ธ Rollback โ ๏ธ | review ':
|
|
919
|
+
stage: rollback review
|
|
920
|
+
image: path/to/docker/kubernetes:the-version
|
|
921
|
+
variables:
|
|
922
|
+
KUBERNETES_CPU_REQUEST: '0.22'
|
|
923
|
+
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
924
|
+
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
925
|
+
GIT_STRATEGY: none
|
|
926
|
+
script:
|
|
927
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
928
|
+
- export ENV_SHORT="review"
|
|
929
|
+
- export APP_DIR="app"
|
|
930
|
+
- export ENV_TYPE="review"
|
|
931
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
932
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
933
|
+
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
934
|
+
- export HOSTNAME="web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"
|
|
935
|
+
- export ROOT_URL="https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"
|
|
936
|
+
- export HOSTNAME_INTERNAL="web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"
|
|
937
|
+
- export ROOT_URL_INTERNAL="https://web.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.my-app.pan.panter.cloud"
|
|
938
|
+
- export KUBE_NAMESPACE="pan-my-app-review"
|
|
939
|
+
- export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web"
|
|
940
|
+
- 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"; })-"
|
|
941
|
+
- export MONGODB_ROOT_PASSWORD="$CL_review_web_MONGODB_ROOT_PASSWORD"
|
|
942
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"
|
|
943
|
+
- export RELEASE_NAME="pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web"
|
|
944
|
+
- export HELM_EXPERIMENTAL_OCI="1"
|
|
945
|
+
- export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"
|
|
946
|
+
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
947
|
+
- export HELM_ARGS=""
|
|
948
|
+
- export COMPONENT_NAME="web"
|
|
949
|
+
- collapseable_section_end "injectvars"
|
|
950
|
+
- kubectl config set-cluster "kube-pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web" --server="$CL_review_web_KUBE_URL" --certificate-authority <(echo $CL_review_web_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
951
|
+
- kubectl config set-credentials "kube-pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web" --token="$CL_review_web_KUBE_TOKEN"
|
|
952
|
+
- kubectl config set-context "kube-pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web" --cluster="kube-pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web" --user="kube-pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web" --namespace="pan-my-app-review"
|
|
953
|
+
- kubectl config use-context "kube-pan-my-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-web"
|
|
954
|
+
- kubernetesRollback
|
|
955
|
+
environment:
|
|
956
|
+
name: review/$CI_COMMIT_REF_NAME/web
|
|
957
|
+
action: access
|
|
958
|
+
rules:
|
|
959
|
+
- when: manual
|
|
960
|
+
if: $CI_MERGE_REQUEST_ID
|
|
961
|
+
needs: []
|
|
962
|
+
retry: *a1
|
|
963
|
+
interruptible: true
|
|
964
|
+
allow_failure: true
|
|
965
|
+
'web ๐จ app | stage ':
|
|
966
|
+
stage: build
|
|
967
|
+
image: path/to/docker/jobs-meteor:the-version
|
|
968
|
+
variables:
|
|
969
|
+
KUBERNETES_CPU_REQUEST: '0.45'
|
|
970
|
+
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
971
|
+
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
972
|
+
script:
|
|
973
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
974
|
+
- export METEOR_DISABLE_OPTIMISTIC_CACHING="1"
|
|
975
|
+
- export ENV_SHORT="stage"
|
|
976
|
+
- export APP_DIR="app"
|
|
977
|
+
- export ENV_TYPE="stage"
|
|
978
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
979
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
980
|
+
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
981
|
+
- export HOSTNAME="web.stage.my-app.pan.panter.cloud"
|
|
982
|
+
- export ROOT_URL="https://web.stage.my-app.pan.panter.cloud"
|
|
983
|
+
- export HOSTNAME_INTERNAL="web.stage.my-app.pan.panter.cloud"
|
|
984
|
+
- export ROOT_URL_INTERNAL="https://web.stage.my-app.pan.panter.cloud"
|
|
985
|
+
- export KUBE_NAMESPACE="pan-my-app-stage"
|
|
986
|
+
- export KUBE_APP_NAME="web"
|
|
987
|
+
- export KUBE_APP_NAME_PREFIX=""
|
|
988
|
+
- export MONGODB_ROOT_PASSWORD="$CL_stage_web_MONGODB_ROOT_PASSWORD"
|
|
989
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"
|
|
990
|
+
- collapseable_section_end "injectvars"
|
|
991
|
+
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app/__build_info.json
|
|
992
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
993
|
+
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
994
|
+
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
995
|
+
- collapseable_section_end "nodeinstall"
|
|
996
|
+
- cd app
|
|
997
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
998
|
+
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
999
|
+
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1000
|
+
- collapseable_section_end "nodeinstall"
|
|
1001
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
1002
|
+
- yarn install --immutable
|
|
1003
|
+
- collapseable_section_end "yarninstall"
|
|
1004
|
+
- echo "add healthcheck package"
|
|
1005
|
+
- meteor add panter:healthroute --allow-superuser
|
|
1006
|
+
- meteor add qualia:prod-shell --allow-superuser
|
|
1007
|
+
- TOOL_NODE_FLAGS="--max_old_space_size=3584 --min_semi_space_size=8 --max_semi_space_size=256 --optimize_for_size" meteor build ./dist --architecture os.linux.x86_64 --allow-superuser --server-only --directory
|
|
1008
|
+
- cp ./__build_info.json ./dist/bundle/programs/server
|
|
1009
|
+
cache:
|
|
1010
|
+
- key: app-yarn
|
|
1011
|
+
policy: pull-push
|
|
1012
|
+
paths:
|
|
1013
|
+
- app/.yarn
|
|
1014
|
+
- key: app-node-modules
|
|
1015
|
+
policy: pull-push
|
|
1016
|
+
paths:
|
|
1017
|
+
- app/node_modules
|
|
1018
|
+
- key: web-meteor-build-cache
|
|
1019
|
+
policy: pull-push
|
|
1020
|
+
paths:
|
|
1021
|
+
- app/.meteor/local/resolver-result-cache.json
|
|
1022
|
+
- app/.meteor/local/plugin-cache
|
|
1023
|
+
- app/.meteor/local/isopacks
|
|
1024
|
+
- app/.meteor/local/bundler-cache/scanner
|
|
1025
|
+
artifacts:
|
|
1026
|
+
paths:
|
|
1027
|
+
- app/__build_info.json
|
|
1028
|
+
- app/dist
|
|
1029
|
+
expire_in: 1 day
|
|
1030
|
+
when: always
|
|
1031
|
+
reports: {}
|
|
1032
|
+
rules:
|
|
1033
|
+
- if: $CI_COMMIT_TAG
|
|
1034
|
+
needs: []
|
|
1035
|
+
retry: *a1
|
|
1036
|
+
interruptible: true
|
|
1037
|
+
'web ๐จ docker | stage ':
|
|
1038
|
+
stage: build
|
|
1039
|
+
image: path/to/docker/docker-build:the-version
|
|
1040
|
+
services:
|
|
1041
|
+
- name: docker:24.0.6-dind
|
|
1042
|
+
command:
|
|
1043
|
+
- --tls=false
|
|
1044
|
+
- --registry-mirror=https://mirror.gcr.io
|
|
1045
|
+
variables:
|
|
1046
|
+
DOCKER_HOST: tcp://docker:2375
|
|
1047
|
+
DOCKER_TLS_CERTDIR: ''
|
|
1048
|
+
DOCKER_DRIVER: overlay2
|
|
1049
|
+
DOCKER_BUILDKIT: '1'
|
|
1050
|
+
KUBERNETES_CPU_REQUEST: '0.45'
|
|
1051
|
+
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1052
|
+
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
1053
|
+
script:
|
|
1054
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1055
|
+
- export APP_DIR="app"
|
|
1056
|
+
- export DOCKER_BUILD_CONTEXT="."
|
|
1057
|
+
- export DOCKER_REGISTRY="$CI_REGISTRY"
|
|
1058
|
+
- export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/web"
|
|
1059
|
+
- export DOCKER_IMAGE_NAME="stage/web"
|
|
1060
|
+
- export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
|
|
1061
|
+
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1062
|
+
- export METEOR_INSTALL_SCRIPTS=""
|
|
1063
|
+
- collapseable_section_end "injectvars"
|
|
1064
|
+
- ensureMeteorDockerfile
|
|
1065
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
1066
|
+
- docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
|
|
1067
|
+
- collapseable_section_end "docker-login"
|
|
1068
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
1069
|
+
- docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
|
|
1070
|
+
- collapseable_section_end "docker-build"
|
|
1071
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
1072
|
+
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
1073
|
+
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
1074
|
+
- docker push $DOCKER_CACHE_IMAGE
|
|
1075
|
+
- collapseable_section_end "docker-push"
|
|
1076
|
+
rules:
|
|
1077
|
+
- if: $CI_COMMIT_TAG
|
|
1078
|
+
needs:
|
|
1079
|
+
- 'web ๐จ app | stage '
|
|
1080
|
+
retry: *a1
|
|
1081
|
+
interruptible: true
|
|
1082
|
+
'web ๐งพ sbom | stage ':
|
|
1083
|
+
stage: build
|
|
1084
|
+
image:
|
|
1085
|
+
name: aquasec/trivy:0.58.2
|
|
1086
|
+
entrypoint:
|
|
1087
|
+
- ''
|
|
1088
|
+
variables: {}
|
|
1089
|
+
script:
|
|
1090
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1091
|
+
- collapseable_section_end "injectvars"
|
|
1092
|
+
- trivy fs --quiet --format cyclonedx --output "__sbom.json" app
|
|
1093
|
+
artifacts:
|
|
1094
|
+
paths:
|
|
1095
|
+
- __sbom.json
|
|
1096
|
+
rules:
|
|
1097
|
+
- if: $CI_COMMIT_TAG
|
|
1098
|
+
needs: []
|
|
1099
|
+
retry: *a1
|
|
1100
|
+
interruptible: true
|
|
1101
|
+
allow_failure: true
|
|
1102
|
+
'web ๐ Deploy | stage ':
|
|
1103
|
+
stage: deploy stage
|
|
1104
|
+
image: path/to/docker/kubernetes:the-version
|
|
1105
|
+
variables:
|
|
1106
|
+
KUBERNETES_CPU_REQUEST: '0.22'
|
|
1107
|
+
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1108
|
+
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1109
|
+
script:
|
|
1110
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1111
|
+
- export ENV_SHORT="stage"
|
|
1112
|
+
- export APP_DIR="app"
|
|
1113
|
+
- export ENV_TYPE="stage"
|
|
1114
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1115
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1116
|
+
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
1117
|
+
- export HOSTNAME="web.stage.my-app.pan.panter.cloud"
|
|
1118
|
+
- export ROOT_URL="https://web.stage.my-app.pan.panter.cloud"
|
|
1119
|
+
- export HOSTNAME_INTERNAL="web.stage.my-app.pan.panter.cloud"
|
|
1120
|
+
- export ROOT_URL_INTERNAL="https://web.stage.my-app.pan.panter.cloud"
|
|
1121
|
+
- export KUBE_NAMESPACE="pan-my-app-stage"
|
|
1122
|
+
- export KUBE_APP_NAME="web"
|
|
1123
|
+
- export KUBE_APP_NAME_PREFIX=""
|
|
1124
|
+
- export MONGODB_ROOT_PASSWORD="$CL_stage_web_MONGODB_ROOT_PASSWORD"
|
|
1125
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"
|
|
1126
|
+
- export DOCKER_REGISTRY="$CI_REGISTRY"
|
|
1127
|
+
- export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/web"
|
|
1128
|
+
- export DOCKER_IMAGE_NAME="stage/web"
|
|
1129
|
+
- export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
|
|
1130
|
+
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1131
|
+
- export RELEASE_NAME="pan-my-app-stage-web"
|
|
1132
|
+
- export HELM_EXPERIMENTAL_OCI="1"
|
|
1133
|
+
- export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"
|
|
1134
|
+
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
1135
|
+
- export HELM_ARGS=""
|
|
1136
|
+
- export COMPONENT_NAME="web"
|
|
1137
|
+
- collapseable_section_end "injectvars"
|
|
1138
|
+
- kubectl config set-cluster "kube-pan-my-app-stage-web" --server="$CL_stage_web_KUBE_URL" --certificate-authority <(echo $CL_stage_web_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
1139
|
+
- kubectl config set-credentials "kube-pan-my-app-stage-web" --token="$CL_stage_web_KUBE_TOKEN"
|
|
1140
|
+
- kubectl config set-context "kube-pan-my-app-stage-web" --cluster="kube-pan-my-app-stage-web" --user="kube-pan-my-app-stage-web" --namespace="pan-my-app-stage"
|
|
1141
|
+
- kubectl config use-context "kube-pan-my-app-stage-web"
|
|
1142
|
+
- collapseable_section_start "writeallvalues" "Write __all_values.yml for helm deployment"
|
|
1143
|
+
- |
|
|
1144
|
+
cat > __all_values.yml <<EOF
|
|
1145
|
+
env:
|
|
1146
|
+
secret:
|
|
1147
|
+
MONGODB_ROOT_PASSWORD: |-
|
|
1148
|
+
$(printf %s "$CL_stage_web_MONGODB_ROOT_PASSWORD" | sed '1!s/^/ /')
|
|
1149
|
+
MONGO_URL: |-
|
|
1150
|
+
mongodb://root:$CL_stage_web_MONGODB_ROOT_PASSWORD@web-mongodb.pan-my-app-stage.svc.cluster.local:27017/app?authSource=admin
|
|
1151
|
+
public:
|
|
1152
|
+
ENV_SHORT: |-
|
|
1153
|
+
stage
|
|
1154
|
+
APP_DIR: |-
|
|
1155
|
+
app
|
|
1156
|
+
ENV_TYPE: |-
|
|
1157
|
+
stage
|
|
1158
|
+
BUILD_INFO_BUILD_ID: |-
|
|
1159
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
1160
|
+
BUILD_INFO_BUILD_TIME: |-
|
|
1161
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
1162
|
+
BUILD_INFO_CURRENT_VERSION: |-
|
|
1163
|
+
$(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed '1!s/^/ /')
|
|
1164
|
+
HOSTNAME: |-
|
|
1165
|
+
web.stage.my-app.pan.panter.cloud
|
|
1166
|
+
ROOT_URL: |-
|
|
1167
|
+
https://web.stage.my-app.pan.panter.cloud
|
|
1168
|
+
HOSTNAME_INTERNAL: |-
|
|
1169
|
+
web.stage.my-app.pan.panter.cloud
|
|
1170
|
+
ROOT_URL_INTERNAL: |-
|
|
1171
|
+
https://web.stage.my-app.pan.panter.cloud
|
|
1172
|
+
KUBE_NAMESPACE: |-
|
|
1173
|
+
pan-my-app-stage
|
|
1174
|
+
KUBE_APP_NAME: |-
|
|
1175
|
+
web
|
|
1176
|
+
KUBE_APP_NAME_PREFIX: ""
|
|
1177
|
+
_ALL_ENV_VAR_KEYS: |-
|
|
1178
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","MONGODB_ROOT_PASSWORD"]
|
|
1179
|
+
application:
|
|
1180
|
+
host: |-
|
|
1181
|
+
web.stage.my-app.pan.panter.cloud
|
|
1182
|
+
command: |-
|
|
1183
|
+
node main.js
|
|
1184
|
+
livenessProbe:
|
|
1185
|
+
httpGet:
|
|
1186
|
+
path: |-
|
|
1187
|
+
__health
|
|
1188
|
+
readinessProbe:
|
|
1189
|
+
httpGet:
|
|
1190
|
+
path: |-
|
|
1191
|
+
__health
|
|
1192
|
+
startupProbe:
|
|
1193
|
+
httpGet:
|
|
1194
|
+
path: |-
|
|
1195
|
+
__health
|
|
1196
|
+
worker:
|
|
1197
|
+
enabled: true
|
|
1198
|
+
mongodb:
|
|
1199
|
+
enabled: true
|
|
1200
|
+
auth:
|
|
1201
|
+
enabled: true
|
|
1202
|
+
rootPassword: |-
|
|
1203
|
+
$CL_stage_web_MONGODB_ROOT_PASSWORD
|
|
1204
|
+
replicaSetKey: |-
|
|
1205
|
+
$CL_stage_web_MONGODB_REPLICASET_KEY
|
|
1206
|
+
persistence:
|
|
1207
|
+
storageClass: |-
|
|
1208
|
+
standard-rwo
|
|
1209
|
+
backup:
|
|
1210
|
+
enabled: true
|
|
1211
|
+
hostToBackup: |-
|
|
1212
|
+
web-mongodb.pan-my-app-stage.svc.cluster.local:27017
|
|
1213
|
+
pvcToBackup: |-
|
|
1214
|
+
web-mongodb
|
|
1215
|
+
image: |-
|
|
1216
|
+
mrelite/kubectlmongoshell:v1.0
|
|
1217
|
+
schedule: |-
|
|
1218
|
+
0 4 * * *
|
|
1219
|
+
volumeSnapshotClass: |-
|
|
1220
|
+
snapshotclass
|
|
1221
|
+
architecture: |-
|
|
1222
|
+
standalone
|
|
1223
|
+
|
|
1224
|
+
EOF
|
|
1225
|
+
- collapseable_section_end "writeallvalues"
|
|
1226
|
+
- kubernetesCreateSecret
|
|
1227
|
+
- kubernetesDeploy
|
|
1228
|
+
- echo 'Uploading SBOM to Dependency Track'
|
|
1229
|
+
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-my-app/web" "$ROOT_URL" "__sbom.json" vex.json || true
|
|
1230
|
+
- echo deployment successful ๐ป
|
|
1231
|
+
- echo "CL_GITLAB_ENVIRONMENT_URL=$ROOT_URL" >> gitlab_environment.env
|
|
1232
|
+
environment:
|
|
1233
|
+
name: stage/web
|
|
1234
|
+
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
1235
|
+
on_stop: 'web ๐ Stop โ ๏ธ | stage '
|
|
1236
|
+
artifacts:
|
|
1237
|
+
reports:
|
|
1238
|
+
dotenv: gitlab_environment.env
|
|
1239
|
+
rules:
|
|
1240
|
+
- when: on_success
|
|
1241
|
+
if: $CI_COMMIT_TAG
|
|
1242
|
+
needs:
|
|
1243
|
+
- job: 'web ๐จ app | stage '
|
|
1244
|
+
artifacts: false
|
|
1245
|
+
- job: 'web ๐จ docker | stage '
|
|
1246
|
+
artifacts: false
|
|
1247
|
+
- job: 'web ๐งพ sbom | stage '
|
|
1248
|
+
artifacts: true
|
|
1249
|
+
retry: *a1
|
|
1250
|
+
interruptible: true
|
|
1251
|
+
allow_failure: false
|
|
1252
|
+
'web ๐ Stop โ ๏ธ | stage ':
|
|
1253
|
+
stage: stop stage
|
|
1254
|
+
image: path/to/docker/kubernetes:the-version
|
|
1255
|
+
variables:
|
|
1256
|
+
KUBERNETES_CPU_REQUEST: '0.22'
|
|
1257
|
+
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1258
|
+
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1259
|
+
GIT_STRATEGY: none
|
|
1260
|
+
script:
|
|
1261
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1262
|
+
- export ENV_SHORT="stage"
|
|
1263
|
+
- export APP_DIR="app"
|
|
1264
|
+
- export ENV_TYPE="stage"
|
|
1265
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1266
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1267
|
+
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
1268
|
+
- export HOSTNAME="web.stage.my-app.pan.panter.cloud"
|
|
1269
|
+
- export ROOT_URL="https://web.stage.my-app.pan.panter.cloud"
|
|
1270
|
+
- export HOSTNAME_INTERNAL="web.stage.my-app.pan.panter.cloud"
|
|
1271
|
+
- export ROOT_URL_INTERNAL="https://web.stage.my-app.pan.panter.cloud"
|
|
1272
|
+
- export KUBE_NAMESPACE="pan-my-app-stage"
|
|
1273
|
+
- export KUBE_APP_NAME="web"
|
|
1274
|
+
- export KUBE_APP_NAME_PREFIX=""
|
|
1275
|
+
- export MONGODB_ROOT_PASSWORD="$CL_stage_web_MONGODB_ROOT_PASSWORD"
|
|
1276
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"
|
|
1277
|
+
- export RELEASE_NAME="pan-my-app-stage-web"
|
|
1278
|
+
- export HELM_EXPERIMENTAL_OCI="1"
|
|
1279
|
+
- export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"
|
|
1280
|
+
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
1281
|
+
- export HELM_ARGS=""
|
|
1282
|
+
- export COMPONENT_NAME="web"
|
|
1283
|
+
- collapseable_section_end "injectvars"
|
|
1284
|
+
- kubectl config set-cluster "kube-pan-my-app-stage-web" --server="$CL_stage_web_KUBE_URL" --certificate-authority <(echo $CL_stage_web_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
1285
|
+
- kubectl config set-credentials "kube-pan-my-app-stage-web" --token="$CL_stage_web_KUBE_TOKEN"
|
|
1286
|
+
- kubectl config set-context "kube-pan-my-app-stage-web" --cluster="kube-pan-my-app-stage-web" --user="kube-pan-my-app-stage-web" --namespace="pan-my-app-stage"
|
|
1287
|
+
- kubectl config use-context "kube-pan-my-app-stage-web"
|
|
1288
|
+
- kubernetesDelete
|
|
1289
|
+
- echo 'Disabling component in Dependency Track'
|
|
1290
|
+
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-my-app/web" "$CI_ENVIRONMENT_URL" || true
|
|
1291
|
+
environment:
|
|
1292
|
+
name: stage/web
|
|
1293
|
+
action: stop
|
|
1294
|
+
rules:
|
|
1295
|
+
- if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
|
|
1296
|
+
when: on_success
|
|
1297
|
+
- when: manual
|
|
1298
|
+
if: $CI_COMMIT_TAG
|
|
1299
|
+
needs: []
|
|
1300
|
+
retry: *a1
|
|
1301
|
+
interruptible: true
|
|
1302
|
+
allow_failure: true
|
|
1303
|
+
'web โฉ๏ธ Rollback โ ๏ธ | stage ':
|
|
1304
|
+
stage: rollback stage
|
|
1305
|
+
image: path/to/docker/kubernetes:the-version
|
|
1306
|
+
variables:
|
|
1307
|
+
KUBERNETES_CPU_REQUEST: '0.22'
|
|
1308
|
+
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1309
|
+
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1310
|
+
GIT_STRATEGY: none
|
|
1311
|
+
script:
|
|
1312
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1313
|
+
- export ENV_SHORT="stage"
|
|
1314
|
+
- export APP_DIR="app"
|
|
1315
|
+
- export ENV_TYPE="stage"
|
|
1316
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1317
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1318
|
+
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
1319
|
+
- export HOSTNAME="web.stage.my-app.pan.panter.cloud"
|
|
1320
|
+
- export ROOT_URL="https://web.stage.my-app.pan.panter.cloud"
|
|
1321
|
+
- export HOSTNAME_INTERNAL="web.stage.my-app.pan.panter.cloud"
|
|
1322
|
+
- export ROOT_URL_INTERNAL="https://web.stage.my-app.pan.panter.cloud"
|
|
1323
|
+
- export KUBE_NAMESPACE="pan-my-app-stage"
|
|
1324
|
+
- export KUBE_APP_NAME="web"
|
|
1325
|
+
- export KUBE_APP_NAME_PREFIX=""
|
|
1326
|
+
- export MONGODB_ROOT_PASSWORD="$CL_stage_web_MONGODB_ROOT_PASSWORD"
|
|
1327
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\"]"
|
|
1328
|
+
- export RELEASE_NAME="pan-my-app-stage-web"
|
|
1329
|
+
- export HELM_EXPERIMENTAL_OCI="1"
|
|
1330
|
+
- export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"
|
|
1331
|
+
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
1332
|
+
- export HELM_ARGS=""
|
|
1333
|
+
- export COMPONENT_NAME="web"
|
|
1334
|
+
- collapseable_section_end "injectvars"
|
|
1335
|
+
- kubectl config set-cluster "kube-pan-my-app-stage-web" --server="$CL_stage_web_KUBE_URL" --certificate-authority <(echo $CL_stage_web_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
1336
|
+
- kubectl config set-credentials "kube-pan-my-app-stage-web" --token="$CL_stage_web_KUBE_TOKEN"
|
|
1337
|
+
- kubectl config set-context "kube-pan-my-app-stage-web" --cluster="kube-pan-my-app-stage-web" --user="kube-pan-my-app-stage-web" --namespace="pan-my-app-stage"
|
|
1338
|
+
- kubectl config use-context "kube-pan-my-app-stage-web"
|
|
1339
|
+
- kubernetesRollback
|
|
1340
|
+
environment:
|
|
1341
|
+
name: stage/web
|
|
1342
|
+
action: access
|
|
1343
|
+
rules:
|
|
1344
|
+
- when: manual
|
|
1345
|
+
if: $CI_COMMIT_TAG
|
|
1346
|
+
needs: []
|
|
1347
|
+
retry: *a1
|
|
1348
|
+
interruptible: true
|
|
1349
|
+
allow_failure: true
|
|
1350
|
+
'web ๐จ app | prod ':
|
|
1351
|
+
stage: build
|
|
1352
|
+
image: path/to/docker/jobs-meteor:the-version
|
|
1353
|
+
variables:
|
|
1354
|
+
KUBERNETES_CPU_REQUEST: '0.45'
|
|
1355
|
+
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1356
|
+
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
1357
|
+
script:
|
|
1358
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1359
|
+
- export METEOR_DISABLE_OPTIMISTIC_CACHING="1"
|
|
1360
|
+
- export ENV_SHORT="prod"
|
|
1361
|
+
- export APP_DIR="app"
|
|
1362
|
+
- export ENV_TYPE="prod"
|
|
1363
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1364
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1365
|
+
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
1366
|
+
- export HOSTNAME="www.example.com"
|
|
1367
|
+
- export ROOT_URL="https://www.example.com"
|
|
1368
|
+
- export HOSTNAME_INTERNAL="web.prod.my-app.pan.panter.cloud"
|
|
1369
|
+
- export ROOT_URL_INTERNAL="https://web.prod.my-app.pan.panter.cloud"
|
|
1370
|
+
- export KUBE_NAMESPACE="pan-my-app-prod"
|
|
1371
|
+
- export KUBE_APP_NAME="web"
|
|
1372
|
+
- export KUBE_APP_NAME_PREFIX=""
|
|
1373
|
+
- export MONGODB_ROOT_PASSWORD="$CL_prod_web_MONGODB_ROOT_PASSWORD"
|
|
1374
|
+
- export MONGODB_REPLICASET_KEY="$CL_prod_web_MONGODB_REPLICASET_KEY"
|
|
1375
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"
|
|
1376
|
+
- collapseable_section_end "injectvars"
|
|
1377
|
+
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app/__build_info.json
|
|
1378
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1379
|
+
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1380
|
+
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1381
|
+
- collapseable_section_end "nodeinstall"
|
|
1382
|
+
- cd app
|
|
1383
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1384
|
+
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1385
|
+
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1386
|
+
- collapseable_section_end "nodeinstall"
|
|
1387
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
1388
|
+
- yarn install --immutable
|
|
1389
|
+
- collapseable_section_end "yarninstall"
|
|
1390
|
+
- echo "add healthcheck package"
|
|
1391
|
+
- meteor add panter:healthroute --allow-superuser
|
|
1392
|
+
- meteor add qualia:prod-shell --allow-superuser
|
|
1393
|
+
- TOOL_NODE_FLAGS="--max_old_space_size=3584 --min_semi_space_size=8 --max_semi_space_size=256 --optimize_for_size" meteor build ./dist --architecture os.linux.x86_64 --allow-superuser --server-only --directory
|
|
1394
|
+
- cp ./__build_info.json ./dist/bundle/programs/server
|
|
1395
|
+
cache:
|
|
1396
|
+
- key: app-yarn
|
|
1397
|
+
policy: pull-push
|
|
1398
|
+
paths:
|
|
1399
|
+
- app/.yarn
|
|
1400
|
+
- key: app-node-modules
|
|
1401
|
+
policy: pull-push
|
|
1402
|
+
paths:
|
|
1403
|
+
- app/node_modules
|
|
1404
|
+
- key: web-meteor-build-cache
|
|
1405
|
+
policy: pull-push
|
|
1406
|
+
paths:
|
|
1407
|
+
- app/.meteor/local/resolver-result-cache.json
|
|
1408
|
+
- app/.meteor/local/plugin-cache
|
|
1409
|
+
- app/.meteor/local/isopacks
|
|
1410
|
+
- app/.meteor/local/bundler-cache/scanner
|
|
1411
|
+
artifacts:
|
|
1412
|
+
paths:
|
|
1413
|
+
- app/__build_info.json
|
|
1414
|
+
- app/dist
|
|
1415
|
+
expire_in: 1 day
|
|
1416
|
+
when: always
|
|
1417
|
+
reports: {}
|
|
1418
|
+
rules:
|
|
1419
|
+
- if: $CI_COMMIT_TAG
|
|
1420
|
+
needs: []
|
|
1421
|
+
retry: *a1
|
|
1422
|
+
interruptible: true
|
|
1423
|
+
'web ๐จ docker | prod ':
|
|
1424
|
+
stage: build
|
|
1425
|
+
image: path/to/docker/docker-build:the-version
|
|
1426
|
+
services:
|
|
1427
|
+
- name: docker:24.0.6-dind
|
|
1428
|
+
command:
|
|
1429
|
+
- --tls=false
|
|
1430
|
+
- --registry-mirror=https://mirror.gcr.io
|
|
1431
|
+
variables:
|
|
1432
|
+
DOCKER_HOST: tcp://docker:2375
|
|
1433
|
+
DOCKER_TLS_CERTDIR: ''
|
|
1434
|
+
DOCKER_DRIVER: overlay2
|
|
1435
|
+
DOCKER_BUILDKIT: '1'
|
|
1436
|
+
KUBERNETES_CPU_REQUEST: '0.45'
|
|
1437
|
+
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1438
|
+
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
1439
|
+
script:
|
|
1440
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1441
|
+
- export APP_DIR="app"
|
|
1442
|
+
- export DOCKER_BUILD_CONTEXT="."
|
|
1443
|
+
- export DOCKER_REGISTRY="$CI_REGISTRY"
|
|
1444
|
+
- export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/web"
|
|
1445
|
+
- export DOCKER_IMAGE_NAME="prod/web"
|
|
1446
|
+
- export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
|
|
1447
|
+
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1448
|
+
- export METEOR_INSTALL_SCRIPTS=""
|
|
1449
|
+
- collapseable_section_end "injectvars"
|
|
1450
|
+
- ensureMeteorDockerfile
|
|
1451
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
1452
|
+
- docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
|
|
1453
|
+
- collapseable_section_end "docker-login"
|
|
1454
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
1455
|
+
- docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
|
|
1456
|
+
- collapseable_section_end "docker-build"
|
|
1457
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
1458
|
+
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
1459
|
+
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
1460
|
+
- docker push $DOCKER_CACHE_IMAGE
|
|
1461
|
+
- collapseable_section_end "docker-push"
|
|
1462
|
+
rules:
|
|
1463
|
+
- if: $CI_COMMIT_TAG
|
|
1464
|
+
needs:
|
|
1465
|
+
- 'web ๐จ app | prod '
|
|
1466
|
+
retry: *a1
|
|
1467
|
+
interruptible: true
|
|
1468
|
+
'web ๐งพ sbom | prod ':
|
|
1469
|
+
stage: build
|
|
1470
|
+
image:
|
|
1471
|
+
name: aquasec/trivy:0.58.2
|
|
1472
|
+
entrypoint:
|
|
1473
|
+
- ''
|
|
1474
|
+
variables: {}
|
|
1475
|
+
script:
|
|
1476
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1477
|
+
- collapseable_section_end "injectvars"
|
|
1478
|
+
- trivy fs --quiet --format cyclonedx --output "__sbom.json" app
|
|
1479
|
+
artifacts:
|
|
1480
|
+
paths:
|
|
1481
|
+
- __sbom.json
|
|
1482
|
+
rules:
|
|
1483
|
+
- if: $CI_COMMIT_TAG
|
|
1484
|
+
needs: []
|
|
1485
|
+
retry: *a1
|
|
1486
|
+
interruptible: true
|
|
1487
|
+
allow_failure: true
|
|
1488
|
+
'web ๐ Deploy | prod ':
|
|
1489
|
+
stage: deploy prod
|
|
1490
|
+
image: path/to/docker/kubernetes:the-version
|
|
1491
|
+
variables:
|
|
1492
|
+
KUBERNETES_CPU_REQUEST: '0.22'
|
|
1493
|
+
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1494
|
+
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1495
|
+
script:
|
|
1496
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1497
|
+
- export ENV_SHORT="prod"
|
|
1498
|
+
- export APP_DIR="app"
|
|
1499
|
+
- export ENV_TYPE="prod"
|
|
1500
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1501
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1502
|
+
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
1503
|
+
- export HOSTNAME="www.example.com"
|
|
1504
|
+
- export ROOT_URL="https://www.example.com"
|
|
1505
|
+
- export HOSTNAME_INTERNAL="web.prod.my-app.pan.panter.cloud"
|
|
1506
|
+
- export ROOT_URL_INTERNAL="https://web.prod.my-app.pan.panter.cloud"
|
|
1507
|
+
- export KUBE_NAMESPACE="pan-my-app-prod"
|
|
1508
|
+
- export KUBE_APP_NAME="web"
|
|
1509
|
+
- export KUBE_APP_NAME_PREFIX=""
|
|
1510
|
+
- export MONGODB_ROOT_PASSWORD="$CL_prod_web_MONGODB_ROOT_PASSWORD"
|
|
1511
|
+
- export MONGODB_REPLICASET_KEY="$CL_prod_web_MONGODB_REPLICASET_KEY"
|
|
1512
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"
|
|
1513
|
+
- export DOCKER_REGISTRY="$CI_REGISTRY"
|
|
1514
|
+
- export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/web"
|
|
1515
|
+
- export DOCKER_IMAGE_NAME="prod/web"
|
|
1516
|
+
- export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"
|
|
1517
|
+
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1518
|
+
- export RELEASE_NAME="pan-my-app-prod-web"
|
|
1519
|
+
- export HELM_EXPERIMENTAL_OCI="1"
|
|
1520
|
+
- export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"
|
|
1521
|
+
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
1522
|
+
- export HELM_ARGS=""
|
|
1523
|
+
- export COMPONENT_NAME="web"
|
|
1524
|
+
- collapseable_section_end "injectvars"
|
|
1525
|
+
- kubectl config set-cluster "kube-pan-my-app-prod-web" --server="$CL_prod_web_KUBE_URL" --certificate-authority <(echo $CL_prod_web_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
1526
|
+
- kubectl config set-credentials "kube-pan-my-app-prod-web" --token="$CL_prod_web_KUBE_TOKEN"
|
|
1527
|
+
- kubectl config set-context "kube-pan-my-app-prod-web" --cluster="kube-pan-my-app-prod-web" --user="kube-pan-my-app-prod-web" --namespace="pan-my-app-prod"
|
|
1528
|
+
- kubectl config use-context "kube-pan-my-app-prod-web"
|
|
1529
|
+
- collapseable_section_start "writeallvalues" "Write __all_values.yml for helm deployment"
|
|
1530
|
+
- |
|
|
1531
|
+
cat > __all_values.yml <<EOF
|
|
1532
|
+
env:
|
|
1533
|
+
secret:
|
|
1534
|
+
MONGODB_ROOT_PASSWORD: |-
|
|
1535
|
+
$(printf %s "$CL_prod_web_MONGODB_ROOT_PASSWORD" | sed '1!s/^/ /')
|
|
1536
|
+
MONGODB_REPLICASET_KEY: |-
|
|
1537
|
+
$(printf %s "$CL_prod_web_MONGODB_REPLICASET_KEY" | sed '1!s/^/ /')
|
|
1538
|
+
MONGO_URL: |-
|
|
1539
|
+
mongodb://root:$CL_prod_web_MONGODB_ROOT_PASSWORD@web-mongodb-0.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017,web-mongodb-1.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin
|
|
1540
|
+
MONGO_OPLOG_URL: |-
|
|
1541
|
+
mongodb://root:$CL_prod_web_MONGODB_ROOT_PASSWORD@web-mongodb-0.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017,web-mongodb-1.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin
|
|
1542
|
+
public:
|
|
1543
|
+
ENV_SHORT: |-
|
|
1544
|
+
prod
|
|
1545
|
+
APP_DIR: |-
|
|
1546
|
+
app
|
|
1547
|
+
ENV_TYPE: |-
|
|
1548
|
+
prod
|
|
1549
|
+
BUILD_INFO_BUILD_ID: |-
|
|
1550
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
1551
|
+
BUILD_INFO_BUILD_TIME: |-
|
|
1552
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
1553
|
+
BUILD_INFO_CURRENT_VERSION: |-
|
|
1554
|
+
$(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed '1!s/^/ /')
|
|
1555
|
+
HOSTNAME: |-
|
|
1556
|
+
www.example.com
|
|
1557
|
+
ROOT_URL: |-
|
|
1558
|
+
https://www.example.com
|
|
1559
|
+
HOSTNAME_INTERNAL: |-
|
|
1560
|
+
web.prod.my-app.pan.panter.cloud
|
|
1561
|
+
ROOT_URL_INTERNAL: |-
|
|
1562
|
+
https://web.prod.my-app.pan.panter.cloud
|
|
1563
|
+
KUBE_NAMESPACE: |-
|
|
1564
|
+
pan-my-app-prod
|
|
1565
|
+
KUBE_APP_NAME: |-
|
|
1566
|
+
web
|
|
1567
|
+
KUBE_APP_NAME_PREFIX: ""
|
|
1568
|
+
_ALL_ENV_VAR_KEYS: |-
|
|
1569
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]
|
|
1570
|
+
application:
|
|
1571
|
+
host: |-
|
|
1572
|
+
www.example.com
|
|
1573
|
+
command: |-
|
|
1574
|
+
node main.js
|
|
1575
|
+
livenessProbe:
|
|
1576
|
+
httpGet:
|
|
1577
|
+
path: |-
|
|
1578
|
+
__health
|
|
1579
|
+
readinessProbe:
|
|
1580
|
+
httpGet:
|
|
1581
|
+
path: |-
|
|
1582
|
+
__health
|
|
1583
|
+
startupProbe:
|
|
1584
|
+
httpGet:
|
|
1585
|
+
path: |-
|
|
1586
|
+
__health
|
|
1587
|
+
worker:
|
|
1588
|
+
enabled: true
|
|
1589
|
+
redirects:
|
|
1590
|
+
- host: |-
|
|
1591
|
+
example.com
|
|
1592
|
+
mongodb:
|
|
1593
|
+
enabled: true
|
|
1594
|
+
auth:
|
|
1595
|
+
enabled: true
|
|
1596
|
+
rootPassword: |-
|
|
1597
|
+
$CL_prod_web_MONGODB_ROOT_PASSWORD
|
|
1598
|
+
replicaSetKey: |-
|
|
1599
|
+
$CL_prod_web_MONGODB_REPLICASET_KEY
|
|
1600
|
+
persistence:
|
|
1601
|
+
storageClass: |-
|
|
1602
|
+
premium-rwo
|
|
1603
|
+
size: |-
|
|
1604
|
+
50Gi
|
|
1605
|
+
backup:
|
|
1606
|
+
enabled: true
|
|
1607
|
+
hostToBackup: |-
|
|
1608
|
+
web-mongodb-1.web-mongodb-headless.pan-my-app-prod.svc.cluster.local:27017
|
|
1609
|
+
pvcToBackup: |-
|
|
1610
|
+
datadir-web-mongodb-1
|
|
1611
|
+
image: |-
|
|
1612
|
+
mrelite/kubectlmongoshell:v1.0
|
|
1613
|
+
schedule: |-
|
|
1614
|
+
0 4 * * *
|
|
1615
|
+
volumeSnapshotClass: |-
|
|
1616
|
+
snapshotclass
|
|
1617
|
+
architecture: |-
|
|
1618
|
+
replicaset
|
|
1619
|
+
replicaCount: 2
|
|
1620
|
+
resources:
|
|
1621
|
+
limits:
|
|
1622
|
+
memory: |-
|
|
1623
|
+
8Gi
|
|
1624
|
+
requests:
|
|
1625
|
+
memory: |-
|
|
1626
|
+
8Gi
|
|
1627
|
+
|
|
1628
|
+
EOF
|
|
1629
|
+
- collapseable_section_end "writeallvalues"
|
|
1630
|
+
- kubernetesCreateSecret
|
|
1631
|
+
- kubernetesDeploy
|
|
1632
|
+
- echo 'Uploading SBOM to Dependency Track'
|
|
1633
|
+
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-my-app/web" "$ROOT_URL" "__sbom.json" vex.json || true
|
|
1634
|
+
- echo deployment successful ๐ป
|
|
1635
|
+
- echo "CL_GITLAB_ENVIRONMENT_URL=$ROOT_URL" >> gitlab_environment.env
|
|
1636
|
+
environment:
|
|
1637
|
+
name: prod/web
|
|
1638
|
+
url: $CL_GITLAB_ENVIRONMENT_URL
|
|
1639
|
+
on_stop: 'web ๐ Stop โ ๏ธ | prod '
|
|
1640
|
+
artifacts:
|
|
1641
|
+
reports:
|
|
1642
|
+
dotenv: gitlab_environment.env
|
|
1643
|
+
rules:
|
|
1644
|
+
- when: manual
|
|
1645
|
+
if: $CI_COMMIT_TAG
|
|
1646
|
+
needs:
|
|
1647
|
+
- job: 'web ๐จ app | prod '
|
|
1648
|
+
artifacts: false
|
|
1649
|
+
- job: 'web ๐จ docker | prod '
|
|
1650
|
+
artifacts: false
|
|
1651
|
+
- job: 'web ๐งพ sbom | prod '
|
|
1652
|
+
artifacts: true
|
|
1653
|
+
retry: *a1
|
|
1654
|
+
interruptible: true
|
|
1655
|
+
allow_failure: true
|
|
1656
|
+
'web ๐ Stop โ ๏ธ | prod ':
|
|
1657
|
+
stage: stop prod
|
|
1658
|
+
image: path/to/docker/kubernetes:the-version
|
|
1659
|
+
variables:
|
|
1660
|
+
KUBERNETES_CPU_REQUEST: '0.22'
|
|
1661
|
+
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1662
|
+
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1663
|
+
GIT_STRATEGY: none
|
|
1664
|
+
script:
|
|
1665
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1666
|
+
- export ENV_SHORT="prod"
|
|
1667
|
+
- export APP_DIR="app"
|
|
1668
|
+
- export ENV_TYPE="prod"
|
|
1669
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1670
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1671
|
+
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
1672
|
+
- export HOSTNAME="www.example.com"
|
|
1673
|
+
- export ROOT_URL="https://www.example.com"
|
|
1674
|
+
- export HOSTNAME_INTERNAL="web.prod.my-app.pan.panter.cloud"
|
|
1675
|
+
- export ROOT_URL_INTERNAL="https://web.prod.my-app.pan.panter.cloud"
|
|
1676
|
+
- export KUBE_NAMESPACE="pan-my-app-prod"
|
|
1677
|
+
- export KUBE_APP_NAME="web"
|
|
1678
|
+
- export KUBE_APP_NAME_PREFIX=""
|
|
1679
|
+
- export MONGODB_ROOT_PASSWORD="$CL_prod_web_MONGODB_ROOT_PASSWORD"
|
|
1680
|
+
- export MONGODB_REPLICASET_KEY="$CL_prod_web_MONGODB_REPLICASET_KEY"
|
|
1681
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"
|
|
1682
|
+
- export RELEASE_NAME="pan-my-app-prod-web"
|
|
1683
|
+
- export HELM_EXPERIMENTAL_OCI="1"
|
|
1684
|
+
- export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"
|
|
1685
|
+
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
1686
|
+
- export HELM_ARGS=""
|
|
1687
|
+
- export COMPONENT_NAME="web"
|
|
1688
|
+
- collapseable_section_end "injectvars"
|
|
1689
|
+
- kubectl config set-cluster "kube-pan-my-app-prod-web" --server="$CL_prod_web_KUBE_URL" --certificate-authority <(echo $CL_prod_web_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
1690
|
+
- kubectl config set-credentials "kube-pan-my-app-prod-web" --token="$CL_prod_web_KUBE_TOKEN"
|
|
1691
|
+
- kubectl config set-context "kube-pan-my-app-prod-web" --cluster="kube-pan-my-app-prod-web" --user="kube-pan-my-app-prod-web" --namespace="pan-my-app-prod"
|
|
1692
|
+
- kubectl config use-context "kube-pan-my-app-prod-web"
|
|
1693
|
+
- kubernetesDelete
|
|
1694
|
+
- echo 'Disabling component in Dependency Track'
|
|
1695
|
+
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-my-app/web" "$CI_ENVIRONMENT_URL" || true
|
|
1696
|
+
environment:
|
|
1697
|
+
name: prod/web
|
|
1698
|
+
action: stop
|
|
1699
|
+
rules:
|
|
1700
|
+
- if: $CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/
|
|
1701
|
+
when: on_success
|
|
1702
|
+
- when: manual
|
|
1703
|
+
if: $CI_COMMIT_TAG
|
|
1704
|
+
needs: []
|
|
1705
|
+
retry: *a1
|
|
1706
|
+
interruptible: true
|
|
1707
|
+
allow_failure: true
|
|
1708
|
+
'web โฉ๏ธ Rollback โ ๏ธ | prod ':
|
|
1709
|
+
stage: rollback prod
|
|
1710
|
+
image: path/to/docker/kubernetes:the-version
|
|
1711
|
+
variables:
|
|
1712
|
+
KUBERNETES_CPU_REQUEST: '0.22'
|
|
1713
|
+
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1714
|
+
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1715
|
+
GIT_STRATEGY: none
|
|
1716
|
+
script:
|
|
1717
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1718
|
+
- export ENV_SHORT="prod"
|
|
1719
|
+
- export APP_DIR="app"
|
|
1720
|
+
- export ENV_TYPE="prod"
|
|
1721
|
+
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1722
|
+
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1723
|
+
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
1724
|
+
- export HOSTNAME="www.example.com"
|
|
1725
|
+
- export ROOT_URL="https://www.example.com"
|
|
1726
|
+
- export HOSTNAME_INTERNAL="web.prod.my-app.pan.panter.cloud"
|
|
1727
|
+
- export ROOT_URL_INTERNAL="https://web.prod.my-app.pan.panter.cloud"
|
|
1728
|
+
- export KUBE_NAMESPACE="pan-my-app-prod"
|
|
1729
|
+
- export KUBE_APP_NAME="web"
|
|
1730
|
+
- export KUBE_APP_NAME_PREFIX=""
|
|
1731
|
+
- export MONGODB_ROOT_PASSWORD="$CL_prod_web_MONGODB_ROOT_PASSWORD"
|
|
1732
|
+
- export MONGODB_REPLICASET_KEY="$CL_prod_web_MONGODB_REPLICASET_KEY"
|
|
1733
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"
|
|
1734
|
+
- export RELEASE_NAME="pan-my-app-prod-web"
|
|
1735
|
+
- export HELM_EXPERIMENTAL_OCI="1"
|
|
1736
|
+
- export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-web"
|
|
1737
|
+
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
1738
|
+
- export HELM_ARGS=""
|
|
1739
|
+
- export COMPONENT_NAME="web"
|
|
1740
|
+
- collapseable_section_end "injectvars"
|
|
1741
|
+
- kubectl config set-cluster "kube-pan-my-app-prod-web" --server="$CL_prod_web_KUBE_URL" --certificate-authority <(echo $CL_prod_web_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
1742
|
+
- kubectl config set-credentials "kube-pan-my-app-prod-web" --token="$CL_prod_web_KUBE_TOKEN"
|
|
1743
|
+
- kubectl config set-context "kube-pan-my-app-prod-web" --cluster="kube-pan-my-app-prod-web" --user="kube-pan-my-app-prod-web" --namespace="pan-my-app-prod"
|
|
1744
|
+
- kubectl config use-context "kube-pan-my-app-prod-web"
|
|
1745
|
+
- kubernetesRollback
|
|
1746
|
+
environment:
|
|
1747
|
+
name: prod/web
|
|
1748
|
+
action: access
|
|
1749
|
+
rules:
|
|
1750
|
+
- when: manual
|
|
1751
|
+
if: $CI_COMMIT_TAG
|
|
1752
|
+
needs: []
|
|
1753
|
+
retry: *a1
|
|
1754
|
+
interruptible: true
|
|
1755
|
+
allow_failure: true
|
|
1756
|
+
create release:
|
|
1757
|
+
stage: release
|
|
1758
|
+
image: path/to/docker/semantic-release:the-version
|
|
1759
|
+
script:
|
|
1760
|
+
- semanticRelease
|
|
1761
|
+
- echo '๐ The project access token might be invald - run \`project-renew-token\` in catladder CLI to fix.'
|
|
1762
|
+
rules:
|
|
1763
|
+
- &a2
|
|
1764
|
+
if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
|
|
1765
|
+
when: never
|
|
1766
|
+
- &a3
|
|
1767
|
+
if: $CI_PIPELINE_SOURCE == "schedule"
|
|
1768
|
+
when: never
|
|
1769
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $AUTO_RELEASE == "true"
|
|
1770
|
+
when: on_success
|
|
1771
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
1772
|
+
when: manual
|
|
1773
|
+
- if: $CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/
|
|
1774
|
+
when: manual
|
|
1775
|
+
โ ๏ธ force create release:
|
|
1776
|
+
stage: release
|
|
1777
|
+
image: path/to/docker/semantic-release:the-version
|
|
1778
|
+
script:
|
|
1779
|
+
- semanticRelease
|
|
1780
|
+
- echo '๐ The project access token might be invald - run \`project-renew-token\` in catladder CLI to fix.'
|
|
1781
|
+
rules:
|
|
1782
|
+
- *a2
|
|
1783
|
+
- *a3
|
|
1784
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
1785
|
+
when: manual
|
|
1786
|
+
- if: $CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/
|
|
1787
|
+
when: manual
|
|
1788
|
+
needs: []
|
|
1789
|
+
"
|
|
1790
|
+
`;
|