我在我的仓库中使用Jenkins(多分支管道)运行的测试通过keys.py
在其中使用加密文件(git-crypt
)。为了在本地使用该文件,我通常使用git-crypt unlock
,但由于该命令的工作方式,我无法直接将此步骤添加到Jenkins文件中:
gpg
用于解密用于加密我的文件的对称密钥(即.git-crypt/keys/default/0/xxxx.gpg
)。此密钥使用我的私钥使用RSA加密,并且此密钥具有密码短语,您在尝试使用时提示进入密码短语。keys.py
。答案 0 :(得分:0)
要解决提示问题,请手动插入git-crypt
步骤
您的密码作为gpg
的命令行参数和解密的对称
git-crypt unlock
的关键。在这里,我们将使用更多技巧
像使用Jenkins environment variables一样轻松生活。
gpg --no-tty --passphrase YOUR_PASSPHRASE_GOES_HERE --output $WORKSPACE/.git-crypt/keys/default/0/decrypted.gpg --decrypt $WORKSPACE/.git-crypt/keys/default/0/YOUR_KEY_FILE_GOES_HERE.gpg && git-crypt unlock $WORKSPACE/.git-crypt/keys/default/0/decrypted.gpg
这里我们提出第二个问题,就是两次执行这个问题会引发一个问题 错误也是如此。我们希望repo仅在加密时才被解密。在 为了解决这个问题,首先检查包含对称密钥的文件 存在,仅在上一步骤中生成。最后,我们最终得到了一个 阶段看起来像:
stage('Unlock repo') {
steps {
script {
sh("[ -f $WORKSPACE/.git-crypt/keys/default/0/decrypted.gpg ] || gpg --no-tty --passphrase YOUR_PASSPHRASE_GOES_HERE --output $WORKSPACE/.git-crypt/keys/default/0/decrypted.gpg --decrypt $WORKSPACE/.git-crypt/keys/default/0/YOUR_KEY_FILE_GOES_HERE.gpg && git-crypt unlock $WORKSPACE/.git-crypt/keys/default/0/decrypted.gpg")
}
}
}
答案 1 :(得分:0)
我通过使用git-crypt
创建一个单独的容器为git-crypt构建了另一种解决方案,并在主要构建步骤之前和之后分阶段调用了这些容器:
pipeline {
environment {
// $HOME is not set in build-agent
JAVA_TOOL_OPTIONS = '-Duser.home=/home/jenkins/'
}
agent {
label 'docker'
}
stages {
stage('Decrypt') {
agent {
docker {
image 'wjung/jenkins-git-crypt:latest'
registryUrl 'https://index.docker.io/v1/'
registryCredentialsId 'docker-hub'
}
}
steps {
withCredentials([file(credentialsId: 'git-crypt-key', variable: 'FILE')]) {
sh 'cd $WORKSPACE; git-crypt unlock $FILE'
}
}
}
stage('Build docker image') {
agent {
docker {
image 'maven:3-jdk-11'
args '-v /services/maven/m2:/home/jenkins/.m2 -v /services/maven/m2/cache:/home/jenkins/.cache'
}
}
steps {
configFileProvider([configFile(fileId: 'mvn-setting-xml', variable: 'MAVEN_SETTINGS')]) {
sh 'mvn -s $MAVEN_SETTINGS -B -Dmaven.test.skip clean deploy'
}
}
}
stage('Lock dir') {
agent {
docker {
image 'wjung/jenkins-git-crypt:latest'
registryUrl 'https://index.docker.io/v1/'
registryCredentialsId 'docker-hub'
}
}
steps {
sh 'cd $WORKSPACE; git-crypt lock'
}
}
}
}
git-crypt export-key TMPFILE
从存储库导出加密密钥,然后将其添加为ID为git-crypt-key
的秘密文件。