如何在Gitlab中部署maven库依赖?

问题描述 投票:0回答:2

我想在GitLab中部署一个Maven依赖包(Spring Boot库项目),这样我就可以在其他项目中使用这个库作为依赖。

现在我浏览了 Gitlab Package 文档,下面是我根据文档所做的更改。

pom.xml

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example.one</groupId>
    <artifactId>common</artifactId>
    <version>${env.CI_COMMIT_TAG}</version>
    <name>common</name>
    <description>Common Library</description>

    <properties>
        <java.version>11</java.version>
        <maven.compiler.version>3.8.1</maven.compiler.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>3.1.5</version>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
            <optional>true</optional>
            <scope>provided</scope>
        </dependency>
    </dependencies>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.version}</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

我还创建了

ci_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>gitlab-maven</id>
            <configuration>
                <httpHeaders>
                    <property>
                        <name>Job-Token</name>
                        <value>${env.CI_JOB_TOKEN}</value>
                    </property>
                </httpHeaders>
            </configuration>
        </server>
    </servers>
</settings>

对于 CI/CD ,添加了

.gitlab-ci.yml
文件

image: maven:latest

stages:
  - deploy

variables:
  MAVEN_OPTS: "-Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository"

workflow:
  rules:
    - if: $CI_COMMIT_TAG

deploy-job:      
  stage: deploy  
  environment: production
  script:
    - mvn deploy -s ci_settings.xml
    - echo "Application successfully deployed."

现在,在 Gitlab 存储库中创建新标签

0.0.1
后,将启动管道并部署包。

问题是在添加包依赖时

    <dependency>
        <groupId>com.example.one</groupId>
        <artifactId>common</artifactId>
        <version>0.0.1</version>
    </dependency>

在同一组内的另一个项目中,我收到以下错误

com.example.one:common:jar:0.0.1 was not found in https://repo.maven.apache.org/maven2 during a previous
 attempt. This failure was cached in the local repository and resolution is not reattempted until
 the update interval of central has elapsed or updates are forced

我还尝试在目标项目中添加

<repositories>
标签,但随后出现不同的错误

com.example.one:common:jar:0.0.1 was not found in https://gitlab.com/api/v4/projects/XXXXXX/packages/maven
 during a previous attempt. This failure was cached in the local repository and resolution is not
 reattempted until the update interval of gitlab-maven has elapsed or updates are forced

我不确定我做错了什么。

spring-boot maven gitlab gitlab-ci gitlab-api
2个回答
0
投票

我找到了解决方案。由于该包位于 private 存储库 中,因此我没有验证

gitlab-maven
依赖项调用。

我在目标项目中添加了

servers
deploy-token
gitlab
maven
settings.xml


0
投票

假设你有一个maven项目(你的库),你想将其部署在gitlab中,以便你可以在其他maven项目中使用它作为依赖项,那么你需要首先在你的库中配置以下几点。

第 1 部分:在 gitlab 中发布库。

  1. 首先将您的库上传到 gitlab 的存储库中。您还可以在其他项目的包注册表中部署该库,无论哪种情况,请记下要部署的项目的

    PROJECT_ID
    ,可以在该项目的设置页面中找到该项目。

  2. 在您的项目中添加

    settings.xml

<settings xmlns="https://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="https://maven.apache.org/SETTINGS/1.1.0 https://maven.apache.org/xsd/settings-1.1.0.xsd">
          <servers>
            <server>
              <id>sample-lib</id>
              <configuration>
                <httpHeaders>
                  <property>
                    <name>Private-Token</name>
                    <value>TOKEN_VALUE</value>
                  </property>
                </httpHeaders>
              </configuration>
            </server>
          </servers>
        </settings>

注:

  • TOKEN_VALUE
    替换为您在 gitlab 中生成的令牌值。这可以是您的项目令牌或 PAT(个人访问令牌)。 Maven 在部署期间使用 gitlab 进行身份验证时将使用此令牌。
  • 确保您在
    pom.xml
    配置中使用相同的 ID。
  1. 在 pom.xml 中添加
    <dependencyManagement>
    <repositories>
    标签。

<repositories>
  <repository>
    <id>rakshit-sample-lib</id>
    <url>https://gitlab.txninfra.com/api/v4/projects/PROJECT_ID/packages/maven</url>
  </repository>
</repositories>
<distributionManagement>
  <repository>
    <id>sample-lib</id>
    <layout>default</layout>
    <url>https://gitlab.example.com/api/v4/projects/PROJECT_ID/packages/maven</url>
  </repository>
  <snapshotRepository>
    <id>sample-lib</id>
    <layout>default</layout>
    <url>https://gitlab.example.com/api/v4/projects/PROJECT_ID/packages/maven</url>
  </snapshotRepository>
</distributionManagement>

注:

  • id 应与
    settings.xml
  • 中使用的相同
  • <url>
    中将 example 替换为您的 gitlab 子域。如果您仅使用 gitlab,则仅使用 gitlab.com。
  • 替换
    PROJECT_ID
    中的项目ID(在此示例中,我在实例级别部署库,如果您想在组级别设置进行配置,则使用组ID。您可以在gitlab文档中找到详细说明。)

现在您已准备好进行部署。启动终端/cmd 并运行以下命令。

cd <your_library_location>; mvn --settings settings.xml deploy

注:

  • 确保正确添加令牌,否则您将收到身份验证错误 (40x)。
  • 如果您在部署时遇到 4xx 错误,请尝试通过一些嗅探器捕获请求并检查请求中是否发送了正确的 http 标头。

第 2 部分:使用库作为依赖项。

在您的项目的

pom.xml
中添加以下内容。

<dependencies>
  <dependency>
    <groupId>GROUP_ID</groupId>
    <artifactId>ARTIFACT_ID</artifactId>
    <version>VERSION_NUMBER</version>
  </dependency>
</dependencies>

<repositories>
  <repository>
    <id>sample-lib</id>
    <url>https://gitlab.example.com/api/v4/projects/PROJECT_ID/packages/maven</url>
  </repository>
</repositories>

注:

  • 如果您从 gitlab 域之外的外部应用程序访问该库,还需要使用与之前相同的配置添加
    settings.xml
  • 替换为库中的 group.id 和artifact.id。

你现在可以走了。 您可以在 gitlab 文档中找到详细的解释here

© www.soinside.com 2019 - 2024. All rights reserved.