Gradle 无法从 AWS CodePipeline 获取 CODEBUILD_SRC_DIR_source1 变量

Gradle fails to get CODEBUILD_SRC_DIR_source1 variable from AWS CodePipeline

我正在尝试在我的 CodePipeline 构建中使用多个 CodeCommit 源。我在 CodeBuild 的 CodeCommit 中定义了一个指向项目的辅助源,并为其分配了 "sec_proj" 标识符。在我的主项目中,我有一个 Gradle 构建,其中包含以下代码

    copy {
        from System.getProperty("CODEBUILD_SRC_DIR_sec_proj", CODEBUILD_SRC_DIR_sec_proj)
        into "$buildDir/sec_proj"
    }

当我在本地环境中定义 CODEBUILD_SRC_DIR_sec_proj 时,所有 运行 都按预期进行,第二个项目的文件被复制并完成构建。但是,当我尝试在我的管道中 运行 它时,出现以下错误:

17:50:26.092 [ERROR] 
[org.gradle.internal.buildevents.BuildExceptionReporter] Caused by: 
groovy.lang.MissingPropertyException: Could not get unknown property 
'CODEBUILD_SRC_DIR_sec_proj' for object of type 
org.gradle.api.internal.file.copy.CopySpecWrapper_Decorated.

很明显我的 gradle 进程没有这个变量可用。 我试图在 buildspec.yml

中使用以下语法强制执行它
phases:
  build:
    commands:
      - ./gradlew -i -d -S build -DCODEBUILD_SRC_DIR_sec_proj=$CODEBUILD_SRC_DIR_sec_proj

它失败并显示相同的消息。而且根据文档

Your primary source is defined under the source attribute. All other sources are called secondary sources and appear under secondarySources. All secondary sources are installed in their own directory. This directory is stored in the built-in environment variable CODEBUILD_SRC_DIR_sourceIdentifer.

我好像漏了什么?

这是解决方案。结果 CODEBUILD_SRC_DIR_sec_proj 在那里,但 System.getProperty("CODEBUILD_SRC_DIR_sec_proj", CODEBUILD_SRC_DIR_sec_proj) 不会得到它。但是 System.getProperties().getProperty("CODEBUILD_SRC_DIR_sec_proj") 会。然后它就像一个魅力

查看您的代码:

System.getProperty("CODEBUILD_SRC_DIR_sec_proj", CODEBUILD_SRC_DIR_sec_proj)

和方法的签名:

System.getProperty(String key, String defaultValue)

我认为错误消息实际上是返回到可能未定义的变量 CODEBUILD_SRC_DIR_sec_proj。 (也许你已经在别处定义了它,我不确定)

我会简单地推荐:

copy {
    from System.getProperty("CODEBUILD_SRC_DIR_sec_proj")
    into "$buildDir/sec_proj"
}