= Inline Pipeline Secrets

This is a link:https://jenkins.io/doc/book/pipeline/shared-libraries[Pipeline
Shared Library] which helps support the use of user-defined inline secrets from
within a `Jenkinsfile`.

[WARNING]
====
This repository hasn't had a rigorous security evaluation, use at your own risk.
====

== Prerequisites

This Shared Library requires that the
link:https://plugins.jenkins.io/workflow-aggregator[Pipeline plugin] and
link:https://plugins.jenkins.io/mask-passwords[Mask Passwords plugin]
installed.


== Using

=== Decrypting Secrets

A Pipeline can use secrets similar to environment variables:

.Jenkinsfile
[source,groovy]
----
node {
    stage('Deploy') {
        withSecrets(
            AWS_SECRET_ID: '{AQAAABAAAAAQWsBycxCz0x8ouOKJLU9OTvHdsN7kt7+6RAcV2zZJTm4=}'
        ) {
            echo "I should be deploying something with: ${env.AWS_SECRET_ID}"
        }
    }
}
----

image::https://raw.githubusercontent.com/CodeValet/inline-pipeline-secrets/master/assets/with-screenshot.png[Usage in Blue Ocean]

=== Encrypting Secrets

A Pipeline can be used to offer a user interface for encrypting.

.Jenkinsfile
[source,groovy]
----
promptUserForEncryption()
----

== API


[NOTE]
====
This approach relies on Jenkins instance-specific private key which
means the encrypted ciphertexts are not portable across Jenkins instances.
====

`promptUserForEncryption()`

`createSecretText()`

`unsafeSecretAccess()`

`withSecrets()`
