From f68141b019e07cae4e3c63f528c57c21ce381243 Mon Sep 17 00:00:00 2001 From: "R. Tyler Croy" Date: Wed, 9 Aug 2017 18:51:39 -0700 Subject: [PATCH] Add an initial version of the shared library --- .gitignore | 0 README.adoc | 54 ++++++++++++++++++++++++++++ assets/with-screenshot.png | Bin 0 -> 20409 bytes vars/createSecretText.groovy | 7 ++++ vars/promptUserForEncryption.groovy | 10 ++++++ vars/unsafeSecretAccess.groovy | 7 ++++ vars/withSecrets.groovy | 28 +++++++++++++++ 7 files changed, 106 insertions(+) create mode 100644 .gitignore create mode 100644 README.adoc create mode 100644 assets/with-screenshot.png create mode 100644 vars/createSecretText.groovy create mode 100644 vars/promptUserForEncryption.groovy create mode 100644 vars/unsafeSecretAccess.groovy create mode 100644 vars/withSecrets.groovy diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/README.adoc b/README.adoc new file mode 100644 index 0000000..910ca13 --- /dev/null +++ b/README.adoc @@ -0,0 +1,54 @@ += 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`. + + +== 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}" + } + } +} +---- + +=== Encrypting Secrets + +A Pipeline can be used to offer a user interface for encrypting. + +.Jenkinsfile +[source,groovy] +---- +promptUserForEncryption() +---- + +== API + +`promptUserForEncryption()` + +`createSecretText()` + +`unsafeSecretAccess()` + +`withSecrets()` diff --git a/assets/with-screenshot.png b/assets/with-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..aaa916892a3df92ba2720fdfed67684914a1430c GIT binary patch literal 20409 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 Bk|h8D literal 0 HcmV?d00001 diff --git a/vars/createSecretText.groovy b/vars/createSecretText.groovy new file mode 100644 index 0000000..1625809 --- /dev/null +++ b/vars/createSecretText.groovy @@ -0,0 +1,7 @@ +#!/usr/bin/env groovy + +import hudson.util.Secret + +def call(String text) { + return Secret.fromString(text) +} diff --git a/vars/promptUserForEncryption.groovy b/vars/promptUserForEncryption.groovy new file mode 100644 index 0000000..e23c15a --- /dev/null +++ b/vars/promptUserForEncryption.groovy @@ -0,0 +1,10 @@ +#!/usr/bin/env groovy + +def call() { + def s = input(message: 'Text', + ok: 'Encrypt', + parameters: [password(defaultValue: '', + description: 'Text for encryption', + name: 'Plain text')]) + echo "Use this encrypted value in your Jenkinsfile: ${s.encryptedValue}" +} diff --git a/vars/unsafeSecretAccess.groovy b/vars/unsafeSecretAccess.groovy new file mode 100644 index 0000000..e0e1847 --- /dev/null +++ b/vars/unsafeSecretAccess.groovy @@ -0,0 +1,7 @@ +#!/usr/bin/env groovy + +import hudson.util.Secret + +def call(String cipherText) { + return Secret.decrypt(cipherText) +} diff --git a/vars/withSecrets.groovy b/vars/withSecrets.groovy new file mode 100644 index 0000000..0b08762 --- /dev/null +++ b/vars/withSecrets.groovy @@ -0,0 +1,28 @@ +#!/usr/bin/env groovy +import hudson.util.Secret + +def call(Map ciphers, Closure body) { + List cipherPairs = [] + /* https://issues.jenkins-ci.org/browse/JENKINS-27392 */ + List cipherEnv = [] + + body.resolveStrategy = Closure.DELEGATE_FIRST + + ciphers.each { String key, String cipherText -> + String plainText = Secret.decrypt(cipherText).plainText + cipherEnv.add("${key}=${plainText}") + cipherPairs.add([var: key, + password: plainText]) + } + + try { + wrap([$class: 'MaskPasswordsBuildWrapper', + varPasswordPairs: cipherPairs]) { + withEnv(cipherEnv) { body.call() } + } + + } + catch (java.lang.IllegalArgumentException e) { + error 'Cannot use withSecret() without installing the Mask Passwords plugin' + } +}