如何从 CI/CD Dockerfile 访问 Gitlab 包注册表?
How to access Gitlab Package Registry from CI/CD Dockerfile?
我在 gitlab
中设置了一个 Package Registry
,其中包含一个 my-commons.jar
,在我的项目中使用它如下:
pom.xml
:
<repositories>
<repository>
<id>gitlab-maven</id>
<url>https://git.my-company.com/api/v4/projects/295/packages/maven</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.my.company</groupId>
<artifactId>my-commons</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
这也需要使用 Private-Token
进行访问,即放入 ~/.m2/settings.xml
:
<settings>
<servers>
<server>
<id>gitlab-maven</id>
<configuration>
<httpHeaders>
<property>
<name>Private-Token</name>
<value>MY_TOKEN</value>
</property>
</httpHeaders>
</configuration>
</server>
</servers>
</settings>
这在本地工作正常。
问题:如何在 docker 文件中重用它,尤其是涉及到 gitlab CI/CD
管道时。我是否应该向包含私有令牌的 gitlab 提交自定义 settings.xml
,以便 gitlab 管道知道如何访问包存储库?
Dockerfile
:
FROM $BUILD_IMAGE as dependencies
COPY pom.xml .
COPY src src
RUN mvn package
#RUN mvn package private_settings.xml #is that reasonable?
我会将令牌放入 $MAVEN_TOKEN
之类的 gitlab 变量中,然后在 settings.xml
中使用 $MAVEN_TOKEN
并将 settings.xml
提交到存储库。
您可以将其作为环境变量传递。
settings.xml
<settings>
<servers>
<server>
<id>gitlab-maven</id>
<configuration>
<httpHeaders>
<property>
<name>Private-Token</name>
<value>${MY_TOKEN}</value>
</property>
</httpHeaders>
</configuration>
</server>
</servers>
</settings>
Dockerfile
FROM $BUILD_IMAGE as dependencies
COPY pom.xml .
COPY src src
COPY settings.xml settings.xml
ARG MY_TOKEN
RUN mvn package
RUN mvn package -s settings.xml
然后,使用docker build
docker build --build-arg MY_TOKEN=$MY_TOKEN -t image-name:tag .
docker
将从 OS.
的环境中获取 $MY_TOKEN
我在 gitlab
中设置了一个 Package Registry
,其中包含一个 my-commons.jar
,在我的项目中使用它如下:
pom.xml
:
<repositories>
<repository>
<id>gitlab-maven</id>
<url>https://git.my-company.com/api/v4/projects/295/packages/maven</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.my.company</groupId>
<artifactId>my-commons</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
这也需要使用 Private-Token
进行访问,即放入 ~/.m2/settings.xml
:
<settings>
<servers>
<server>
<id>gitlab-maven</id>
<configuration>
<httpHeaders>
<property>
<name>Private-Token</name>
<value>MY_TOKEN</value>
</property>
</httpHeaders>
</configuration>
</server>
</servers>
</settings>
这在本地工作正常。
问题:如何在 docker 文件中重用它,尤其是涉及到 gitlab CI/CD
管道时。我是否应该向包含私有令牌的 gitlab 提交自定义 settings.xml
,以便 gitlab 管道知道如何访问包存储库?
Dockerfile
:
FROM $BUILD_IMAGE as dependencies
COPY pom.xml .
COPY src src
RUN mvn package
#RUN mvn package private_settings.xml #is that reasonable?
我会将令牌放入 $MAVEN_TOKEN
之类的 gitlab 变量中,然后在 settings.xml
中使用 $MAVEN_TOKEN
并将 settings.xml
提交到存储库。
您可以将其作为环境变量传递。
settings.xml
<settings>
<servers>
<server>
<id>gitlab-maven</id>
<configuration>
<httpHeaders>
<property>
<name>Private-Token</name>
<value>${MY_TOKEN}</value>
</property>
</httpHeaders>
</configuration>
</server>
</servers>
</settings>
Dockerfile
FROM $BUILD_IMAGE as dependencies
COPY pom.xml .
COPY src src
COPY settings.xml settings.xml
ARG MY_TOKEN
RUN mvn package
RUN mvn package -s settings.xml
然后,使用docker build
docker build --build-arg MY_TOKEN=$MY_TOKEN -t image-name:tag .
docker
将从 OS.