首页 > 解决方案 > AWS 代码构建:CI 作业期间未找到环境变量

问题描述

我通常根据构建它们的提交来命名工件。基于此文档,是我在AWS Code Build中寻找的CODEBUILD_WEBHOOK_PREV_COMMIT

这里是buildspec.yml

phases:
  install: 
    commands:
      - apt-get update -y
  build:
    commands:
      - export $CODEBUILD_WEBHOOK_PREV_COMMIT
      - echo Entered the build phase...
      - echo Build started on `date`
      - mvn clean install -Dmaven.test.skip=true
      - for f in ./target/*.car;do mv -- "$f" $(echo $f | sed -E "s/.car$/_${CODEBUILD_WEBHOOK_PREV_COMMIT}.car/") ;done

artifacts:
  files:
    - ./target/*.car

构建工作,但提交未显示在最终.car名称中。我想了解为什么。

假设 n°1:VARs 需要明确来源

我尝试了以下但没有多大成功

env: 
  variable: 
    - COMMIT="${CODEBUILD_WEBHOOK_PREV_COMMIT}"

phases:
  install: 
    commands:
      - apt-get update -y
  build:
    commands:
      - echo Entered the build phase...
      - echo Build started on `date`
      - mvn clean install -Dmaven.test.skip=true
      - carpath=./*_CA/target/*.car
      - for f in $carpath;do mv -- "$f" $(echo $f | sed -E "s/.car$/_${COMMIT}.car/") ;done

VARs 仅适用于 AWS 默认构建容器

我使用的是Maven 的官方镜像 maven:3.6.3-jdk-8,而不是 Amazon 的通用构建镜像。s是否VAR可用于自定义图像?我找不到任何明确的迹象表明它们不是。

标签: amazon-web-servicescontinuous-integrationenvironment-variablesaws-codepipelineaws-codecommit

解决方案


我整个下午都为此迷失了方向,对于任何遇到同样问题的人来说,这就是我解决它的方法:

首先,我输入printenv了命令来查看发生了什么,并且$CODEBUILD_WEBHOOK_PREV_COMMITenv 变量完全丢失了。但你可以改用$CODEBUILD_RESOLVED_SOURCE_VERSION它,它就在那里!


推荐阅读