如何根据脚本参数包含函数表达式 return 值

How to include a function expression return value based on a script argument

我有一个 Jenkins monorepo 管道用于 Angular 项目使用 nrwl/nx.

我正在 尝试使用 npx nx affected:build 命令为项目应用程序/库构建受影响的更改。

需要根据基于项目名称的动态值填充--baseHref。 在下面的示例中,基于当前 project.name 属性.

APPS_BASE_HREF 枚举值

这个方法好像不行。 函数表达式 returns null,它不解析为枚举器值。 我厌倦了尝试! :)

命令解析为: nx run app2:build:development --baseHref=null

APPS_BASE_HREF = [
  'app1': '/test/app1',
  'app2': '/test/app2'
]

def getBaseHref(project){
    return APPS_BASE_HREF.get(project);
}

pipeline {
    agent any
    environment { }
    options {
        buildDiscarder(logRotator(numToKeepStr: '5', artifactNumToKeepStr: '5'))
    }
    stages {
         stage('build') {
            steps {
                sh "npx nx affected:build --base=origin/develop --base-href ${getBaseHref("{project.name}")}"
            }
        }
    }
}

getBaseHref函数修改为:

def getBaseHref(project){
    return project
}

该命令似乎确实识别了 project 值,并解析为:

nx run app2:build:development --baseHref=app2

有人...有什么建议吗?

由于我没有找到解决上述问题的方法,我决定放弃 sh "npx nx affected:build --base=origin/develop --base-href ${getBaseHref("{project.name}")}" 命令方法。

我只是向 return 受影响的项目添加了一个函数,一个数组,我循环并为其构建一个单独的 sh 命令。通过这次迭代,我能够将正确的变量放在适当的位置。

这种方法的结果是一样的,只是需要一些额外的代码行。不是障碍物。

/**
 * Get list of affected resources.
 *
 * @param target Select the specific target (build | test)
 * @param select Select the subset of the returned json document (e.g., --selected=projects)
 *
 * @return Array List of affected items
 */
def getAffected(String target = 'build', String select = 'tasks.target.project') {
    def affected = sh(script: "npx nx print-affected --base=${LAST_COMMIT} --head=HEAD --plain --target=${target} --select=${select}", returnStdout: true)
    return affected.replaceAll('[\r\n]+', '').split(', ')
}




stage('build') {
    steps {
        script {
            def affected = getAffected()
            for (int i = 0; i < affected.size(); ++i) {
                sh "npx nx run ${affected[i]}:build:production --base-href ${APPS_BASE_HREF.get(affected[i])}"
            }
        }
    }
}