【问题标题】:I am getting an error "Return code is: 401, ReasonPhrase: Unauthorized." when trying to deploy artifacts to nexus through jenkins我收到一个错误“返回代码是:401,ReasonPhrase:未经授权。”尝试通过 jenkins 将工件部署到 nexus 时
【发布时间】:2018-02-13 15:28:43
【问题描述】:

我的 settings.xml 文件位于“u01/jenkins/.m2/”中。这是我必须为 nexus 部署配置的地方吗?请指教

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project jenktest: Failed to deploy artifacts: Could not transfer artifact tulsa.jenkins.test:jenktest:pom:0.0.1-20170905.090435-1 from/to snapshots (http://myhost:8081/nexus/content/repositories/snapshots): Failed to transfer file: http://myhost:8081/nexus/content/repositories/snapshots/tulsa/jenkins/test/jenktest/0.0.1-SNAPSHOT/jenktest-0.0.1-20170905.090435-1.pom. Return code is: 401, ReasonPhrase: Unauthorized. -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project jenktest: Failed to deploy artifacts: Could not transfer artifact tulsa.jenkins.test:jenktest:pom:0.0.1-20170905.090435-1 from/to snapshots (http://204.26.165.206:8081/nexus/content/repositories/snapshots): Failed to transfer file: http://myhost:8081/nexus/content/repositories/snapshots/tulsa/jenkins/test/jenktest/0.0.1-SNAPSHOT/jenktest-0.0.1-20170905.090435-1.pom. Return code is: 401, ReasonPhrase: Unauthorized.

【问题讨论】:

    标签: maven jenkins nexus


    【解决方案1】:

    您的 Maven 设置文件应位于安装 Maven 的文件夹中(对所有用户全局可用)或在 $HOME/.m2/settings.xml 中执行 Jenkins 作业的用户的主文件夹中。

    您可以致电mvn -X | grep settings 以查看 Maven 在哪里寻找设置文件。

    【讨论】:

    • 我在 jenkins 工作文件夹中看到了 settings.xml 文件,并且我使用 repos 和具有部署权限的用户配置了 settings.xml 文件,尽管我面临未经授权的访问错误?可能的原因是什么?谢谢
    • settings.xml 不应该在您的 jenkins 工作文件夹中。它应该在/home/[JENKINS_USERNAME]/.m2/settings.xml
    【解决方案2】:

    您的pom.xml 文件中需要有一个<distributionManagement/> 部分。像这样的:

    <distributionManagement>
        <repository>
            <id>my-releases</id>
            <name>my-releases</name>
            <url>http://your-repository-host:8081/nexus/content/repositories/my-releases/</url>
            <layout>default</layout>
        </repository>
        <snapshotRepository>
            <id>my-snapshots</id>
            <name>my-snapshots</name>
            <url>http://your-repository-host:8081/nexus/content/repositories/my-snapshots/</url>
            <layout>default</layout>
        </snapshotRepository>
    </distributionManagement>
    

    那么你还需要在你的settings.xml 文件中有这样的东西:

    <servers>
        <server>
            <id>my-releases</id>
            <username>your-username</username>
            <password>your-password</password>
        </server>
        <server>
            <id>my-snapshots</id>
            <username>your-username</username>
            <password>your-password</password>
        </server>
    </servers>
    

    请注意,pom.xml&lt;distributionManagement/&gt; 中的 &lt;id/&gt; 部分应与 settings.xml 文件中 &lt;server/&gt; 部分中的部分匹配。

    此外,您的 settings.xml 文件必须(通常)位于 ~/.m2 下,除非您已在 Jenkins 中定义它们。

    【讨论】:

      【解决方案3】:

      尝试从 slave 手动运行 deploy,如果可行,请确保您使用正确的 settings.xml,方法是将 -x 添加到您的 mvn 命令中。

      【讨论】:

        【解决方案4】:

        我遇到了类似的情况,我们解决了;我们在“发布”工作期间得到“401 未授权”。

        在尝试调试时,我们更改了 jenkins/maven 作业:

        "clean release:clean release:prepare release:perform"
        

        "clean deploy".
        

        “部署”奏效了,这让我们对工作的一般配置/管道方面充满信心。但是“释放”仍然失败;作业配置的所有其他方面都是相同的(因为我们只是内联更改目标和选项)

        为了使它更复杂,在我们的例子中,我们不在 settings.xml 文件中硬编码凭据。相反,这些是由 Jenkins 在构建/作业时注入的。

        在此处添加“NEXUS_USER”。

        在此处添加“NEXUS_PASS”。

        配置 Jenkins/Maven 以使用您的 settings.xml 文件

        将此添加到您的 pom.xml 中(这里应该不足为奇)

        <distributionManagement>
            <repository>
                <id>com.xxx.repo_releases</id>
                <url>https://sonatype-nexus.xxx.com/releases/</url>
                <name>Internal releases repository</name>
            </repository>
            <snapshotRepository>
                <id>com.xxx.repo_snapshots</id>
                <url>https://sonatype-nexus.xxx.com/snapshots/</url>
                <name>Internal snapshots repository</name>
            </snapshotRepository>
        </distributionManagement>
        

        来自 settings.xml(这个文件是我们 git repo 中 pom.xml 的对等文件)

        <servers>
          <server>
            <id>com.xxx.repo_releases</id>
            <username>${env.NEXUS_USER}</username>
            <password>${env.NEXUS_PASS}</password>
          </server>
          <server>
            <id>com.xxx.repo_snapshots</id>
            <username>${env.NEXUS_USER}</username>
            <password>${env.NEXUS_PASS}</password>
          </server>
        </servers>
        

        解决方案:原来问题出在“maven-release-plugin”上,并且它无法在 settings.xml 文件中插入 ${NEXUS_USER}。一旦我们将版本(从 2.1)升级到 2.5.3,一切都奏效了。

        【讨论】:

          【解决方案5】:

          如果加密后的密码不起作用,只需用明文密码和用户名替换即可。

          【讨论】:

          • 如果我们删除加密密码,它就可以工作。请告诉我们如何使用加密密码使其工作
          猜你喜欢
          • 2016-01-26
          • 2020-08-15
          • 1970-01-01
          • 1970-01-01
          • 2012-12-11
          • 1970-01-01
          • 2015-12-11
          • 2019-05-25
          • 1970-01-01
          相关资源
          最近更新 更多