-
Improvement
-
Resolution: Fixed
-
Major
-
None
-
Jenkins: 2.46.2. ElectricFlow Plugin: 1.1.2
-
Powered by SuggestiMate
I'm trying to call Run Pipeline in ElectricFlow from a Jenkins pipeline but cannot get it to work. It seems it's not supported by the plugin.
Pipeline code:
step([$class: 'ElectricFlowPipelinePublisher', configuration: 'MyEFConf', projectName : 'MyProject', pipelineName : 'MyPipeline', addParam : '{"pipeline":[{"pipelineName":"MyPipeline","parameters":[]}]}' ])
[JENKINS-44084] Pipeline support for electricflow plugin
I think you misunderstood me. I don't think calling the EF plugin steps from a Jenkins pipeline is supported. If it is can you please provide syntax examples. There are no examples on the plugin docs page.
The EF pipeline is never triggered so the EF config is irrelevant for this bug. It works OK when I run in a Freestyle Jenkins job.
Jenkins Stack trace
java.lang.IllegalArgumentException: Could not instantiate {delegate={$class=ElectricFlowPipelinePublisher, configuration=STA-EF, projectName=Platform-Docker, pipelineName=Build-admmarphi-NOSS-Docker-RE, addParam={"pipeline":[ {"pipelineName":"Build-admmarphi-NOSS-Docker-RE","parameters":[]} ]}}} for CoreStep(delegate: SimpleBuildStep{AnalysisPublisher(canComputeNew?: boolean, canResolveRelativePaths?: boolean, canRunOnFailed?: boolean, checkStyleActivated?: boolean, defaultEncoding?: String, dryActivated?: boolean, failedNewAll?: String, failedNewHigh?: String, failedNewLow?: String, failedNewNormal?: String, failedTotalAll?: String, failedTotalHigh?: String, failedTotalLow?: String, failedTotalNormal?: String, findBugsActivated?: boolean, healthy?: String, openTasksActivated?: boolean, pmdActivated?: boolean, shouldDetectModules?: boolean, thresholdLimit?: String, unHealthy?: String, unstableNewAll?: String, unstableNewHigh?: String, unstableNewLow?: String, unstableNewNormal?: String, unstableTotalAll?: String, unstableTotalHigh?: String, unstableTotalLow?: String, unstableTotalNormal?: String, useDeltaValues?: boolean, usePreviousBuildAsReference?: boolean, useStableBuildAsReference?: boolean, warningsActivated?: boolean) | AnsibleAdHocCommandBuilder(hostPattern: String, inventory: Inventory {InventoryContent(content: String, dynamic: boolean) | InventoryPath(path: String)} , module: String, command: String, additionalParameters?: String, ansibleName?: String, colorizedOutput?: boolean, credentialsId?: String, extraVars?: ExtraVar(hidden?: boolean, key?: String, value?: String)[], forks?: int, hostKeyChecking?: boolean, sudo?: boolean, sudoUser?: String, unbufferedOutput?: boolean) | AnsiblePlaybookBuilder(playbook: String, inventory: Inventory {InventoryContent(content: String, dynamic: boolean) | InventoryPath(path: String)} , additionalParameters?: String, ansibleName?: String, colorizedOutput?: boolean, credentialsId?: String, extraVars?: ExtraVar(hidden?: boolean, key?: String, value?: String)[], forks?: int, hostKeyChecking?: boolean, limit?: String, skippedTags?: String, startAtTask?: String, sudo?: boolean, sudoUser?: String, tags?: String, unbufferedOutput?: boolean) | ArtifactArchiver(artifacts: String, allowEmptyArchive?: boolean, caseSensitive?: boolean, defaultExcludes?: boolean, excludes?: String, fingerprint?: boolean, onlyIfSuccessful?: boolean) | ClaimPublisher() | CucumberReportPublisher(jsonReportDirectory: String, fileIncludePattern: String, fileExcludePattern: String, trendsLimit: int, failedStepsNumber: int, skippedStepsNumber: int, pendingStepsNumber: int, undefinedStepsNumber: int, failedScenariosNumber: int, failedFeaturesNumber: int, buildStatus: String, parallelTesting: boolean) | CucumberTestResultArchiver(testResults: String, ignoreBadSteps?: boolean) | ExecuteDslScripts(additionalClasspath?: String, failOnMissingPlugin?: boolean, ignoreExisting?: boolean, ignoreMissingFiles?: boolean, lookupStrategy?: LookupStrategy[JENKINS_ROOT, SEED_JOB], removedJobAction?: RemovedJobAction[IGNORE, DISABLE, DELETE], removedViewAction?: RemovedViewAction[IGNORE, DELETE], sandbox?: boolean, scriptText?: String, targets?: String, unstableOnDeprecation?: boolean, useScriptText?: boolean) | Fingerprinter(targets: String) | JUnitResultArchiver(testResults: String, allowEmptyResults?: boolean, healthScaleFactor?: double, keepLongStdio?: boolean, testDataPublishers?: TestDataPublisher {ClaimTestDataPublisher() | StabilityTestDataPublisher()} []) | JavadocArchiver(javadocDir: String, keepAll: boolean) | LogParserPublisher(useProjectRule: boolean, projectRulePath: String, parsingRulesPath: String, failBuildOnError?: boolean, showGraphs?: boolean, unstableOnWarning?: boolean) | Mailer(recipients: String, notifyEveryUnstableBuild: boolean, sendToIndividuals: boolean) | MsBuildSQRunnerBegin(msBuildScannerInstallationName: String, sonarInstallationName: String, projectKey: String, projectName: String, projectVersion: String, additionalArguments: String) | MsBuildSQRunnerEnd() | OpenShiftBuildCanceller(apiURL: String, namespace: String, authToken: String, verbose: String, bldCfg: String) | OpenShiftDeployCanceller(apiURL: String, depCfg: String, namespace: String, authToken: String, verbose: String) | OpenShiftScalerPostAction(apiURL: String, depCfg: String, namespace: String, replicaCount: String, authToken: String, verbose: String, verifyReplicaCount: String, waitTime: String, waitUnit: String) | PerformancePublisher(sourceDataFiles?: String, errorFailedThreshold: int, errorUnstableThreshold: int, errorUnstableResponseTimeThreshold: String, relativeFailedThresholdPositive: double, relativeFailedThresholdNegative: double, relativeUnstableThresholdPositive: double, relativeUnstableThresholdNegative: double, nthBuildNumber: int, modePerformancePerTestCase: boolean, configType: String, modeOfThreshold: boolean, failBuildIfNoResultFile: boolean, compareBuildPrevious: boolean, modeThroughput: boolean, parsers: PerformanceReportParser {IagoParser(glob: String) | JMeterCsvParser(glob: String) | JMeterParser(glob: String) | JUnitParser(glob: String) | JmeterSummarizerParser(glob: String) | TaurusParser(glob: String) | WrkSummarizerParser(glob: String)} [], constraints?: java.lang.UnsupportedOperationException: do not know how to categorize attributes of type ? extends hudson.plugins.performance.constraints.AbstractConstraint[], ignoreFailedBuilds?: boolean, ignoreUnstableBuilds?: boolean, modeEvaluation?: boolean, persistConstraintLog?: boolean) | RpmManagerBuilder(repositoryId: String, rpmFilesPattern: String, skipPublish: boolean, skipDependencyCheck: boolean, skipUpload: boolean, dynamicRpmSearching: boolean) | SonarRunnerBuilder(installationName: String, sonarScannerName: String, project: String, properties: String, javaOpts: String, jdk: String, task: String, additionalArguments: String) | StashNotifier(stashServerBaseUrl: String, credentialsId: String, ignoreUnverifiedSSLPeer: boolean, commitSha1: String, includeBuildNumberInKey: boolean, projectKey: String, prependParentProjectKey: boolean, disableInprogressNotification: boolean) | WarningsPublisher(canComputeNew?: boolean, canResolveRelativePaths?: boolean, canRunOnFailed?: boolean, consoleParsers?: ConsoleParser(parserName: String)[], defaultEncoding?: String, excludePattern?: String, failedNewAll?: String, failedNewHigh?: String, failedNewLow?: String, failedNewNormal?: String, failedTotalAll?: String, failedTotalHigh?: String, failedTotalLow?: String, failedTotalNormal?: String, healthy?: String, includePattern?: String, messagesPattern?: String, parserConfigurations?: ParserConfiguration(pattern: String, parserName: String)[], shouldDetectModules?: boolean, thresholdLimit?: String, unHealthy?: String, unstableNewAll?: String, unstableNewHigh?: String, unstableNewLow?: String, unstableNewNormal?: String, unstableTotalAll?: String, unstableTotalHigh?: String, unstableTotalLow?: String, unstableTotalNormal?: String, useDeltaValues?: boolean, usePreviousBuildAsReference?: boolean, useStableBuildAsReference?: boolean) | WsCleanup(cleanWhenAborted?: boolean, cleanWhenFailure?: boolean, cleanWhenNotBuilt?: boolean, cleanWhenSuccess?: boolean, cleanWhenUnstable?: boolean, cleanupMatrixParent?: boolean, deleteDirs?: boolean, externalDelete?: String, notFailBuild?: boolean, patterns?: Pattern(pattern: String, type: PatternType[INCLUDE, EXCLUDE])[], skipWhenFailed?(deprecated): boolean) | com.openshift.jenkins.plugins.pipeline.OpenShiftBuildVerifier~OpenShiftBuildVerifier(apiURL: String, bldCfg: String, namespace: String, authToken: String, verbose: String, checkForTriggeredDeployments: String, waitTime: String, waitUnit: String) | com.openshift.jenkins.plugins.pipeline.OpenShiftBuilder~OpenShiftBuilder(apiURL: String, bldCfg: String, namespace: String, env: NameValuePair(name: String, value: String)[], authToken: String, verbose: String, commitID: String, buildName: String, showBuildLogs: String, checkForTriggeredDeployments: String, waitTime: String, waitUnit: String) | com.openshift.jenkins.plugins.pipeline.OpenShiftCreator~OpenShiftCreator(apiURL: String, namespace: String, authToken: String, verbose: String, jsonyaml: String) | com.openshift.jenkins.plugins.pipeline.OpenShiftDeleterJsonYaml~OpenShiftDeleterJsonYaml(apiURL: String, namespace: String, authToken: String, verbose: String, jsonyaml: String) | com.openshift.jenkins.plugins.pipeline.OpenShiftDeleterLabels~OpenShiftDeleterLabels(apiURL: String, namespace: String, authToken: String, verbose: String, types: String, keys: String, values: String) | com.openshift.jenkins.plugins.pipeline.OpenShiftDeleterList~OpenShiftDeleterList(apiURL: String, namespace: String, authToken: String, verbose: String, types: String, keys: String) | com.openshift.jenkins.plugins.pipeline.OpenShiftDeployer~OpenShiftDeployer(apiURL: String, depCfg: String, namespace: String, authToken: String, verbose: String, waitTime: String, waitUnit: String) | com.openshift.jenkins.plugins.pipeline.OpenShiftDeploymentVerifier~OpenShiftDeploymentVerifier(apiURL: String, depCfg: String, namespace: String, replicaCount: String, authToken: String, verbose: String, verifyReplicaCount: String, waitTime: String, waitUnit: String) | com.openshift.jenkins.plugins.pipeline.OpenShiftExec~OpenShiftExec(apiURL: String, namespace: String, authToken: String, verbose: String, pod: String, container: String, command: String, arguments: Argument(value: String)[], waitTime: String, waitUnit: String) | com.openshift.jenkins.plugins.pipeline.OpenShiftImageTagger~OpenShiftImageTagger(apiURL: String, testTag: String, prodTag: String, namespace: String, authToken: String, verbose: String, testStream: String, prodStream: String, destinationNamespace: String, destinationAuthToken: String, alias: String) | com.openshift.jenkins.plugins.pipeline.OpenShiftScaler~OpenShiftScaler(apiURL: String, depCfg: String, namespace: String, replicaCount: String, authToken: String, verbose: String, verifyReplicaCount: String, waitTime: String, waitUnit: String) | com.openshift.jenkins.plugins.pipeline.OpenShiftServiceVerifier~OpenShiftServiceVerifier(apiURL: String, svcName: String, namespace: String, authToken: String, verbose: String) | com.openshift.jenkins.plugins.pipeline.dsl.OpenShiftBuildVerifier~OpenShiftBuildVerifier(bldCfg: String, apiURL?: String, authToken?: String, checkForTriggeredDeployments?: String, namespace?: String, verbose?: String, waitTime?: String, waitUnit?: String) | com.openshift.jenkins.plugins.pipeline.dsl.OpenShiftBuilder~OpenShiftBuilder(bldCfg: String, apiURL?: String, authToken?: String, buildName?: String, checkForTriggeredDeployments?: String, commitID?: String, env?: NameValuePair(name: String, value: String)[], namespace?: String, showBuildLogs?: String, verbose?: String, waitTime?: String, waitUnit?: String) | com.openshift.jenkins.plugins.pipeline.dsl.OpenShiftCreator~OpenShiftCreator(jsonyaml: String, apiURL?: String, authToken?: String, namespace?: String, verbose?: String) | com.openshift.jenkins.plugins.pipeline.dsl.OpenShiftDeleterJsonYaml~OpenShiftDeleterJsonYaml(jsonyaml: String, apiURL?: String, authToken?: String, namespace?: String, verbose?: String) | com.openshift.jenkins.plugins.pipeline.dsl.OpenShiftDeleterLabels~OpenShiftDeleterLabels(types: String, keys: String, values: String, apiURL?: String, authToken?: String, namespace?: String, verbose?: String) | com.openshift.jenkins.plugins.pipeline.dsl.OpenShiftDeleterList~OpenShiftDeleterList(types: String, keys: String, apiURL?: String, authToken?: String, namespace?: String, verbose?: String) | com.openshift.jenkins.plugins.pipeline.dsl.OpenShiftDeployer~OpenShiftDeployer(depCfg: String, apiURL?: String, authToken?: String, namespace?: String, verbose?: String, waitTime?: String, waitUnit?: String) | com.openshift.jenkins.plugins.pipeline.dsl.OpenShiftDeploymentVerifier~OpenShiftDeploymentVerifier(depCfg: String, apiURL?: String, authToken?: String, namespace?: String, replicaCount?: String, verbose?: String, verifyReplicaCount?: String, waitTime?: String, waitUnit?: String) | com.openshift.jenkins.plugins.pipeline.dsl.OpenShiftExec~OpenShiftExec(pod: String, apiURL?: String, arguments?: Argument(value: String)[], authToken?: String, command?: String, container?: String, namespace?: String, verbose?: String, waitTime?: String, waitUnit?: String) | com.openshift.jenkins.plugins.pipeline.dsl.OpenShiftImageTagger~OpenShiftImageTagger(srcStream: String, srcTag: String, destStream: String, destTag: String, alias?: String, apiURL?: String, authToken?: String, destinationAuthToken?: String, destinationNamespace?: String, namespace?: String, verbose?: String) | com.openshift.jenkins.plugins.pipeline.dsl.OpenShiftScaler~OpenShiftScaler(depCfg: String, replicaCount: String, apiURL?: String, authToken?: String, namespace?: String, verbose?: String, verifyReplicaCount?: String, waitTime?: String, waitUnit?: String) | com.openshift.jenkins.plugins.pipeline.dsl.OpenShiftServiceVerifier~OpenShiftServiceVerifier(svcName: String, apiURL?: String, authToken?: String, namespace?: String, retryCount?: String, verbose?: String)}): java.lang.UnsupportedOperationException: no known implementation of interface jenkins.tasks.SimpleBuildStep is named ElectricFlowPipelinePublisher at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:264) at org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:194) at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:181) at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:126) at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108) at groovy.lang.GroovyObject$invokeMethod.call(Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:151) at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:21) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:115) at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:149) at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:146) at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123) at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123) at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:16) at WorkflowScript.run(WorkflowScript:4) at __cps.transform__(Native Method) at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:57) at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:109) at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72) at com.cloudbees.groovy.cps.impl.CollectionLiteralBlock$ContinuationImpl.dispatch(CollectionLiteralBlock.java:55) at com.cloudbees.groovy.cps.impl.CollectionLiteralBlock$ContinuationImpl.item(CollectionLiteralBlock.java:45) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72) at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21) at com.cloudbees.groovy.cps.Next.step(Next.java:58) at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:154) at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:18) at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:33) at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:30) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108) at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:30) at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:163) at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:324) at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.java:78) at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:236) at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:224) at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:63) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112) at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.UnsupportedOperationException: no known implementation of interface jenkins.tasks.SimpleBuildStep is named ElectricFlowPipelinePublisher at org.jenkinsci.plugins.structs.describable.DescribableModel.resolveClass(DescribableModel.java:425) at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:379) at org.jenkinsci.plugins.structs.describable.DescribableModel.buildArguments(DescribableModel.java:318) at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:259) at org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:194) at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:181) at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:126) at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108) at groovy.lang.GroovyObject$invokeMethod.call(Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:151) at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:21) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:115) at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:149) at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:146) at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123) at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123) at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:16) ... 37 more
I think it's a small job to support pipeline. Basically you just have to implement jenkins.tasks.SimpleBuildStep.
See https://jenkins.io/blog/2016/05/25/update-plugin-for-pipeline/ and https://github.com/jenkinsci/pipeline-plugin/blob/master/DEVGUIDE.md.
Thanks for clarification marcus_phi
Looking into the solution and will provide an ETA soon.
Code changed in jenkins
User: megacritic@gmail.com
Path:
src/main/java/org/jenkinsci/plugins/electricflow/ElectricFlowClient.java
src/main/java/org/jenkinsci/plugins/electricflow/ElectricFlowPipelinePublisher.java
src/main/java/org/jenkinsci/plugins/electricflow/EnvReplacer.java
src/main/java/org/jenkinsci/plugins/electricflow/SummaryTextAction.java
http://jenkins-ci.org/commit/electricflow-plugin/03eeac35e98bc9d54022d5feaf24a99c7af9e024
Log:
JENKINS-44084 Pipeline support for electricflow plugin
Great to see such fast resolution. Please make a release so I can test. And also some docs on how to use it.
marcus_phi please confirm if this has resolved your issues
Run Pipeline is fully supported. Please send us details on steps used to reproduce the issue and logs files or error messages. If possible, share details of the environment.
Send details of pipeline on ElectricFlow system - i.e. does it have right pipeline parameters, etc. Screenshot would be helpful.