如何根据脚本参数包含函数表达式 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])}"
}
}
}
}
我有一个 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])}"
}
}
}
}