如果在定义期间出现问题,请定义变量并将其设置为默认值

Aru*_*gal 47 variables null default-value gradle

我的代码中包含以下代码 build.gradle

内容version.properties是:

buildVersion=1.2.3
Run Code Online (Sandbox Code Playgroud)
  • $vGradle构建期间变量的值如下:1.2.3
  • $artifactoryVersionJENKINS构建中变量的值如下:1.2.3.1,1.2.3.2,1.2.3.x ...等等,在Jenkins构建期间,第四位数字是Jenkins BUILD_NUMBER可用于gradle构建脚本.

但是,当我build.gradle在我的桌面上运行这个,我没有可用的BUILD_NUMBER变量或在我的环境变量中设置时,我收到一个错误,说trim()无法在null上工作.(因为BUILD_NUMBER桌面/本地版本没有).

我正试图找到一种方式即

  1. 我应该在我的脚本中编写什么代码,以便如果BUILD_NUMBER不可用,那么代替gradle构建处理失败的错误,它设置jenkinsBuild = "0"(硬编码)否则,选择它在Jenkins构建期间获得的内容.

    例如:在Bash中,我们设置一个变量var1=${BUILD_NUMBER:-"0"},var1如果它可用并设置为一个值,它将设置为有效的Jenkins BUILD编号,否则如果它为NULL,则为var1 = "0".

  2. 我不想让每个开发人员/用户BUILD_NUMBER在一些属性文件中设置它.我想要的是,如果这个变量不存在,那么代码应该放在"0"jenkinsBuilds变量中,并且在桌面构建期间不会出错.我知道在Jenkins构建期间,它工作正常.

// Build Script
def fname = new File( 'version.properties' )
Properties props = new Properties()
props.load( new FileInputStream( fname ) )
def v = props.get( 'buildVersion' )


def env = System.getenv()
def jenkinsBuild = env['BUILD_NUMBER'].trim()
if( jenkinsBuild.length() > 0 ) {
  artifactoryVersion = "$v.$jenkinsBuild"
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*ser 106

您只需要一些常规的Java/Groovy代码:

def jenkinsBuild = System.getenv("BUILD_NUMBER") ?: "0"
Run Code Online (Sandbox Code Playgroud)

上面的代码使用Groovy的"elvis"运算符,并且是以下代码的简写,它使用Java的三元运算符:

def buildNumber = System.getenv("BUILD_NUMBER")
def jenkinsBuild = buildNumber != null ? buildNumber : "0"
Run Code Online (Sandbox Code Playgroud)


小智 12

这是使用 Java 普通对象 (JDK8) 的答案:

public class Sample {

    private String region;
    private String fruit;

    public Sample() {
        region = System.getenv().getOrDefault("REGION", null);
        fruit = System.getenv().getOrDefault("FRUIT", "apple");
    }
}
Run Code Online (Sandbox Code Playgroud)