我们有多个作业,“主要”,“次要”和“备份”-所有作业都必须具有相同的参数(发行版,即“ 1.5.1”)-大约有15个。
parameters{
string(name: 'service1', defaultValue: 'NA', description: 'Verison' )
string(name: 'service2', defaultValue: 'NA', description: 'Verison' )
string(name: 'service3', defaultValue: 'NA', description: 'Verison' )
}
我的管道如下所示,如何在所有3个构建作业中都使用相同的上述参数,而不必三遍指定参数?
//This will kick of the three pipeline scripts required to do a release in PROD
pipeline {
agent any
stages
{
stage('Invoke pipeline primary') {
steps {
build job: 'primary'
}
}
stage('Invoke pipeline secondary') {
steps {
build job: 'secondary'
}
}
stage('backup') {
steps {
build job: 'backup'
}
}
}
}
我已经找到了答案here,但这似乎使用了时髦的语法,而且我不确定是否也可以在上面的声明性pipline中使用它?
尝试时,我得到以下信息:
Running on Jenkins in PipelineTest
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Invoke pipeline primary)
[Pipeline] build
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: No item named null found
Finished: FAILURE
当我自己运行此主管道时,它会按预期运行。
谢谢!
编辑:尝试了@hakamairi提供的答案,但得到了以下答案,我对DSL不太满意,但是尝试了几种不同的变体,但是没有一个可行的/都在期望ParamValue周围出现类似类型的错误。
//This will kick of the three pipeline scripts required to do a release in PROD
pipeline {
agent any
parameters{
string(name: 'service1', defaultValue: 'NA', description: 'Version' )
string(name: 'service2', defaultValue: 'NA', description: 'Version' )
}
stages
{
stage('Invoke pipeline PrimaryRelease') {
steps {
build job: 'PythonBuildTest', parameters: params
}
}
}
}
错误:
java.lang.UnsupportedOperationException:必须指定$ class和 接口java.util.List的实现 org.jenkinsci.plugins.structs.describable.DescribableModel.resolveClass(DescribableModel.java:503) 在 org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:402) 在 org.jenkinsci.plugins.structs.describable.DescribableModel.injectSetters(DescribableModel.java:361) 在 org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:284) 在 org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:201) 在org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:208) 在org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:153) 在 org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:122) 在sun.reflect.GeneratedMethodAccessor956.invoke(未知来源) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:498)在 org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) 在groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)处 groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)在 groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)在 org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42) 在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 在org.kohsuke.groovy.sandbox.impl.Checker $ 1.call(Checker.java:157) 在 org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23) 在 org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:133) 在org.kohsuke.groovy.sandbox.impl.Checker $ 1.call(Checker.java:155) 在 org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:159) 在 org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:129) 在 com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17) 原因:java.lang.IllegalArgumentException:无法实例化 {job = PythonBuildTest,参数= {service1 = NA,
答案 0 :(得分:0)
我认为您可以在管道级别使用这些参数,并且只需在df = pd.DataFrame({
'A': [2,3,4,2,6],
})
df['flag'] = df['A'].isin(df['A'].iloc[[0, -1]]).astype(int)
#alternative
#df['flag'] = np.where(df['A'].isin(df['A'].iloc[[0, -1]]), 1, 0)
df.iloc[[0, -1], df.columns.get_loc('flag')] = 0
print (df)
A flag
0 2 0
1 3 0
2 4 0
3 2 1
4 6 0
调用中传递这些参数即可。
build
答案 1 :(得分:0)
我主要使用脚本化方法,如下所示:
def all_params = [
string(name: 'service1', defaultValue: 'NA', description: 'Version' ),
string(name: 'service2', defaultValue: 'NA', description: 'Version' ),
string(name: 'service3', defaultValue: 'NA', description: 'Version' ),
]
properties([parameters(all_params)])
应该可以将以上代码包装在script
块中,并在声明性管道中使用它。