Har*_*var 10 google-cloud-platform google-kubernetes-engine google-cloud-build
这是我的云构建文件
substitutions:
_CLOUDSDK_COMPUTE_ZONE: us-central1-a
_CLOUDSDK_CONTAINER_CLUSTER: $_CLOUDSDK_CONTAINER_CLUSTER
steps:
- name: gcr.io/$PROJECT_ID/sonar-scanner:latest
args:
- '-Dsonar.host.url=https://sonar.test.io'
- '-Dsonar.login=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
- '-Dsonar.projectKey=test-service'
- '-Dsonar.sources=.'
- id: 'build test-service image'
name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/$REPO_NAME/$BRANCH_NAME:$SHORT_SHA', '.']
- id: 'push test-service image'
name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/$PROJECT_ID/$REPO_NAME/$BRANCH_NAME:$SHORT_SHA']
- id: 'set test-service image in yamls'
name: 'ubuntu'
args: ['bash','-c','sed -i "s,TEST_SERVICE,gcr.io/$PROJECT_ID/$REPO_NAME/$BRANCH_NAME:$SHORT_SHA," k8s/*.yaml']
- id: kubectl-apply
name: 'gcr.io/cloud-builders/kubectl'
args: ['apply', '-f', 'k8s/']
env:
- 'CLOUDSDK_COMPUTE_ZONE=${_CLOUDSDK_COMPUTE_ZONE}'
- 'CLOUDSDK_CONTAINER_CLUSTER=${_CLOUDSDK_CONTAINER_CLUSTER}'
images: ['gcr.io/$PROJECT_ID/$REPO_NAME/$BRANCH_NAME:$SHORT_SHA']
Run Code Online (Sandbox Code Playgroud)
我想实施条件步骤。我的声纳步骤在哪里。
如果分支是生产,我必须跳过声纳步骤,如果有其他分支,则必须运行步骤。
我想Cloudbuild.yaml在所有分支机构中管理相同的内容。
当我合并分支时development > staging > production。
那么云构建是否有可能实现条件步骤?
gui*_*ere 20
您有 2 个解决方案
steps:
- name: gcr.io/$PROJECT_ID/sonar-scanner:latest
entrypoint: 'bash'
args:
- '-c'
- 'if [ $BRANCH_NAME != 'prod' ]; then sonar-scanner -Dsonar.host.url=https://sonar.test.io -Dsonar.login=XXXX -Dsonar.projectKey=test-service -Dsonar.sources=. ; fi'
Run Code Online (Sandbox Code Playgroud)
Neb*_*tic 10
(尚)不可能在云构建中创建条件步骤,例如使用 gitlab-ci 就可以。我们所做的是在 GCP 内创建多个项目。您可以创建一个用于开发、暂存和生产的项目。它们都来自同一个 git 存储库,以保持环境彼此相同。这意味着它们具有相同的 cloudbuild.yaml 文件。
如果您以某种方式需要仅在开发环境中运行特定脚本(例如,端到端测试),您可以在构建步骤本身中指定 $BRANCH_NAME 或 $PROJECT_ID 的条件。然而,过多地使用这些条件会损害可维护性,并且您的环境不会成为彼此的精确镜像。尽管如此,这里有一个简单的例子:
---
timeout: 300s
steps:
# Branch name conditional
- name: gcr.io/google.com/cloudsdktool/cloud-sdk
entrypoint: bash
args:
- -c
- |
if [[ "$BRANCH_NAME" == "develop" ]]
then
echo "Development stuff only"
elif [[ "$BRANCH_NAME" == "release" ]]
then
echo "Acceptance stuff only"
elif [[ "$BRANCH_NAME" == "main" ]]
then
echo "Production stuff only"
fi
Run Code Online (Sandbox Code Playgroud)
除了为每个环境构建不同的项目之外,我还建议为每个域或应用程序构建一个项目。这意味着项目中存储的数据之间存在逻辑分离。然后,您可以将所有开发项目分组到名为development等的文件夹下。这些文件夹是组织甚至另一个文件夹的一部分。
这种逻辑分组是使用 GCP 的真正好处之一,我发现它非常方便。Azure 的资源组和订阅的结构有些类似。AWS也有资源组结构。
| 归档时间: |
|
| 查看次数: |
5683 次 |
| 最近记录: |