How can I use Jenkins Sidebar Link Plugin in pipeline step? How can I use Jenkins Sidebar Link Plugin in pipeline step? jenkins jenkins

How can I use Jenkins Sidebar Link Plugin in pipeline step?


To find out how to do something in Declarative Pipeline, you can use the Directive Generator at http://JENKINS_URL/directive-generator/. This provides a user interface similar to the Job Configuration. However upon selecting "options" -> "Add" -> "sidebarLinks" -> fill in fields -> "Generate", nothing will be generated due to an internal server error.

The following Declarative Pipeline syntax works for a single job:

pipeline {    agent any        options {        sidebarLinks([            [displayName: 'Side Bar Example', iconFileName: '', urlName: 'http://example.com']        ])    }    stages {        stage('Hello') {            steps {                echo 'Hello World'            }        }    }}

However, you mentioned that you want to reuse these links in different jobs through use of a Shared Pipeline Library. Unfortunately, Shared Pipeline Libraries can not modify the options section of a Declarative Pipeline, with the exception of generating your entire pipeline { } in a single def call().

Fortunately, Scripted Pipeline can override that part of a configuration. Using the Snippet Generator at http://JENKINS_URL/pipeline-syntax/, you can generate the following bit of code that you can put in a Shared Pipeline Library, e.g. in var/mySidebar.groovy:

def call() {    properties([        sidebarLinks([[            displayName: 'My fancy sidebar url', iconFileName: '', urlName: 'https://example.com'        ]])    ])}

You can then use that in either a scripted pipeline:

library('my-sidebar')mySidebar()node() {    stage('Hello') {        sh 'echo "Hello World!"'    }}

Or a script block of a Declarative Pipeline:

library('my-sidebar')script {    mySidebarScripted()}pipeline {    agent any        stages {        stage('Hello') {            steps {                echo 'Hello World'            }        }    }}


Another available option is to use the classLoader to load the plugin and add a new link as an Action to the build or project level.
In your shared library file you can have something like this:

def addSideBarLink(String url, String displayName, String relativeIconPath, Boolean linkToBuild = true) {   assert url : "The URL parameter cannot be empty"   assert displayName : "The Display Name parameter cannot be empty"   def linkActionClass = this.class.classLoader.loadClass("hudson.plugins.sidebar_link.LinkAction")   def run = linkToBuild ? currentBuild.rawBuild : currentBuild.rawBuild.getParent()   def action = linkActionClass.newInstance(url, displayName, relativeIconPath)   println "Adding sidebar link to '${url}' at the ${linkToBuild ? 'build' : 'job'} level"   run.getActions().add(action)}

Than call it from a scripted pipeline or a script block in a declarative pipeline as follows:

pipeline {    agent any    stages {        stage('Hello') {            steps {                script {                    // assuming functions resides inside utils.groovy                    utils.addSideBarLink(...)                }            }        }    }}


Have you wrap it in properties ?

job("Sidebar Link Job 2") {    description()    keepDependencies(false)    disabled(false)    concurrentBuild(false)    properties {        sidebarLinks {            link('https://google.com/', 'Google', 'userContent/favicon.ico')        }    }}

For references you can look at this https://jenkinsci.github.io/job-dsl-plugin/#path/freeStyleJob-properties-sidebarLinks

I've tried it myself and it is successfully generated the sidebarlinksenter image description here

see google link in my sidebar