【问题标题】:Using maven to push an artifact to Gitlab使用 maven 将工件推送到 Gitlab
【发布时间】:2021-03-11 00:15:17
【问题描述】:

我有一个项目用于将工件推送到 Nexus,但我们现在需要更改它以将其推送到 Gitlab。当我的 CI/CD 管道尝试执行此部署时,会收到以下错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy 
(default-deploy) on project foo: Failed to retrieve remote metadata foo:1.0.4-SNAPSHOT/maven-
metadata.xml: Could not transfer metadata foo:1.0.4-SNAPSHOT/maven-metadata.xml from/to foo-
snapshots (https://foo.nexus.com/repository/foo-snapshots/): Not authorized -> [Help 1]

请注意,它仍在尝试将其推送到 Nexus,而不是推送到 Gitlab。如何更改我的 gitlab-ci.yml 文件或我的 settings.xml 以将其推送到 Gitlab?

这是我的 gitlab-ci.yml 文件:

stages:
  - build
deploy:
  stage: build
  script:
    - mvn clean deploy -e -B -U -Ddist=true -s settings.xml

请注意,在将其推送到 Nexus 之前,这是脚本中的第一行代码: mvn-settings -u "${NEXUS_DEPLOY_USER}" -p "${NEXUS_DEPLOY_PASS}" --master-password "${NEXUS_MASTER_PASS}" -s foo-snapshots。但是我想我可以通过 -s settings.xml 来覆盖它。

在这个 settings.xml 中是我的 gitlab 令牌:

     <server>
       <id>foo</id>
       <configuration>
         <httpHeaders>
            <property>
              <name>Job-Token</name>
              <value>${env.CI_JOB_TOKEN}</value>

并在其下定义了一些分发存储库:

<profiles>
    <profile>
      <id>gitlab-foo</id>
      <repositories>
        <repository>
          <id>foo</id>
          <url>https://gitlab.foo/api/v4/projects/700/packages/maven</url>
        </repository>
      </repositories>
      <properties>
        <distribution.repository.id>foo-snapshots</distribution.repository.id>
        <url>https://gitlab.foo/api/v4/projects/700/packages/maven</url>

这也是我的 pom.xml 文件的相关部分:

<distributionManagement>
        <repository>
            <id>foo-snapshots</id>
    <url>https://gitlab.foo/api/v4/projects/706/packages/maven</url>
        </repository>
        <snapshotRepository>
            <id>foo-snapshots</id>
    <url>https://gitlab.foo/api/v4/projects/706/packages/maven</url>
        </snapshotRepository>
</distributionManagement>

【问题讨论】:

  • gitlab 是否配置为 maven 存储库?
  • 您是在 pom 中设置 distributionManagement,还是在命令行中用 -DaltDeploymentRepository=foo-snapshots::https://gitlab.foo/api/v4/projects/700/packages/maven 之类的东西覆盖它
  • @Joe 谢谢你的工作!如果你想把它作为答案

标签: java maven gitlab-ci nexus


【解决方案1】:

确保您已指定部署存储库。几种不同的方法可以做到这一点:

  1. 确保您的 pom 中有一个 distributionManagement 部分指向 gitlab (docs here)
  2. 通过 maven 命令行指定参数覆盖部署插件的目的地:-DaltDeploymentRepository=foo-snapshots::https://gitlab.foo/api/v4/projects/700/packages/maven (docs here)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-02
    • 2021-04-08
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多