定义一个变量,并在定义过程中出现问题时将其设置为默认值。

76

我在我的 build.gradle 中有以下代码:

version.properties 文件中的内容如下:

buildVersion=1.2.3
  • $v 变量在 Gradle 构建期间的值为: 1.2.3
  • Jenkins 构建中变量 $artifactoryVersion 的值为: 1.2.3.1, 1.2.3.2, 1.2.3.x ... 等等,其中第四位数字是 Jenkins BUILD_NUMBER,在 Jenkins 构建期间可用于 Gradle 构建脚本。

但是,当我在没有设置环境变量的桌面上运行此 build.gradle 时,会出现错误,提示 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"
}
3个回答

153

你所需要的只是一些常规的Java/Groovy代码:

def jenkinsBuild = System.getenv("BUILD_NUMBER") ?: "0"
上面的代码使用了Groovy中的"elvis"运算符,是下面使用Java三元运算符的代码的简写形式:
def buildNumber = System.getenv("BUILD_NUMBER")
def jenkinsBuild = buildNumber != null ? buildNumber : "0"

30

这是使用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");
    }
}

1
使用Env-Inject插件,您可以获取和设置构建参数。
例如,在“将环境变量注入到构建过程中”下,添加一个Groovy脚本,如下所示:
def paramsMap  = [:]
def build = Thread.currentThread().executable
def my_var = build.getEnvVars()["MY_PARAM"]

if (!my_var) paramsMap.put("MY_PARAM", "default value")

// Return parameters map 
out.println("Injecting parameters:\n" + paramsMap)
return paramsMap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接