Does Jenkins have a feature like credentials for non-secrets? - jenkins

real simple question today.
Does Jenkins have a feature like credentials that is for non-secret information?
My use case is that I want to specify some values in jenkins to make them easily available to all of my pipelines. (e.g. an Azure subscription id) I tried to just use 'secret text' type credentials, but the magic that jenkins does to protect those credentials make it difficult to work with them.
I imagine it would be called something like global environment variables, or named values, but I haven't been able to find anything with my googling.
Thanks!

The following steps will help you setup global environment variables which can be used within various builds and pipelines. The steps may be slightly different based on the version of Jenkins installed. The steps noted below are based on version 2.7.4:
Navigate to Manage Jenkins on the left side menu
Click "Configure System"
Scroll down to find "Global properties"
Check "Environment variables"
Click "Add"
Add the name and value in correct input area (Example: arg_name & arg_value)
Click "Save" at the bottom of the page
To use this global environment variable, navigate to an input area within a build definition and use: ${arg_name}

Related

Set global description for Jenkins instance

Using Jenkins we would like to set this global description by default. We have used groovy scripts to set other global variables but I'm struggling to find what methods / classes I need to call in order to set this description for our Jenkins instance. I see many description plugins for builds but this is instead the description you see on the Jenkins homepage (not per build). In the image below I clicked "Edit description" and then typed "test" in the box and pressed save.
That's the workflow we'd like to automate using Jenkins groovy code :)
Thanks!
The description that is shown in your image, is not a global Jenkins description but rather the description of the current view you are looking on - in this case the All view. If you switch to another view it will change.
To modify this via groovy code you need to modify the description of the view by its name:
Jenkins.instance.getView('all').setDescription("My New Description")
If you do want a global message that will appear always regardless of the selected view you can use the System Message option (configurable via the Configure System menu):
This message will be displayed at the top of the Jenkins main page.
This can be useful for posting notifications to your users
To update the system message via groovy code you can use the flowing:
Jenkins.instance.setSystemMessage("My System Message")

How can I set up my Jenkinsfile so that some params only appear if another param is selected?

I am working on a multibranch pipeline so all of the parameters are defined inside the Jenkinsfile. I'd like to know if there is a way that I can set it up so that if I am inside "Build with Parameters", and I click on a checkbox that I have defined in the Jenkinsfile, more parameters appear as options.
I just want to reduce clutter and confusion when someone wants to build my pipeline. I have so many parameters and a lot of them are unnecessary unless one checkbox is clicked.
If this isn't possible, I'd love any other suggestions to make my parameters section more organized.
Thanks!
For your case, you can use Active Choices Plugin available to download from Manage Jenkins >> Manage Plugins.
In the documentation page of this plugin, you can find various examples which will you to understand and setup.

How to select password from dropdown and pass it as parameter to jenkins job?

I have a problem. I use Jenkins to deploy application on machines. Depending on which machine i want to deploy new version I need to use different database passwords to run db migrations. I want to store credentials in Jenkins and for each deploy job select credentials set from dropdown which will be passed (just password ) to powershell script. I have Credentials Binding Plugin and Extended Choice Parameter Plugin. I thought it might help me with my problem, but I cannot find solution for this. Do you have any ideas how to achieve this?
As I understand, you need only to do two things:
add Credential Parameter in This project is parameterized section for possibility to select credentials set from dropdown.
enable Use secret text(s) or file(s) option in Build Environment section. This will allow you to take credentials of various sorts and use them from shell build steps and the like. Each binding will define an environment variable.
If you have already created Jenkins credentials like these:
then you will be available to run your job using Build with Parameters button and select needed credentials:
So, after configuring, you don't need to dig in job configuration each time, all possible credentials will be automatically loaded, you need only select the needed one when run a job.

How to replace tokens found in files via Jenkins?

I use Microsoft Team Foundation Server (TFS) for most of my software deployments. TFS allows me to dynamically replace text within specific configuration files during the release process to specific environments (dev, test, prod).
The text it replaces are placeholders called "tokens". For instance, during my automated deployments, TFS will allow us to replace tokens found within configuration files with pre-defined values saved in the build administration for each environment. This way, I don't store any real credentials in source control for any environment. I also don't store any script in source that would hold these sensative credentials. The credentials are dynamically inserted over top the tokens during the release, and the credentials are hosted/saved/configured inside of the release system (not in a script).
For example, I have a configuration file (web.config) that has tokens. A token looks something like this:
MySettingName=${MYSETTINGVALUE}
During the release to DEV, I want the text ${MYSETTINGVALUE} replaced with the word TEN. During the release to PROD, I want that same ${MYSETTINGVALUE} text replaced with the word ORANGE. And I want to store those two values (TEN and ORANGE) in the release administration system, and not in a script.
How do I configure Jenkins to do this same thing?
I have searched up-and-down for this specific answer. While many blogs, articles, documentation exist, none of them speak directly to this issue.
I would prefer NOT to use some additional 3rd party software to do
this.
I would prefer NOT to kick off some manual build and supply these
values each and every time.
I would also prefer NOT to use an Operating System level system
variable (aka evironment variable). In case that server dies, I
would rather not have to remember to setup those OS environment
varialbles on the next server.
Jenkins has a built-in credentials plugin for handling secrets in builds.
See this article on how to use them: https://support.cloudbees.com/hc/en-us/articles/203802500-Injecting-Secrets-into-Jenkins-Build-Jobs
Basically it stores credentials securely and injects them into your jobs as variables which can then be used like any other.

Using environment variables with Jenkins

I'm building a group of projects from the SVN. There is a possibility of changing the SVN location time to time. As there are bunch of projects I hope to give the repository url with a environment variable so i can change all the url's easily. Any idea how to do that??
In Subversion Source Code Management, you can use variable in the Repository URL, simply type:
http://my.svn.com/path/to/${VARIABLE}
${VARIABLE} is a job parameters that is defined earlier. Never heard of anyone wanting to use actual environment variables for this, but you can try with the same syntax.
By default, it will give you a red warning that this is not a valid URL. You can disable this warning by going to Manage Jenkins -> Configure System and look for Validate repository URLs up to the first variable name. Put a checkmark there and save.

Resources