Jenkins @Library load dynamic branch from variable

787 views
Skip to first unread message

Chris Carpenter

unread,
Jan 15, 2020, 4:12:25 PM1/15/20
to Jenkins Users
Is there a way to dynamically load the library from dynamic branch variable like this:

@Library("jenkins-pipeline@${env.BRANCH_NAME}") _

In a multi branch pipeline you have access to the current branch name in the environment variable `BRANCH_NAME`. I'd like to be able to test changes to my pipeline before committing them to master branch potentially breaking builds.

I get the following warning in the console output:

WorkflowScript: @Library value jenkins-pipeline@$env.BRANCH_NAME was not a constant; did you mean to use the library step instead?


Jan Monterrubio

unread,
Jan 15, 2020, 11:59:29 PM1/15/20
to jenkins...@googlegroups.com
Check the loading dynamic libraries portion. It might do what you want. 

--
You received this message because you are subscribed to the Google Groups "Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jenkinsci-use...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/ca65b535-4225-41ef-9497-ac69a10098c2%40googlegroups.com.

Chris Carpenter

unread,
Jan 16, 2020, 8:01:28 AM1/16/20
to Jenkins Users
It seems with this you lose some functionality with code in the `src` directory.

Using classes from the src/ directory is also possible, but trickier. Whereas the @Library annotation prepares the “classpath” of the script prior to compilation, by the time a library step is encountered the script has already been compiled. Therefore you cannot import or otherwise “statically” refer to types from the library.

Is there a way to specify the branch dynamically in the global library scm settings? I see in the legacy git loader There is reference to env variables in the `Branches to build` section.

${ENV_VARIABLE}
It is also possible to use environment variables. In this case the variables are evaluated and the result is used as described above.
E.g. ${TREEISH}, refs/tags/${TAGNAME},... 

Is this able to load the branch based on the current multibranch pipeline env? I didn't see any variable reference in the modern scm git config.


On Wednesday, January 15, 2020 at 11:59:29 PM UTC-5, Jan Monterrubio wrote:
Check the loading dynamic libraries portion. It might do what you want. 
On Wed, Jan 15, 2020 at 15:12 Chris Carpenter <chriscar...@gmail.com> wrote:
Is there a way to dynamically load the library from dynamic branch variable like this:

@Library("jenkins-pipeline@${env.BRANCH_NAME}") _

In a multi branch pipeline you have access to the current branch name in the environment variable `BRANCH_NAME`. I'd like to be able to test changes to my pipeline before committing them to master branch potentially breaking builds.

I get the following warning in the console output:

WorkflowScript: @Library value jenkins-pipeline@$env.BRANCH_NAME was not a constant; did you mean to use the library step instead?


--
You received this message because you are subscribed to the Google Groups "Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jenkins...@googlegroups.com.

Jan Monterrubio

unread,
Jan 16, 2020, 1:56:07 PM1/16/20
to jenkins...@googlegroups.com
When testing library changes, I usually make a new folder and specify the branch I am testing there. I’ve never tried to do the dynamic environment variable. 

Is your end goal to integration test your library before merging it to master? We do something similar by standing up a local Jenkins and using docker based agents. 

To unsubscribe from this group and stop receiving emails from it, send an email to jenkinsci-use...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/7c19684f-ca4a-4bcb-90f5-9cb7aca16233%40googlegroups.com.

Chris Carpenter

unread,
Jan 16, 2020, 3:13:12 PM1/16/20
to Jenkins Users
Yes it's mostly to ease testing changes. Our pipelines are tied to kubernetes/openshift so there's a lot of interaction there that I need to make sure a whole pipeline still runs. Was hoping to dynamically update the right branch of the pipeline library so we don't accidentally commit a to master when it's ready.
Reply all
Reply to author
Forward
0 new messages