我的公司是 Conan、Artifactory 和 Jenkins 的新手,但几个月前我们设置了一些测试管道脚本,并利用 Jenkins Artifactory 插件将一些 Conan 包发布到我们的 Artifactory 服务器。这些脚本现在因 SSL 认证失败而失败。
我们正在使用以下软件包:
- 詹金斯 v2.121
- Jenkins Artifactory 插件 v2.16.1
- Artifactory Pro v5.10.3
- 柯南 v1.3.3
当涉及到 Artifactory 配置时,我们的 pipline 脚本中的“打包和发布”阶段与此类似:
stage('Package and Publish') {
def artifactory_name = "MyCompanyArtifactory"
def artifactory_repo = "conan-local"
def server = Artifactory.server artifactory_name
def client = Artifactory.newConanClient()
def serverName = client.remote.add server: server, repo: artifactory_repo
client.run(command: "export-pkg . ci-user/stable -s os=Linux -s arch=x86_64 -s build_type=Debug")
client.run(command: "export-pkg . ci-user/stable -s os=Linux -s arch=x86_64 -s build_type=Release")
String myCmd = "upload MyLib/* --all -r ${serverName} --confirm"
def bInfo = client.run(command: myCmd)
//server.publishBuildInfo bInfo
}
这段代码曾经工作过,但我相信当我们的 IT 部门将 Artifactory 切换到 HTTPS 访问时它停止工作了。现在,Jenkins 在尝试为我们的 repo 设置 Conan 用户时出错:
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Package and Publish)
[Pipeline] getArtifactoryServer
[Pipeline] initConanClient
[shared-mylib] $ sh -c 'conan config set log.trace_file=\"/home/builduser/jenkins/workspace/shared-mylib@tmp/conan.tmp261537390058591873/conan_log.log\" '
[Pipeline] conanAddRemote
[shared-mylib] $ sh -c "conan remote add b519966f-f612-4094-b3ea-453a017cf793 https://artifactory.mycompany.com/artifactory/api/conan/conan-local "
WARN: Remotes registry file missing, creating default one in /home/builduser/jenkins/workspace/shared-rtplib@tmp/conan.tmp261537390058591873/.conan/registry.txt
[Pipeline] conanAddUser
Adding conan user 'ci-user', server 'b519966f-f612-4094-b3ea-453a017cf793'
[shared-mylib] $ sh -c ********
ERROR: HTTPSConnectionPool(host='artifactory.mycompany.com', port=443): Max retries exceeded with url: /artifactory/api/conan/conan-local/v1/users/authenticate (Caused by SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:726)'),))
此行为不限于 Jenkins 访问;当普通用户尝试访问 Artifactory Conan 存储库时也会发生这种情况,但我们可以通过添加带有 Verify_SSL 为 False 的远程存储库来绕过它(在以下命令的末尾):
conan remote add myco-conan-local https://artifactory.mycompany.com/artifactory/api/conan/conan-local False
我相信柯南文档表明我们有两种选择:
- 通过
conan remote
命令禁用 SSL 验证(上) - 将服务器 crt 文件附加到 conan 主目录中的 cacert.pem 文件中。
不幸的是,当涉及到 Jenkins 管道脚本时,我无法弄清楚如何完成这两种解决方案。所以我的问题:
- 有没有办法使用
client.remote.add
Jenkins 管道脚本中的命令(或类似命令)禁用 SSL 验证? - 有没有办法通过 Jenkins 管道脚本包含必要的服务器证书(以便它自动添加到特定于工作区的柯南主目录)?
对于更简单的短期解决方案,选项#1 可能是首选,但我也想了解选项#2 是如何完成的。
谢谢阅读。