我有一个jenkins工作,它将执行一个gradle脚本,从keychain中检索android存储和密钥。该脚本在我的本地计算机上运行良好,但我尝试将其添加到jenkins作业中,并且未能在钥匙串中找到该项目:
security: SecKeychainSearchCopyNext: The specified item could not be found in the keychain.
它尝试运行的命令是:security -q find-generic-password -a jenkins -gl storePassword
从终端运行此命令会按预期检索密码。
我认为问题在于jenkins作业在jenkins用户下运行的事实。我已经向jenkins用户尝试了su,我认为它只有系统密钥链 - 如果我security list-keychains
它会出现System.keychain
。我的商店和密码密码都在登录密钥链里面,我不认为jenkins用户有权访问?有什么建议如何纠正这个?我曾尝试通过安全措施创建钥匙串,但这并没有真正奏效。
答案 0 :(得分:0)
以防这对某人有用:
1)使用keychain-access创建一个新的钥匙串。我们称之为'jenkins',例如
2)将钥匙串复制到jenkins
库目录($HOME/Library/Keychains/jenkins.keychain
)
3)在chown jenkins:jenkins
上运行jenkins.keychain
4)运行sudo su jenkins
切换到jenkins用户
5)将jenkins.keychain添加到钥匙串列表security list-keychains -s ~/Library/Keychains/jenkins.keychain
6)向jenkins构建过程添加一个bash脚本调用以解锁keychain。理想情况下,调用应该使用掩码密码插件中存储在jenkins构建中的密码。像security unlock-keychain -p "${jenkins_keychain_password}" "$HOME/Library/Keychains/jenkins.keychain"
这是一个很好的指南,可以了解更多详情:http://www.egeek.me/2015/04/12/jenkins-setting-up-ios-code-signing/