上传的项目图片:“Jenkins Artifactory插件”
  1. Jenkins Artifactory插件
  2. hap - 1219

从buildInfo部署工件时,无法使用set credentialsId(使用anonymous)

    XML 可打印的

    细节

    • 类型: 错误
    • 状态: Resolved
      A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.">解决
    • 解决方法: 完成
    • 影响版本/ s: 3.3.2
    • 修复版本/ s: 3.4.0
    • 组件/ s: 发布管理
    • 标签:
      没有一个
    • 环境:

      人工版本:6.8.7

      詹金斯:2.164.2

      描述

      我已经做了一个非常简单的脚本管道,基本上做到了

      1. 配置一个
        1. Artifactory服务器引用,通过引用credentialsId包含一组存储的Jenkins凭据。
        2. 一个maven构建器,在构建工件时不会自动部署它们
      2. 构建一个非常简单的java HelloWorld示例
      3. 发布构建信息(这将正确使用credentialsId引用的凭据)
      4. 使用buildInfo对象部署构建构件
        1. 这个操作失败事实上使用引用的凭证,从而使用没有访问权限的匿名用户将工件部署到Artifactory中的指定本地存储库。
        2. 这是从Artifactory访问日志中验证的,其中buildInfo的发布成功地在访问线上拥有服务帐户用户,但是工件的部署被拒绝,用户为“NA”,然后是我的Jenkins服务器的IP。

      这要求我要么

      1. 硬核用户名/密码在我的詹金斯文件,这是真的不理想
      2. 允许匿名部署,这也不是很理想

      使用的管道是这样的:

      #!/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}}

      在查看源代码后,我认为

      1. 该建筑由# L62 GenericBuildInfoDeployer.deploy ()它使用外部构建信息实用程序(org.jfrog.build.extractor.retention.Utils)来完成所有繁重的工作。
      2. 关于工件部署,然后我跟踪问题到附近的某个地方# L182 Deployer.deployArtifacts ()。在L182上获得的凭据对象有一个空的用户名和密码集。

      我试着用一些从部署器CredentialsConfig对象添加的调试信息构建我自己的插件。

        1. L182返回的Credentials对象的Credentials. getusername()和Credentials. getpassword()返回空字符串。
        2. iscredentialsconfig . iscredentialsoffered()为true
        3. getcredentialsid()返回我提供的凭据字符串。
        4. 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

        附件

          活动

            受让人:
            eyalbEyal Ben Moshe [X](非活跃)
            记者:
            ReenbergJesper(不活跃)
            投票:
            0 为这个问题投票
            观察人士:
            2 开始收看本期节目

              日期

              创建:
              更新:
              解决: