首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向cloudbuild.yaml添加小bash脚本

向cloudbuild.yaml添加小bash脚本
EN

Stack Overflow用户
提问于 2021-05-14 20:44:54
回答 2查看 2.1K关注 0票数 0

我有一个用于google的cloudbuild.yaml文件。我想使用简单的bash脚本version (或任何其他方式)从package.json中获取$(node -p -e "require('./package.json').version")。如何将此添加到我的cloudbuild.yaml文件中?

我试着把脚本放到substitution中,但没有成功。

代码语言:javascript
复制
# gcloud submit   --substitutions=_VERSION="1.1.0"

steps:
  # build the container image
  - name: "gcr.io/cloud-builders/docker"
    args: ["build", "-t", "gcr.io/${_PROJECT_ID}/${_IMAGE}:${_VERSION}", "."]
  # push the container image to Container Registry
  - name: "gcr.io/cloud-builders/docker"
    args: ["push", "gcr.io/${_PROJECT_ID}/${_IMAGE}:${_VERSION}"]
  # build the container image
  - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
    entrypoint: gcloud
    args:
      [
        "run",
        "deploy",
        "${_SERVICE_NAME}",
        "--project",
        "${_PROJECT_ID}",
        "--image",
        "gcr.io/${_PROJECT_ID}/${_IMAGE}:${_VERSION}",
        "--platform",
        "managed",
        "--allow-unauthenticated",
        "--region",
        "${_REGION}",
        "--set-env-vars",
        "${_ENV_VARS}",
        "--ingress",
        "internal-and-cloud-load-balancing",
        "--quiet",
      ]
images:
  - gcr.io/${_PROJECT_ID}/${_IMAGE}

substitutions:
  _REGION: us-east1
  _PROJECT_ID: my-dev
  _SERVICE_NAME: my-client
  _IMAGE: my-client
  _VERSION: $(node -p -e "require('./package.json').version")
  _ENV_VARS: "APP_ENV=dev"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-15 13:58:54

根据纪尧姆的回答,您可以使用带有两个$$的bash脚本,而不是像$$(node -p -e "require('./package.json').version")那样的1 $。但是,,如果您试图使用的命令不可用(node将不可用),最好将其从上面的步骤中生成的文件中提取出来,如纪尧姆的回答中所示:

代码语言:javascript
复制
- name: "gcr.io/cloud-builders/docker"
    entrypoint: bash
    args: 
      - -c
      - docker build -t gcr.io/${_PROJECT_ID}/${_IMAGE}:$$(cat ./package_version) .
票数 0
EN

Stack Overflow用户

发布于 2021-05-15 09:50:13

这是云构建的坏方面之一。您不能将变量从一个步骤传递到另一个步骤。在两步之间只保留/workspace。替换变量仅为静态变量(预定义或在管道运行时设置)。

这里的解决办法不是那么容易。

  • 您需要添加一个步骤来获取版本并将其写入文件

中。

代码语言:javascript
复制
- name: 'node'
  entrypoint: bash
  args:
    - -c
    - node -p -e "require('./package.json').version" > /workspace/node_version

然后

  • 在您的步骤中使用它,就像

那样

代码语言:javascript
复制
- name: "gcr.io/cloud-builders/docker"
  entrypoint: bash
  args: 
    - -c
    - |
       VERSION=$${cat /workspace/node_version}
       docker build -t gcr.io/${_PROJECT_ID}/${_IMAGE}:$${VERSION} .

双美元$$表示它是一个linux命令,而不是一个Cloud变量

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67540751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档