运行 bash 脚本

本页面介绍如何配置 Cloud Build 以在构建步骤中运行 bash 脚本。如果您是刚接触 Cloud Build,请先阅读快速入门构建配置概览

您可以在构建步骤中运行 bash 脚本以配置多个工作流,其中包括:

  • 在一个构建步骤中运行多个命令。
  • 从文件系统读取。
  • 在重试或条件等逻辑中构建。
  • 输出到日志,例如运行 echo $VARNAME

使用 script 字段

Cloud Build 提供了一个 script 字段,您可以使用该字段指定要在构建步骤中执行的 shell 脚本。script 字段接受单个字符串值。

您可以在字符串值前面添加 shebang,以指定用于解释脚本的 shell。例如,添加 #!/usr/bin/env bash指定 Bash shell。如果您未在脚本字符串前添加 Shebang,Cloud Build 将使用 #!/bin/sh(即基本的 sh shell),而不是 Bash shell。

如果您在 build 步骤中指定了 script,则不能在同一步骤中指定 argsentrypoint

以下代码段演示了 script 字段:

YAML

steps:
- name: 'bash'
  script: |
    #!/usr/bin/env bash
    echo "Hello World"
- name: 'ubuntu'
  script: echo hello
- name: 'python'
  script: |
    #!/usr/bin/env python
    print('hello from python')

JSON

{
  "steps": [
  {
    "name": "bash",
    "script": "#!/usr/bin/env bash echo 'Hello World'"
  },
  {
    "name": "ubuntu",
    "script": "echo hello"
  },
  {
    "name": "python",
    "script": "#!/usr/bin/env python\nprint('hello from python')\n"
  }
  ]
}

将替代变量与 script 字段搭配使用

脚本不直接支持替换,但支持环境变量。您可以将替换项映射到环境变量,既可以一次性自动映射所有替换项,也可以手动定义每个环境变量。

自动映射替换项

  • 在 build 级层。如需自动将所有替换项映射到环境变量(在整个 build 过程中可用),请在 build 级将 automapSubstitutions 设置为 true 作为选项。例如,以下构建配置文件显示了映射到环境变量的用户定义替代变量 $_USER 和默认替代变量 $PROJECT_ID

    YAML

    steps:
    - name: 'ubuntu'
      script: |
        #!/usr/bin/env bash
        echo "Hello $_USER"
    - name: 'ubuntu'
      script: |
        #!/usr/bin/env bash
        echo "Your project ID is $PROJECT_ID"
    options:
      automapSubstitutions: true
    substitutions:
      _USER: "Google Cloud"
    

    JSON

    {
      "steps": [
        {
          "name": "ubuntu",
          "script": "#!/usr/bin/env bash echo 'Hello $_USER'"
        },
        {
          "name": "ubuntu",
          "script": "#!/usr/bin/env bash echo 'Your project ID is $PROJECT_ID'"
        }
      ],
      "options": {
        "automap_substitutions": true
      },
      "substitutions": {
        "_USER": "Google Cloud"
      }
    }
    
  • 在步数级别。如需自动映射所有替换项,并使它们在单个步骤中作为环境变量提供,请在该步骤中将 automapSubstitutions 字段设置为 true。在以下示例中,只有第二个验证步骤会正确显示替换内容,因为只有这一步启用了自动替换映射:

    YAML