首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gitlab项目无法从同一个gitlab组中的另一个项目解析maven依赖项

Gitlab项目无法从同一个gitlab组中的另一个项目解析maven依赖项
EN

Stack Overflow用户
提问于 2021-12-16 12:33:22
回答 2查看 1.2K关注 0票数 1

在我的依赖项目中,我有一个ci_settings.xml

代码语言:javascript
复制
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
    <servers>
        <server>
            <id>gitlab-maven</id>
            <configuration>
                <httpHeaders>
                    <property>
                        <name>Job-Token</name>
                        <value>${env.CI_JOB_TOKEN}</value>
                    </property>
                </httpHeaders>
            </configuration>
        </server>
    </servers>
</settings>

我已经在我的pom.xml中配置了注册表:

代码语言:javascript
复制
    <repositories>
        <repository>
            <id>gitlab-maven</id>
            <!--suppress UnresolvedMavenProperty -->
            <url>${env.CI_API_V4_URL}/projects/${env.CI_PROJECT_ID}/packages/maven</url>
        </repository>
    </repositories>

    <distributionManagement>
        <repository>
            <id>gitlab-maven</id>
            <!--suppress UnresolvedMavenProperty -->
            <url>${CI_API_V4_URL}/projects/${env.CI_PROJECT_ID}/packages/maven</url>
        </repository>
        <snapshotRepository>
            <id>gitlab-maven</id>
            <!--suppress UnresolvedMavenProperty -->
            <url>${CI_API_V4_URL}/projects/${env.CI_PROJECT_ID}/packages/maven</url>
        </snapshotRepository>
    </distributionManagement>

当我用以下..gitlab ci.yml运行CI样条时:

代码语言:javascript
复制
deploy:
  image: maven:3.6-jdk-11
  script:
    - mvn deploy -s ci_settings.xml
  only:
    - main

依赖关系正在成功地部署到包存储库中。

代码语言:javascript
复制
Uploading to gitlab-maven: https://gitlab.my.de/api/v4/projects/255/packages/maven/de/group/my/model/0.0.1-SNAPSHOT/model-0.0.1-20211216.121731-6.jar
Uploaded to gitlab-maven: https://gitlab.my.de/api/v4/projects/255/packages/maven/de/group/my/model/0.0.1-SNAPSHOT/model-0.0.1-20211216.121731-6.jar (35 kB at 61 kB/s)
Uploading to gitlab-maven: https://gitlab.my.de/api/v4/projects/255/packages/maven/de/group/my/model/0.0.1-SNAPSHOT/model-0.0.1-20211216.121731-6.pom
Uploaded to gitlab-maven: https://gitlab.my.de/api/v4/projects/255/packages/maven/de/group/my/model/0.0.1-SNAPSHOT/model-0.0.1-20211216.121731-6.pom (3.8 kB at 6.3 kB/s)
Downloading from gitlab-maven: https://gitlab.my.de/api/v4/projects/255/packages/maven/de/group/my/model/maven-metadata.xml
Downloaded from gitlab-maven: https://gitlab.my.de/api/v4/projects/255/packages/maven/de/group/my/model/maven-metadata.xml (283 B at 1.6 kB/s)
Uploading to gitlab-maven: https://gitlab.my.de/api/v4/projects/255/packages/maven/de/group/my/model/0.0.1-SNAPSHOT/maven-metadata.xml
Uploaded to gitlab-maven: https://gitlab.my.de/api/v4/projects/255/packages/maven/de/group/my/model/0.0.1-SNAPSHOT/maven-metadata.xml (773 B at 1.3 kB/s)
Uploading to gitlab-maven: https://gitlab.my.de/api/v4/projects/255/packages/maven/de/group/my/model/maven-metadata.xml
Uploaded to gitlab-maven: https://gitlab.my.de/api/v4/projects/255/packages/maven/de/group/my/model/maven-metadata.xml (283 B at 455 B/s)

当我试图使用部署使用的相同的ci_settings.xml在同一个组中的另一个gitlab项目中使用该依赖时,就会出现这个问题。我已经设置了这样的pom:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>de.group.my</groupId>
        <artifactId>parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>app</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <dependencies>
        ...
        
        <dependency>
            <groupId>de.group.my</groupId>
            <artifactId>model</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        
        ...
    </dependencies>

    <repositories>
        <repository>
            <id>gitlab-maven</id>
            <url>https://gitlab.my.de/api/v4/projects/255/packages/maven</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

    <distributionManagement>
        <repository>
            <id>gitlab-maven</id>
            <url>https://gitlab.my.de/api/v4/projects/255/packages/maven</url>
        </repository>

        <snapshotRepository>
            <id>gitlab-maven</id>
            <url>https://gitlab.my.de/api/v4/projects/255/packages/maven</url>
        </snapshotRepository>
    </distributionManagement>

</project>

但是,当我运行CI管道时,它总是以:

