The following plugin provides functionality available through Pipeline-compatible steps. Read more about how to integrate steps into your Pipeline in the Steps section of the Pipeline Syntax page.

For a list of other such plugins, see the Pipeline Steps Reference page.

Credentials Binding Plugin

withCredentials: Bind credentials to variables

Allows various kinds of credentials (secrets) to be used in idiosyncratic ways. (Some steps explicitly ask for credentials of a particular kind, usually as a credentialsId parameter, in which case this step is unnecessary.) Each binding will define an environment variable active within the scope of the step. You can then use them directly from any other steps that expect environment variables to be set:

node {
  withCredentials([usernameColonPassword(credentialsId: 'mylogin', variable: 'USERPASS')]) {
    sh '''
      set +x
      curl -u "$USERPASS" https://private.server/ > output
    '''
  }
}

As another example (use Snippet Generator to see all options):

node {
  withCredentials([string(credentialsId: 'mytoken', variable: 'TOKEN')]) {
    sh '''
      set +x
      curl -H "Token: $TOKEN" https://some.api/
    '''
  }
}

Note the use of single quotes to define the script (implicit parameter to sh) in Groovy above. You want the secret to be expanded by the shell as an environment variable. The following idiom is potentially less secure, as the secret is interpolated by Groovy and so (for example) typical operating system process listings will accidentally disclose it:

node {
  withCredentials([string(credentialsId: 'mytoken', variable: 'TOKEN')]) {
    sh /* WRONG! */ """
      set +x
      curl -H 'Token: $TOKEN' https://some.api/
    """
  }
}

At least on Linux, environment variables can be obtained by other processes running in the same account, so you should not run a job which uses secrets on the same node as a job controlled by untrusted parties. In any event, you should always prefer expansion as environment variables to inclusion in the command, since Jenkins visualizations such as Blue Ocean will attempt to detect step parameters containing secrets and refuse to display them.

The secret(s) will be masked (****) in case they are printed to the build log. This prevents you from accidentally disclosing passwords and the like via the log. (Bourne shell set +x, or Windows batch @echo off, blocks secrets from being displayed in echoed commands; but build tools in debug mode might dump all environment variables to standard output/error, or poorly designed network clients might display authentication, etc.) The masking could of course be trivially circumvented; anyone permitted to configure a job or define Pipeline steps is assumed to be trusted to use any credentials in scope however they like.

Beware that certain tools mangle secrets when displaying them. As one example, Bash (as opposed to Ubuntu’s plainer Dash) does so with text containing ' in echo mode:

$ export PASS=foo"'"bar
$ env|fgrep PASS
PASS=foo'bar
$ sh -xc 'echo $PASS'
+ echo foo'bar
foo'bar
$ bash -xc 'echo $PASS'
+ echo 'foo'\''bar'
foo'bar

Mangled secrets can only be detected on a best-effort basis. By default, Jenkins will attempt to mask mangled secrets as they would appear in output of Bourne shell, Bash, Almquist shell and Windows batch. Without these strategies in place, mangled secrets would appear in plain text in log files. In the example above, this would result in:

+ echo 'foo'\''bar'
****

This particular issue can be more safely prevented by turning off echo with set +x or avoiding the use of shell metacharacters in secrets.

For bindings which store a secret file, beware that

node {
  dir('subdir') {
    withCredentials([file(credentialsId: 'secret', variable: 'FILE')]) {
      sh 'use $FILE'
    }
  }
}

is not safe, as $FILE might be inside the workspace (in subdir@tmp/secretFiles/), and thus visible to anyone able to browse the job’s workspace. If you need to run steps in a different directory than the usual workspace, you should instead use

node {
  withCredentials([file(credentialsId: 'secret', variable: 'FILE')]) {
    dir('subdir') {
      sh 'use $FILE'
    }
  }
}

to ensure that the secrets are outside the workspace; or choose a different workspace entirely:

node {
  ws {
    withCredentials([file(credentialsId: 'secret', variable: 'FILE')]) {
      sh 'use $FILE'
    }
  }
}

