Cloud Build中如何读取文件内容赋值给TAG变量传入docker build命令
Cloud Build 读取文件内容作为Docker构建标签的实现方法
你可以通过Shell变量赋值的方式读取文件内容,再传入Docker构建命令,根据使用场景有两种常用实现方案:
方案1:单步骤完成读取与构建(单构建步骤场景推荐)
直接将Docker构建步骤的入口改为Bash,在同一个Shell上下文内先完成文件读取赋值,再执行构建命令,不需要额外处理跨步骤传值:
- name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: - '-c' - | TAG=$(cat /workspace/tagvalue.txt) docker build -t gcr.io/$PROJECT_ID/${_IMAGE_NAME}:${TAG} -f ${_DOCKER_FILE} .
方案2:跨步骤共享TAG值(多步骤复用TAG场景推荐)
如果后续多个构建步骤都需要用到这个TAG值,可以先在前置步骤把读取到的值写入共享环境变量文件,后续步骤加载该文件即可使用变量:
- 新增前置步骤读取文件内容,写入共享的
build.env文件(Cloud Build所有步骤默认共享/workspace目录,文件可跨步骤访问)
- name: 'bash' # 任意自带Bash的镜像均可,比如gcr.io/cloud-builders/git、alpine等 entrypoint: 'bash' args: - '-c' - | echo "TAG=$(cat /workspace/tagvalue.txt | tr -d '\n')" > /workspace/build.env
这里加
tr -d '\n'是为了去掉文件末尾自带的换行符,避免标签值带非法换行字符
- 在Docker构建步骤中先加载环境变量文件,再执行构建
- name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: - '-c' - | source /workspace/build.env docker build -t gcr.io/$PROJECT_ID/${_IMAGE_NAME}:${TAG} -f ${_DOCKER_FILE} .
注意事项
- 不要尝试在Cloud Build顶层的
substitutions自定义替换变量中直接读取文件内容:替换变量的赋值发生在构建启动前的触发阶段,此时构建工作目录/workspace还未挂载,无法读取到目标文件。 - 读取文件内容时建议过滤掉换行、空格等特殊字符,避免生成非法的Docker镜像标签。
内容的提问来源于stack exchange,提问作者kavya
相关产品推荐
相关产品推荐

