我正在尝试使用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个选项太过分了-我不认为没有简单的解决方案 我失败的2个选项,因为apt-get对于基于docker的映像不起作用,所以我们再次来到第一个选项