我有这个gitlab-ci.yml来构建我的SpringBoot应用程序:
image: maven:latest
variables:
MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
cache:
paths:
- .m2/repository/
- target/
build:
stage: build
script:
- mvn $MAVEN_CLI_OPTS clean compile
only:
- /^release.*/
test:
stage: test
script:
- mvn $MAVEN_CLI_OPTS test
- "cat target/site/coverage/jacoco-ut/index.html"
only:
- /^release.*/
现在,我需要在测试阶段运行另一个作业:集成测试。我的应用程序在带有内存数据库的Headless Chrome上运行集成测试,我需要在Windows上执行的所有操作是:mvn integration-test
我发现一个已经准备好无头Chrome的Dockerfile,所以我需要将maven:latest图像与此新图像https://hub.docker.com/r/justinribeiro/chrome-headless/
结合起来我该怎么做?
答案 0 :(得分:1)
您可以通过选择@pytest.mark.parametrize('add_surname,age,expected',
[[NAME1, AGE1, OUTPUT1],
[NAME2, AGE2, OUTPUT2]],
indirect=['add_surname'])
作为基础映像来编写新的docker文件。 (这意味着所有Maven最新的图像依赖项都在那里)。您可以将此link参阅如何编写docker文件。
由于maven:latest的基本映像是debian映像,而包含具有Headless Chrome的Dockerfile的docker文件也是debian映像,因此所有OS命令都是相同的。因此,您可以像下面这样编写一个docker文件,其中基本映像为maven:latest
,其余映像与here相同。
maven:latest
我已经检查过了,它工作正常。一旦编写了FROM maven:latest
LABEL name="chrome-headless" \
maintainer="Justin Ribeiro <justin@justinribeiro.com>" \
version="2.0" \
description="Google Chrome Headless in a container"
# Install deps + add Chrome Stable + purge all the things
RUN apt-get update && apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
--no-install-recommends \
&& curl -sSL https://dl.google.com/linux/linux_signing_key.pub | apt-key add - \
&& echo "deb https://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list \
&& apt-get update && apt-get install -y \
google-chrome-beta \
fontconfig \
fonts-ipafont-gothic \
fonts-wqy-zenhei \
fonts-thai-tlwg \
fonts-kacst \
fonts-symbola \
fonts-noto \
ttf-freefont \
--no-install-recommends \
&& apt-get purge --auto-remove -y curl gnupg \
&& rm -rf /var/lib/apt/lists/*
# Add Chrome as a user
RUN groupadd -r chrome && useradd -r -g chrome -G audio,video chrome \
&& mkdir -p /home/chrome && chown -R chrome:chrome /home/chrome \
&& mkdir -p /opt/google/chrome-beta && chown -R chrome:chrome /opt/google/chrome-beta
# Run Chrome non-privileged
USER chrome
# Expose port 9222
EXPOSE 9222
# Autorun chrome headless with no GPU
ENTRYPOINT [ "google-chrome" ]
CMD [ "--headless", "--disable-gpu", "--remote-debugging-address=0.0.0.0", "--remote-debugging-port=9222" ]
,就可以使用Dockerfile
从与Dockerfile相同的存储库中进行构建。然后,您可以将其推送到docker hub或您自己的注册表,您的gitlab运行程序可以在其中访问docker映像。确保以示例方式标记您喜欢的docker映像,让我们以为该标记为例,然后将其推送到本地存储库dokcer build .
然后将gitlab-ci.yml文件中的先前标记用作{your-docker-repo}/maven-with-chrome-headless:1.0.0
答案 1 :(得分:0)
您不要“合并” Docker容器。您将不同的服务放入不同的容器中,然后一起运行它们。看一下kubernetes
(现在它在gitlab
中提供了通用支持),或者选择更简单的解决方案,例如docker-compose
或docker-swarm
。
对于集成测试,我们使用docker-compose
。
无论如何,如果使用docker-compose
,您可能会陷入需要所谓的docker-in-docker
的情况。这取决于您用来运行gitlab作业的工作程序类型。如果您使用shell
执行程序,一切都会好起来的。如果您使用的是docker
执行器,则必须正确设置它,因为您不能从docker
调用docker
而不进行其他手动设置。
如果不是选择使用多个容器,并且您肯定要全部放入一个容器中,则建议的方法是使用管理程序在容器内启动进程。选项之一是supervisord
:http://supervisord.org/