Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: [JENKINS-63284] Add initial Pipeline job support for Groovy properties #47

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

M-r-A
Copy link

@M-r-A M-r-A commented Apr 12, 2021

I want to add support for Pipeline job for Groovy script properties.

Currently, the plugin does not fully work with the Pipeline job: it uses classes that are specific only for the Freestyle job for getting extra data to inject to Groovy binding.

I changed plugin code to deal with Job/Run classes and added a test that demonstrates the result.

With these changes, users will be able to use jenkinsProject Groovy property with the Pipeline job.

Related issues: JENKINS-63284, JENKINS-65235, JENKINS-53554.
Related guide: Writing Pipeline-Compatible Plugins

  • Make sure you are opening from a topic/feature/bugfix branch (right side) and not your master branch!
  • Ensure that the pull request title represents the desired changelog entry
  • Please describe what you did
  • Link to relevant issues in GitHub or Jira
  • Link to relevant pull requests, esp. upstream and downstream changes
  • Ensure you have provided tests - that demonstrates feature works or fixes the issue

List<ParameterDefinition> parameterDefinitions = new ArrayList<>(getProjectParameterDefinitions(project));
for (List<ParameterDefinition> params : getBuildWrapperParameterDefinitions(project).values()) {
// TODO: Update or get rid of getBuildWrapperParameterDefinitions
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kinow Dear maintainers, please help me with this part of the plugin. I'm unsure how we use getBuildWrapperParameterDefinition and how we test that it works.
Do we still need it with all these introspections with BuildWrapper and all?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This isParameterDefinitionOf method is called as a fallback when we cannot find the project of the parameter.

We navigate all the projects in Jenkins, trying to find one that contains the parameter UUID. It is highly inefficient, but was the last resort after getting so many bugs from users with custom plug-ins that were modifying the structure of project <-> parameters (i.e. inserting extra nodes in-between these two).

It should work with pipeline jobs, no?

@@ -134,6 +133,7 @@ protected AbstractScriptableParameter(String name, String description, String ra
String projectName = null;
String projectFullName = null;
if (currentRequest != null) {
// TODO: Check if we really need AbstractItem instead of Job class
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kinow Same for this commentary: why do we use AbstractItem here but then filter with Project class in getHelperParameters()?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From memory, the name or full name may have the project name. Or one of them may contain a folder name. Or a special object name (e.g. another plug-in that provides an AbstractItem.).

In case where the projectName is the name of an AbstractItem that is not a Project, we ignore that as we don't want to put another object instance in the jenkinsProject bound variable.

@c4sh
Copy link

c4sh commented Feb 1, 2022

Is there a reason why this was never finished ?

@jan-stoltman-bolt
Copy link

Hey @M-r-A @kinow would it be possible to finalize this PR? 🙏 This feature would be amazing to have

@kinow
Copy link
Member

kinow commented Mar 25, 2022

Hey @M-r-A @kinow would it be possible to finalize this PR? pray This feature would be amazing to have

Sorry, a bit strapped for time (life, work, being sponsored to work on other OSS projects, etc.)

Maybe someone could test the current PR with pipelines, and report whether it's working or not? That could help myself or another dev when re-starting the work on this code.

Cheers
Bruno

@dimmel82
Copy link

Hi @kinow,
I merged the PR to the master branch in a local clone and built the plugin. After installing the plugin on Jenkins, I tried to define a ChoiceParameter (also tried with lower-case and camel-case) in a declarative pipeline's "parameters" block but got the following error which shows that only specific types of parameters are allowed:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 286: Invalid parameter type "ChoiceParameter". Valid parameter types: [booleanParam, choice, credentials, extendedChoice, file, text, password, run, string] @ line 286, column 5.
       ChoiceParameter name: 'ENVIRONMENT'
       ^

Maybe additional development is required in other plugins to support this feature.
Please let me know if my approach with the "parameters" block was the indented one or if should test in a different way.

Thanks,
Dimitris

@kinow
Copy link
Member

kinow commented Aug 17, 2022

Thanks a lot for testing and reporting @dimmel82!

@JinPengGeng
Copy link

Is there an update? I have been looking for this feature for a long time

@asetty
Copy link

asetty commented Jul 27, 2023

Pinging for updates

@mvanini
Copy link

mvanini commented Dec 17, 2023

Hi @kinow, I merged the PR to the master branch in a local clone and built the plugin. After installing the plugin on Jenkins, I tried to define a ChoiceParameter (also tried with lower-case and camel-case) in a declarative pipeline's "parameters" block but got the following error which shows that only specific types of parameters are allowed:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 286: Invalid parameter type "ChoiceParameter". Valid parameter types: [booleanParam, choice, credentials, extendedChoice, file, text, password, run, string] @ line 286, column 5.
       ChoiceParameter name: 'ENVIRONMENT'
       ^

Maybe additional development is required in other plugins to support this feature. Please let me know if my approach with the "parameters" block was the indented one or if should test in a different way.

Thanks, Dimitris

This PR is only for having access to Jenkins API for pipeline job types from groovy code used in the parameter's script.
Definition of the active-choices parameters in declarative way are not implemented but sure it would be an amazing feature to have.
We used mixed scripted/declarative pipeline to define this type of parameters. Is not so cool but it works.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants