20

我只能上传现有的詹金斯秘密文件,而不能下载现有的。

如何下载我上传的现有秘密文件以确认其内容?

4

4 回答 4

28

如果您可以访问 Jenkins 实例的脚本控制台(例如,通过在浏览器中访问https://jenkins.example.com/script),您可以运行以下脚本:

import com.cloudbees.plugins.credentials.*;
import com.cloudbees.plugins.credentials.domains.Domain;
import org.jenkinsci.plugins.plaincredentials.impl.FileCredentialsImpl;

println "Jenkins credentials config file location=" + SystemCredentialsProvider.getConfigFile();
println ""

def fileName = "my-secret-file.txt"

SystemCredentialsProvider.getInstance().getCredentials().stream().
  filter { cred -> cred instanceof FileCredentialsImpl }.
  map { fileCred -> (FileCredentialsImpl) fileCred }.
  filter { fileCred -> fileName.equals( fileCred.getFileName() ) }.
  forEach { fileCred -> 
    String s = new String( fileCred.getSecretBytes().getPlainData() )
    println "XXXXXX BEGIN a secret file with fileName=" + fileName + " XXXXXXXXXXXX"
    println s
    println "XXXXXX END a secret file with fileName=" + fileName + " XXXXXXXXXXXX"
    println ""
  }

更改fileName为您要打印的文件名。此脚本将打印出 Jenkins 凭证存储的全局域中fileName文件名的文件内容。

此脚本的可修复警告:

于 2018-09-06T17:15:22.050 回答
5

如果您在运行 Jenkins 的机器上有 shell 访问权限和sudo // Jenkins Unix 用户权限,则可以通过执行以下操作来检索秘密文件:root

  • 在某些有权访问机密文件的 Jenkins 作业中,选择配置
  • Configuration界面的Build Environment下,选择Use secret text(s) or file(s)
  • 单击添加->秘密文件。这将创建一个新的Secret 文件绑定。
  • 选择特定凭据,然后从其下方的下拉菜单中选择您要检索的机密文件。假设您的秘密文件存储在文件名my-secret-file.txt下。
  • 为这个秘密文件分配一个变量,例如MY_SECRET_FILE_TXT.
  • 现在,在Pre Steps下,单击Add pre-build step -> Execute shell
  • 命令文本区域中,添加以下 shell 脚本:

    echo "executing user is $(whoami)"
    
    # remove my-secret-file.txt before possibly getting an overwriting error
    rm -f $WORKSPACE/my-secret-file.txt
    
    echo "Jenkins project workspace: $WORKSPACE"
    cp $MY_SECRET_FILE_TXT $WORKSPACE
    
  • 单击保存以保存此配置。

下次为此项目触发构建时,秘密文件应出现在此项目的工作区中,即 location $WORKSPACE/my-secret-file.txt。例如,在我安装了 package 和 daemon 的Ubuntu 14.04.5 LTS安装中jenkins,该位置是/var/lib/jenkins/workspace/$JENKINS_PROJECT_NAME/my-secret-file.txt

于 2018-09-06T12:08:35.143 回答
0

脚本控制台的标记答案很棒。

还有这个脚本将列出可以从控制台运行的所有秘密: https ://github.com/tkrzeminski/jenkins-groovy-scripts/blob/master/show-all-credentials.groovy

于 2018-09-06T18:47:13.983 回答
0

我通常通过创建这样的工作来从 jenkins 中提取秘密:

在此处输入图像描述

Jenkins 会屏蔽输出中的所有键,因此在打印输出时只需替换一个字符。如果事实证明0您的密钥中有另一个,它将显示为*******,您可以尝试替换不同的字符,或者将其分成两部分并将两半打印在不同的行上,或者其他类似的技巧。

您也可以直接将其粘贴到这样的文件中。

echo $HELLO > slack-key.txt
于 2021-05-04T10:22:50.433 回答