Search code examples
jenkinsjenkins-pipelinejenkins-pluginsjenkins-groovyjenkins-job-dsl

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


I'm working on this plugin https://plugins.jenkins.io/sidebar-link/ to add a link in jenkins side bar. This plugin works with jenkins project configuration. Now I'm trying to add a pipeline step to call this plugin.

I already try lines of code below but it's not working

sidebarLinks {
            link("my_url", "the title", 'image path')
        }

I already read thread on this but no accepted responses found. I think that jenkins plugin are not well documented.

Does anybody know how can I use it with pipeline?

Updated

I'm using a shared library written in Groovy. This library holds all pipeline methods.

@Library('xxxx@v1.0.0') _
pipeline {
   stages {
      ...
      stage('Add side link') {
            steps {
                addLink()
            }
        }
   }
}

Shared library side, I've an addLink.groovy file.

def call(){

    properties {
        sidebarLinks {
            link("url", 'Title', 'icon_path')
        }
    }
}

I've got error below :

ERROR: <- : java.lang.IllegalArgumentException: Could not instantiate {properties=org.jenkinsci.plugins.workflow.cps.CpsClosure2@6b5322b} for JobPropertyStep


Solution

  • 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'
                }
            }
        }
    }