微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 maven 将工件推送到 Gitlab

如何解决使用 maven 将工件推送到 Gitlab

我有一个项目用于将工件推送到 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>

解决方法

确保您已指定部署存储库。您可以通过几种不同的方式执行此操作:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。