我想在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
我不确定我做错了什么。
我找到了解决方案。由于该包位于 private 存储库 中,因此我没有验证
gitlab-maven
依赖项调用。
我在目标项目中添加了
servers
和 deploy-token
的 gitlab
maven
settings.xml
假设你有一个maven项目(你的库),你想将其部署在gitlab中,以便你可以在其他maven项目中使用它作为依赖项,那么你需要首先在你的库中配置以下几点。
第 1 部分:在 gitlab 中发布库。
首先将您的库上传到 gitlab 的存储库中。您还可以在其他项目的包注册表中部署该库,无论哪种情况,请记下要部署的项目的
PROJECT_ID
,可以在该项目的设置页面中找到该项目。
在您的项目中添加
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。<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>
注:
settings.xml
<url>
中将 example 替换为您的 gitlab 子域。如果您仅使用 gitlab,则仅使用 gitlab.com。PROJECT_ID
中的项目ID(在此示例中,我在实例级别部署库,如果您想在组级别设置进行配置,则使用组ID。您可以在gitlab文档中找到详细说明。)现在您已准备好进行部署。启动终端/cmd 并运行以下命令。
cd <your_library_location>; mvn --settings settings.xml deploy
注:
第 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>
注:
settings.xml
。你现在可以走了。 您可以在 gitlab 文档中找到详细的解释here。