我已经做了一个非常简单的脚本管道,基本上做到了
- 配置一个
- Artifactory服务器引用,通过引用credentialsId包含一组存储的Jenkins凭据。
- 一个maven构建器,在构建工件时不会自动部署它们
- 构建一个非常简单的java HelloWorld示例
- 发布构建信息(这将正确使用credentialsId引用的凭据)
- 使用buildInfo对象部署构建构件
- 这个操作失败事实上不使用引用的凭证,从而使用没有访问权限的匿名用户将工件部署到Artifactory中的指定本地存储库。
- 这是从Artifactory访问日志中验证的,其中buildInfo的发布成功地在访问线上拥有服务帐户用户,但是工件的部署被拒绝,用户为“NA”,然后是我的Jenkins服务器的IP。
这要求我要么
- 硬核用户名/密码在我的詹金斯文件,这是真的不理想
- 允许匿名部署,这也不是很理想
使用的管道是这样的:
#!/usr/bin/env groovy node {defrtserver = Artifactory.server“服务器id”rtServer。credentialsId =“svc-user”def buildInfo = Artifactory.newBuildInfo() def rtMaven = Artifactory.newMavenBuild() rtMaven。工具=“maven3”rtMaven。解析器服务器:server, releaseRepo:“libs-release”snapshotRepo:“libs-snapshot”rtMaven.deployer server: server, releaseRepo:“my-snapshots-local”snapshotRepo:“my-snapshots-local”rtMaven.deployer.deployArtifacts =假阶段(“签出”) {defscmvars = checkout scm} stage (“构建”) {rtmen .run:“pom.xml”目标:“清洁包', buildInfo: buildInfo} stage (“部署”) {//此步骤成功使用指定的凭据rtServer。publishBuildInfo buildInfo//此步骤使用指定凭据失败rtmwen .deployer. deployartifacts buildInfo}}
在查看源代码后,我认为
- 该建筑由# L62 GenericBuildInfoDeployer.deploy ()它使用外部构建信息实用程序(org.jfrog.build.extractor.retention.Utils)来完成所有繁重的工作。
- 关于工件部署,然后我跟踪问题到附近的某个地方# L182 Deployer.deployArtifacts ()。在L182上获得的凭据对象有一个空的用户名和密码集。
我试着用一些从部署器CredentialsConfig对象添加的调试信息构建我自己的插件。
-
- L182返回的Credentials对象的Credentials. getusername()和Credentials. getpassword()返回空字符串。
- iscredentialsconfig . iscredentialsoffered()为true
- getcredentialsid()返回我提供的凭据字符串。
- CredentialsConfig.getUsername()和CredentialsConfig.getPassword()返回空字符串(显然)
我将尝试调试PluginsUtils。credentialsLookup方法,看看这是否有助于缩小问题范围。
- - - - - -
问题被发现,见下面的评论。仅供参考,这是另一个很好的例子,说明Artifactory在服务器端提供有用的错误消息和/或日志消息方面是多么的糟糕。
以下是在权限不足的情况下尝试发布构建信息时得到的错误消息:
java.io.IOException: Could not publish build-info: Failed to send build descriptor。403响应消息:{“错误”: [{“状态”: 403,“消息”:"用户svc-jenkins-test不允许部署“artifactory-test %3A%3A java-hello-world-with-maven %3A%3A master/6-1563200346539.json”成“artifactory-build-info:artifactory-test %3A%3A java-hello-world-with-maven %3A%3A master/6-1563200346539.json”。"
鉴于这是您在尝试部署时遇到的错误,权限不足:
java.io.IOException: Failed to deploy file。状态码:401响应消息:Artifactory返回以下错误:Unauthorized状态码:401