【问题标题】:Promoted build plugin deploy artifacts to repository升级的构建插件将工件部署到存储库
【发布时间】:2024-04-21 18:30:02
【问题描述】:

我们有一个在 Windows slave 上运行的 Jenkins Maven 构建,它在每次提交时运行 maven 包。我正在尝试使用提升的构建插件将提升的构建部署到 nexus 发布存储库。

我已将“在...时促进构建”设置为手动批准,“将工件部署到 Maven 存储库”的操作将存储库 URL 设置为“http://example.com:8081/nexus/content/repositories/releases/”,将存储库 ID 设置为“发布”。 但是,当触发批准时,我们会得到以下堆栈跟踪:

[INFO] http://example.com:8081/nexus/content/repositories/releases/ 中的部署 (id=release,uniqueVersion=true) 部署主神器 artifactid-1.0.2.pom 上传:http://example.com:8081/nexus/content/repositories/releases/groupid/artifactid/1.0.2/artifactid-1.0.2.pom 错误:无法部署工件:无法将工件 groupid:artifactid:pom:1.0.2 从/到发布(http://example.com:8081/nexus/content/repositories/releases/)传输:无法传输文件:http://example.com:8081/nexus/content/repositories/releases/groupid/artifactid/1.0.2/artifactid-1.0.2.pom。返回码为:401,ReasonPhrase:未经授权。 org.apache.maven.artifact.deployer.ArtifactDeploymentException:无法部署工件:无法从/到发布(http://example.com:8081/nexus/content/repositories/releases/)传输工件组ID:artifactid:pom:1.0.2:无法传输文件:http://example.com:8081/nexus/content/repositories/releases/groupid/artifactid/1.0.2/artifactid-1.0.2.pom。返回码为:401,ReasonPhrase:未经授权。 在 org.apache.maven.artifact.deployer.DefaultArtifactDeployer.deploy(DefaultArtifactDeployer.java:143) 在 hudson.maven.reporters.MavenArtifactRecord.deploy(MavenArtifactRecord.java:193) 在 hudson.maven.RedeployPublisher.perform(RedeployPublisher.java:176) 在 hudson.plugins.promoted_builds.Promotion$RunnerImpl.build(Promotion.java:282) 在 hudson.plugins.promoted_builds.Promotion$RunnerImpl.doRun(Promotion.java:224) 在 hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:533) 在 hudson.model.Run.execute(Run.java:1740) 在 hudson.model.Run.run(Run.java:1678) 在 hudson.plugins.promoted_builds.Promotion.run(Promotion.java:174) 在 hudson.model.ResourceController.execute(ResourceController.java:89) 在 hudson.model.Executor.run(Executor.java:240)

如果我更改升级操作以触发 maven 部署,则重新运行构建并且部署目标按预期工作,如果我添加 git 发布者,这也会在身份验证时失败。如果由运行 Jenkins 的用户在本地执行,这两个操作都会成功。

提升的构建插件如何确定部署的身份验证详细信息?

【问题讨论】:

  • 我有同样的问题:(你如何部署到需要身份验证的存储库?

标签: maven jenkins jenkins-plugins promoted-builds


【解决方案1】:

要执行需要使用 Maven 进行身份验证的部署,您需要使用 settings.xml file 中的正确信息配置服务器。因此,使用以下内容修改(或创建)您的用户设置(在${user.home}/.m2/settings.xml 下):

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <servers>
    <server>
      <id>releases</id>
      <username>my_login</username>
      <password>my_password</password>
    </server>
  </servers>
  ...
</settings>

这使用给定的用户名和密码定义了一个名为 releases 的服务器配置。如果需要,您可以改用密码或私钥。

然后,您需要确保 Jenkins 正确读取您的 Maven 设置文件。在 Jenkins 2.8 下,您可以导航到“Jenkins > Global Tool Configuration”。

这两个选项指向之前修改过的全局 Maven 设置和用户设置。

最后,您需要确保 Jenkins 中配置的构建操作正在查找配置的服务器。在“将工件部署到 Maven 存储库”操作中,编写部署 URL,“存储库 ID”应该是在 settings.xml 中配置的服务器的 &lt;id&gt;,在本例中为 releases

【讨论】:

    最近更新 更多