Also see the Limitations of Credentials Masking blog post for more background.

  • bindings
      Array / List of Nested Choice of Objects
    • aws
      Sets one variable to the AWS access key and another one to the secret key given in the credentials.
      • accessKeyVariable : String
        Environment variable name for the AWS Access Key Id. If empty, AWS_ACCESS_KEY_ID will be used.
      • secretKeyVariable : String
        Environment variable name for the AWS Secret Access Key. If empty, AWS_SECRET_ACCESS_KEY will be used.
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
      • roleArn : String (optional)
      • roleSessionDurationSeconds : int (optional)
      • roleSessionName : String (optional)
    • token
      • variable : String
        Name of an environment variable to be set during the build. The contents of this location are not masked.
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
    • $class: 'AwsBucketCredentialsBinding'
      Does something.
      • usernameVariable : String
      • passwordVariable : String
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
    • certificate
      Sets one variable to the username and one variable to the password given in the credentials.
      Warning: if the Jenkins controller or agent node has multiple executors, any other build running concurrently on the same node will be able to read the text of the secret, for example on Linux using ps e.
      • keystoreVariable : String
        Name of an environment variable to be set to the temporary keystore location during the build. The contents of this file are not masked.
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
      • aliasVariable : String (optional)
        Name of an environment variable to be set to the keystore alias name of the certificate during the build.
      • passwordVariable : String (optional)
        Name of an environment variable to be set to the password during the build.
    • ConjurSecretApplianceCredentials
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
      • sPath : String (optional)
      • variable : String (optional)
    • conjurSecretCredential
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
      • variable : String (optional)
    • conjurSecretUsername
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
      • passwordVariable : String (optional)
      • usernameVariable : String (optional)
    • conjurSecretUsernameSSHKey
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
      • secretVariable : String (optional)
      • usernameVariable : String (optional)
    • dockerCert
      • variable : String
        Name of an environment variable to be set during the build.
        Its value will be the absolute path of the directory where the {ca,cert,key}.pem files will be created.
        You probably want to call this variable DOCKER_CERT_PATH, which will be understood by the docker client binary.
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
    • file
      Copies the file given in the credentials to a temporary location, then sets the variable to that location. (The file is deleted when the build completes.)
      Warning: if the Jenkins controller or agent node has multiple executors, any other build running concurrently on the same node will be able to read the contents of this file.
      • variable : String
        Name of an environment variable to be set during the build. The contents of this location are not masked.
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
    • gitUsernamePassword
      • gitToolName : String

        Specify the Git tool installation name

      • credentialsId : String
        Set the git username / password credential for HTTP and HTTPS protocols.

        Shell example

        withCredentials([gitUsernamePassword(credentialsId: 'my-credentials-id',
                         gitToolName: 'git-tool')]) {
          sh 'git fetch --all'
        }
        

        Batch example

        withCredentials([gitUsernamePassword(credentialsId: 'my-credentials-id',
                         gitToolName: 'git-tool')]) {
          bat 'git submodule update --init --recursive'
        }
        

        Powershell example

        withCredentials([gitUsernamePassword(credentialsId: 'my-credentials-id',
                         gitToolName: 'git-tool')]) {
          powershell 'git push'
        }
        

    • $class: 'KeychainPasswordAndPathBinding'
      • keychainPathVariable : String
        Name of a variable that contains information about the keychain path stored in the 'Credentials'.
        Because values are stored in the environment variable of the name specified here, you can use the information stored in the 'Credentials' by shell script etc.
      • passwordVariable : String
        Name of a variable that contains information about the keychain password stored in the 'Credentials'.
        Because values are stored in the environment variable of the name specified here, you can use the information stored in the 'Credentials' by shell script etc.
      • inSearchPathVariable : String
        Name of a variable that stores information on whether to set the keychain stored in the 'Credentials' to the search path.
        Because values are stored in the environment variable of the name specified here, you can use the information stored in the 'Credentials' by shell script etc.
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
    • kubeconfigContent
      • variable : String
        Name of an environment variable to be set during the build. The contents of this location are not masked.
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
    • kubeconfigFile
      • variable : String
        Name of an environment variable to be set during the build. The contents of this location are not masked.
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
    • OSFBuilderSuiteOpenCommerceAPICredentials
      • clientIdVariable : String
      • clientPasswordVariable : String
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
    • sshUserPrivateKey
      Copies the SSH key file given in the credentials to a temporary location, then sets a variable to that location. (The file is deleted when the build completes.) Also optionally sets variables for the SSH key's username and passphrase.
      Warning: if the Jenkins controller or agent node has multiple executors, any other build running concurrently on the same node will be able to read the contents of this file.
      • keyFileVariable : String
        Name of an environment variable to be set to the temporary path of the SSH key file during the build. The contents of this file are not masked.
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
      • passphraseVariable : String (optional)
        Name of an environment variable to be set to the password during the build. (optional)
      • usernameVariable : String (optional)
        Name of an environment variable to be set to the username during the build. (optional)
    • string
      Sets a variable to the text given in the credentials.
      Warning: if the Jenkins controller or agent node has multiple executors, any other build running concurrently on the same node will be able to read the text of the secret, for example on Linux using ps e.
      • variable : String
        Name of an environment variable to be set during the build. The contents of this location are not masked.
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
    • OSFBuilderSuiteTwoFactorAuthCredentials
      • serverCertificateVariable : String
      • clientCertificateVariable : String
      • clientPrivateKeyVariable : String
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
    • usernameColonPassword
      Sets a variable to the username and password given in the credentials, separated by a colon (:).
      Warning: if the Jenkins controller or agent node has multiple executors, any other build running concurrently on the same node will be able to read the text of the secret, for example on Linux using ps e.
      • variable : String
        Name of an environment variable to be set during the build. The contents of this location are not masked.
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
    • usernamePassword
      Sets one variable to the username and one variable to the password given in the credentials.
      Warning: if the Jenkins controller or agent node has multiple executors, any other build running concurrently on the same node will be able to read the text of the secret, for example on Linux using ps e.
      • usernameVariable : String
        Name of an environment variable to be set to the username during the build.
      • passwordVariable : String
        Name of an environment variable to be set to the password during the build.
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
    • $class: 'VaultCertificateCredentialsBinding'
      Certificate Jenkins credential backed by a Hashicorp Vault secret
      • keyStoreVariable : String
      • passwordVariable : String
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
    • vaultFile
      Secret File Jenkins credential backed by a Hashicorp Vault secret
      • variable : String
        Name of an environment variable to be set during the build. The contents of this location are not masked.
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
    • $class: 'VaultSSHUserPrivateKeyBinding'
      SSH Username with private key credential backed by a Hashicorp Vault secret
      • usernameVariable : String
      • privateKeyVariable : String
      • passphraseVariable : String
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
    • vaultString
      Secret Text Jenkins credential backed by a Hashicorp Vault secret
      • variable : String
        Name of an environment variable to be set during the build. The contents of this location are not masked.
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
    • $class: 'VaultTokenCredentialBinding'
      • addrVariable : String
        The environment variable to set with the vault address.
      • tokenVariable : String
        The environment variable to set with the vault token.
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
      • vaultAddr : String
        The vault address where the credentials are to be used.
      • namespaceVariable : String (optional)
      • vaultNamespace : String (optional)
    • $class: 'VaultUsernamePasswordCredentialBinding'
      Username/ Password Jenkins credential backed by a Hashicorp Vault secret
      • usernameVariable : String
      • passwordVariable : String
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
    • zip
      Unpacks the ZIP file given in the credentials to a temporary directory, then sets the variable to that location. (The directory is deleted when the build completes.)
      Warning: if the Jenkins controller or agent node has multiple executors, any other build running concurrently on the same node will be able to read the contents of this directory.
      • variable : String
        Name of an environment variable to be set during the build. The contents of this location are not masked.
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
    • azureServicePrincipal
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
      • clientIdVariable : String (optional)
      • clientSecretVariable : String (optional)
      • subscriptionIdVariable : String (optional)
      • tenantIdVariable : String (optional)
    • azureStorage
      • credentialsId : String
        Credentials of an appropriate type to be set to the variable.
      • blobEndpointUrlVariable : String (optional)
      • storageAccountKeyVariable : String (optional)
      • storageAccountNameVariable : String (optional)

Was this page helpful?

Please submit your feedback about this page through this quick form.

Alternatively, if you don't wish to complete the quick form, you can simply indicate if you found this page helpful?

    


See existing feedback here.