代码语言:javascript
复制
[ERROR] Failed to execute goal on project app: Could not resolve dependencies for project de.group.my:app:jar:0.0.1-SNAPSHOT: Could not find artifact de.group.my:model:jar:0.0.1-SNAPSHOT in gitlab-maven (https://gitlab.my.de/api/v4/projects/255/packages/maven) -> [Help 1]
...
Caused by: org.eclipse.aether.transfer.ArtifactNotFoundException: Could not find artifact de.group.my:model:jar:0.0.1-SNAPSHOT in gitlab-maven (https://gitlab.fronetic.de/api/v4/projects/255/packages/maven

这种情况发生在

  • The metadata.xml
  • The pom.xml
  • 罐子

但是,将metadata.xml的链接复制到浏览器中,它就会被下载:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<metadata modelVersion="1.1.0">
  <groupId>de.group.my</groupId>
  <artifactId>model</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <versioning>
    <snapshot>
      <timestamp>20211216.121731</timestamp>
      <buildNumber>6</buildNumber>
    </snapshot>
    <lastUpdated>20211216121731</lastUpdated>
    <snapshotVersions>
      <snapshotVersion>
        <extension>jar</extension>
        <value>0.0.1-20211216.121731-6</value>
        <updated>20211216121731</updated>
      </snapshotVersion>
      <snapshotVersion>
        <extension>pom</extension>
        <value>0.0.1-20211216.121731-6</value>
        <updated>20211216121731</updated>
      </snapshotVersion>
    </snapshotVersions>
  </versioning>
</metadata>

在它试图下载的日志中:

代码语言:javascript
复制
Downloading from gitlab-maven: https://gitlab.my.de/api/v4/projects/255/packages/maven/de/group/my/model/0.0.1-SNAPSHOT/model-0.0.1-SNAPSHOT.jar

但这件艺术品并不存在。它应该下载model-0.0.1-20211216.121731-6,但它没有。

其他依赖项可以下载(镜像)

代码语言:javascript
复制
[INFO] Downloading from gitlab-maven: https://gitlab.my.de/api/v4/projects/255/packages/maven/io/micrometer/micrometer-core/1.5.1/micrometer-core-1.5.1.pom
[DEBUG] Writing tracking file /root/.m2/repository/io/micrometer/micrometer-core/1.5.1/micrometer-core-1.5.1.pom.lastUpdated
[DEBUG] Using transporter WagonTransporter with priority -1.0 for https://repo.maven.apache.org/maven2
[DEBUG] Using connector BasicRepositoryConnector with priority 0.0 for https://repo.maven.apache.org/maven2
[INFO] Downloading from central: https://repo.maven.apache.org/maven2/io/micrometer/micrometer-core/1.5.1/micrometer-core-1.5.1.pom
[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/io/micrometer/micrometer-core/1.5.1/micrometer-core-1.5.1.pom (8.2 kB at 91 kB/s)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-27 08:14:58

讨论之后,穆加德确认:

我在本地解决了。 我需要将我的gitlab用户作为维护人员添加到项目中。把它加到小组里是不够的。 但那只适用于当地人。 gitlab构建仍然没有运行,因为我不能在码头内获得CI_JOB_TOKEN。 但我想这是一个不同的话题。

从项目成员权限来看,至少需要Developer才能发布包注册表

CI_JOB_TOKEN问题看起来像本期

我们在gitlab环境中也有同样的问题,任何试图将"CI_JOB_TOKEN“作为管道的一部分的尝试都会导致: 未能在项目上执行目标org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (默认部署):未能部署工件:无法在gitlab-maven (https://git./api/v4/projects/19/packages/maven) ->帮助1中找到工件com.spring.ext. not::0.0.1-20190207.112431-1 我怀疑这些问题与试图通过API直接为未经授权的用户返回404 (参见:第42586期)运行相同的命令有关。 修改我们的settings.xml以使用只启用"api“作用域的个人令牌。

票数 1
EN

Stack Overflow用户

发布于 2022-03-14 10:53:23

这个问题困扰了我和整个团队一段时间后,我们才明白根本原因和解决办法。

因此,我们在同一子群(如GitLab SubGroup1 )中进行了2次再灌注。Repo1是指在build.gradle文件中发布到Repo2包注册表的依赖项,如下所示

代码语言:javascript
复制
repositories {
    mavenLocal()
    mavenCentral()
    maven {
        url 'https://gitlab.example.com/api/v4/projects/**projectID**/packages/maven'
        credentials(HttpHeaderCredentials) {
            name = project.findProperty("gitlab.token.name") ?: "Job-Token"
            value = project.findProperty("gitlab.token.key") ?: System.getenv("CI_JOB_TOKEN")
        }
        authentication {
            header(HttpHeaderAuthentication)
        }
    }
}

现在问题正在发生,因为很少有用户的推送构建因错误而失败。

代码语言:javascript
复制
> Could not resolve all files for configuration ':compileClasspath'.
   > Could not find com.example.group:artifact-name:versionname.
     Required by:
         project :

显然,当很少有其他用户只是简单地重新触发失败的工作时,它就像一种魅力,但是重新触发无助于那些推动更改的用户。所以看起来就像是某个地方发生的魔法。

问题的根本原因是从GitLab令牌文档中理解的。token.html

下面的是解决CI/CD作业令牌身份验证问题时遇到的问题的总结,请注意:启用CI/CD作业令牌限制时,作业令牌用于访问不同的项目:

  1. 执行作业的用户必须是要访问的项目的成员。
  2. 用户必须具有执行该操作的权限。
  3. 必须允许为作业令牌范围限制列出目标项目。

在对构建失败的成员进行故障排除时,我们发现它们作为直接成员添加到Repo1中,而不是Repo2的一部分。

因此,理想的解决方案是将它们作为成员添加到SubGroup1中,以便可以访问Repo1Repo2,因为它们位于同一个组中,并且访问是从组访问继承来的。这也将是有帮助的,如果增加了新的回购小组,成员将自动继承访问,这样就减少了维护。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70379088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档