如何在gitlabci中为基于Maven映像的阶段运行docker login命令

时间:2020-06-02 06:00:56

标签: docker maven gitlab-ci

我正在尝试使用Testcontainer进行项目的集成测试。我在本地成功实现了它,并且绝对没有Postgres或Rabbitmq之类的公共图像问题。当我尝试使用以图像形式存储在私有存储库(Google云注册中心)中的服务时,遇到了困难。我只需致电

就可以轻松解决该问题
docker login -u _json_key --password-stdin < $DOCKER_REGISTRY_JSON

然后,testcontainer可以自动提取图像并完成所有工作。当我在GitLabCI中部署它时出现了问题。我不能在同一阶段同时执行 mvn install docker login 命令。由于 dockerfile-maven-plugin 可以以某种方式看到位于gitlab上的json键,因此克服了将图像发布和标记到专用存储库中的问题。但是如果没有显式的docker login命令,Testcontainer将无法执行此操作。这是现在的样子:

stages:
  - build
  - deploy

variables:
  MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
  MAVEN_CLI_OPTS: "--batch-mode --show-version"
#other vars

build:
  stage: build
  image: maven:3.6.1-jdk-11-slim
  script:
# offcourse is not working cause we are maven based image
#    - docker login -u _json_key --password-stdin https://eu.gcr.io < $DOCKER_REGISTRY_JSON
    - mvn $MAVEN_CLI_OPTS install -Denv.CI_REGISTRY_TAG=$CI_COMMIT_REF_SLUG-$CI_PIPELINE_IID -Pintegration
    - cd notifications-app
    - mvn dockerfile:build dockerfile:push -Denv.CI_REGISTRY_TAG=$CI_COMMIT_REF_SLUG-$CI_PIPELINE_IID #dockerfile-maven-plugin do the magic with authorisation
    - mvn dockerfile:tag dockerfile:push -Denv.CI_REGISTRY_TAG=$CI_COMMIT_REF_SLUG-latest
  artifacts:
    reports:
      junit:
        - "**/target/surefire-reports/*.xml"
  services:
    - docker:$DOCKER_TAG-dind
  cache:
    paths:
    - .m2/repository

我试图在上一个阶段进行docker登录,如下所示:

stages:
  - prebuild
  - build
  - deploy

prebuild:
  stage: prebuild
  image: docker:git
  script:
    - docker login -u _json_key --password-stdin https://eu.gcr.io < $DOCKER_REGISTRY_JSON

build:
  stage: build
  image: maven:3.6.1-jdk-11-slim
  script:
    - mvn $MAVEN_CLI_OPTS install -Denv.CI_REGISTRY_TAG=$CI_COMMIT_REF_SLUG-$CI_PIPELINE_IID -Pintegration

泊坞窗登录正常,但由于它们是不同的容器,下一阶段看不到已登录

我看到两个选择:

  1. 使用docker和maven创建自定义docker镜像
  2. 设置基本映像docker:git并手动安装Maven

对我来说,1个选项太过分了-我不认为没有简单的解决方案 我失败的2个选项,因为apt-get对于基于docker的映像不起作用,所以我们再次来到第一个选项

0 个答案:

没有答案
相关问题