[JIRA] (JENKINS-58503) Symbols for Extensions

33 views
Skip to first unread message

aholland@a1dutch.co.uk (JIRA)

unread,
Jul 15, 2019, 5:57:03 PM7/15/19
to jenkinsc...@googlegroups.com
Andrew Holland created an issue
 
Jenkins / Improvement JENKINS-58503
Symbols for Extensions
Issue Type: Improvement Improvement
Assignee: Mark Waite
Components: git-plugin
Created: 2019-07-15 21:56
Environment: 2.176.1
Priority: Minor Minor
Reporter: Andrew Holland

Its currently possible to use the following dsl below when checking out code in a declarative pipeline:

checkout(
  git(
    branches: [[name: '*/master']],
    extensions: [[
      $class: 'RelativeTargetDirectory', 
      relativeTargetDir: 'some-dir'
    ]]
  )
)

 

It would be nice if it could support a richer dsl rather than the current $class syntax for extensions. e.g. something like:

 

checkout(
  git(
    branches: [[name: '*/master']],
    extensions: [[
      relativeTargetDir('some-dir')
    ]]
  )
)

 

This could be something i could help contribute if its acceptable?!

 

Add Comment Add Comment
 
This message was sent by Atlassian Jira (v7.11.2#711002-sha1:fdc329d)

mark.earl.waite@gmail.com (JIRA)

unread,
Jul 15, 2019, 7:28:02 PM7/15/19
to jenkinsc...@googlegroups.com
Mark Waite assigned an issue to Unassigned
Change By: Mark Waite
Assignee: Mark Waite

mark.earl.waite@gmail.com (JIRA)

unread,
Jul 15, 2019, 7:49:03 PM7/15/19
to jenkinsc...@googlegroups.com
Mark Waite commented on Improvement JENKINS-58503
 
Re: Symbols for Extensions

Thanks for offering! I'm happy to consider a pull request that adds symbols for the Pipeline checkout step and the Pipeline syntax section. I'm not willing to consider additions to the git step unless they are also available in the checkout step. The syntax you used in your example with a git step nested inside a checkout step is not a syntax I recognize.

I'm accustomed to the syntax generated by the Snippet Generator inside Jenkins. Today it creates a snippet that looks like this:

checkout(
    [$class: 'GitSCM',
        branches: [[name: 'stable-2.176']],
        extensions: [
            [$class: 'CloneOption', depth: 1, honorRefspec: true, noTags: true, reference: '/var/lib/git/jenkinsci/jenkins.git', shallow: true],
            [$class: 'LocalBranch', localBranch: 'stable-2.176'],
            [$class: 'ChangelogToBranch', options: [compareRemote: 'origin', compareTarget: 'stable-2.164']
            ]
        ],
        gitTool: 'Default',
        userRemoteConfigs: [
            [refspec: '+refs/heads/stable-2.176:refs/remotes/origin/stable-2.176 +refs/heads/stable-2.164:refs/remotes/origin/stable-2.164',
                url: 'https://github.com/jenkinsci/jenkins.git'
            ]
        ]
    ]
)

I'd be interested in a pull request that would make it look something more like this:

checkout(
    [$class: 'GitSCM',
        branches: [[name: 'stable-2.176']],
        extensions: [
            cloneOption(depth: 1, honorRefspec: true, noTags: true, reference: '/var/lib/git/jenkinsci/jenkins.git', shallow: true),
            localBranch('stable-2.176'),
            changelogToBranch('origin', 'stable-2.164')
        ],
        gitTool: 'Default',
        userRemoteConfigs: [
            [refspec: '+refs/heads/stable-2.176:refs/remotes/origin/stable-2.176 +refs/heads/stable-2.164:refs/remotes/origin/stable-2.164',
                url: 'https://github.com/jenkinsci/jenkins.git'
            ]
        ]
    ]
)

Also, the specific example of relativeTargetDir should not be added as a symbol. The dir and ws steps in Pipeline are the preferred way to perform a checkout to a subdirectory of a workspace in a Pipeline. I don't think we should add convenience symbols for extensions that are not intended to be used in Pipeline. The extensions continue to exist and continue to behave as they did before, but we should not encourage further use in Pipelines when there are more general purpose ways to do the same thing.

Reviewing such a pull request would likely need help from Jesse Glick or Andrew Bayer since I'm not deeply experienced in the coding patterns for Pipeline support.

jglick@cloudbees.com (JIRA)

unread,
Jul 16, 2019, 2:31:02 PM7/16/19
to jenkinsc...@googlegroups.com
Jesse Glick commented on Improvement JENKINS-58503
 
Re: Symbols for Extensions

It would be nice if it could support a richer dsl rather than the current $class syntax

See JENKINS-37227. I do not advocate making any changes to the git step; it should be considered a dead end, to be superseded by checkout.

Anyway adding symbols for extensions is orthogonal to that.

mark.earl.waite@gmail.com (JIRA)

unread,
Apr 13, 2020, 10:44:02 PM4/13/20
to jenkinsc...@googlegroups.com
Mark Waite assigned an issue to Mark Waite
 
Jenkins / Improvement JENKINS-58503
Symbols for Extensions
Change By: Mark Waite
Assignee: Mark Waite
This message was sent by Atlassian Jira (v7.13.12#713012-sha1:6e07c38)
Atlassian logo

mark.earl.waite@gmail.com (JIRA)

unread,
Apr 23, 2020, 9:45:02 AM4/23/20
to jenkinsc...@googlegroups.com
Mark Waite updated an issue
Its currently possible to use the following dsl below when checking out code in a declarative pipeline:
{noformat}

checkout(
  git(
    branches: [[name: '*/master']],
    extensions: [[
      $class: 'RelativeTargetDirectory',
      relativeTargetDir: 'some-dir'
    ]]
  )
){noformat}

 

It would be nice if it could support a richer dsl rather than the current $class syntax for extensions. e.g. something like:

 
{noformat}

checkout(
  git(
    branches: [[name: '*/master']],
    extensions: [[
      relativeTargetDir('some-dir')
    ]]
  )
){noformat}

 

This could be something i could help contribute if its acceptable?!

  h2. Implementation Process

* List existing symbol definitions from configuration as code matched with {{$Class}} samples for that symbol (create a checklist of symbols to create)
* Select a symbol and add a test for the symbol as a {{$Class}} form
* Add the symbol
* Add a test that uses the symbol instead of the {{$Class}} form
* Confirm symbol appears in Pipeline syntax generator
* Confirm symbol appears in Configuration as Code
* Confirm configuration as code can still read previous configuration files
* Write help for the symbol, assure it is clear, correct, complete, and visible in the online Pipeline syntax

mark.earl.waite@gmail.com (JIRA)

unread,
Apr 25, 2020, 8:25:03 AM4/25/20
to jenkinsc...@googlegroups.com
h3. Existing Symbol Definitions


||JCasC Parent               ||JCasC Symbol              ||Class Sample                     ||Symbol Sample                     ||
|
Col A0                     |Col A1                     |Col A2                     |                     |
|
git                     |branches                   |branches                     |                     |
|branches                     |name                     |branches: [[name: 'origin/master']]              |branches: [[name: 'origin/master']]                |
|branches                     |name                     |branches: [[name: 'origin/master']]              |branches: [[name: 'origin/master']]                |
|extensions                   |localBranch                |[$class:'LocalBranch', localBranch: '**']        |localBranch('**')                     |

mark.earl.waite@gmail.com (JIRA)

unread,
Apr 25, 2020, 8:25:03 AM4/25/20
to jenkinsc...@googlegroups.com

mark.earl.waite@gmail.com (JIRA)

unread,
Apr 25, 2020, 11:01:03 AM4/25/20
to jenkinsc...@googlegroups.com
|traits                     |localBranchTrait           |N/A (not in a Jenkinsfile)                     |localBranchTrait                     |

mark.earl.waite@gmail.com (JIRA)

unread,
Apr 25, 2020, 10:40:03 PM4/25/20
to jenkinsc...@googlegroups.com
Mark Waite started work on Improvement JENKINS-58503
 
Change By: Mark Waite
Status: Open In Progress

mark.earl.waite@gmail.com (JIRA)

unread,
Apr 26, 2020, 9:26:02 AM4/26/20
to jenkinsc...@googlegroups.com

mark.earl.waite@gmail.com (JIRA)

unread,
May 3, 2020, 1:10:04 PM5/3/20
to jenkinsc...@googlegroups.com
* Write documentation for the symbol in the plugin README so that it is available outside of Jenkins

h3. Existing Symbol Definitions

||JCasC Parent               ||JCasC Symbol              ||Class Sample                     ||Symbol Sample                     ||
|Col A0                     |Col A1                     |Col A2                     |                     |
|git                     |branches                   |branches                     |                     |
|branches                     |name                     |branches: [[name: 'origin/master']]              |branches: [[name: 'origin/master']]                |
|branches                     |name                     |branches: [[name: 'origin/master']]              |branches: [[name: 'origin/master']]                |
|extensions                   |localBranch                |[$class:'LocalBranch', localBranch: '**']        |localBranch('**')                     |
|traits                     |localBranchTrait           |N/A (not in a Jenkinsfile)                     |localBranchTrait                     |

See my [working branch|https://github.com/MarkEWaite/git-plugin/tree/add-localbranch-symbol] for progress.
Reply all
Reply to author
Forward
0 new messages