如何从 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