Как объединить Dockerfiles в gitlab ci? - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть этот 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

Я нашел Dockerfile с готовым Headless Chrome, поэтому мне нужнообъединить Maven: последнее изображение с этим новым изображением https://hub.docker.com/r/justinribeiro/chrome-headless/

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Вы можете написать новый файл Docker, выбрав maven:latest в качестве базового образа.(Это означает, что есть все последние зависимости от изображений maven).Вы можете сослаться на эту ссылку , чтобы написать файл Docker.

Поскольку базовый образ maven: latest представляет собой файл образа Debian и файл Docker, содержащий Dockerfile с заголовком Chrome без заголовка,также образ Debian, поэтому все команды ОС одинаковы.Таким образом, вы можете написать файл Docker, как показано ниже, где базовый образ 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, вы можете собрать его, используя dokcer build . из того же хранилища, что и Dockerfile.Затем вы можете отправить это в концентратор докеров или в свой собственный реестр, где ваш бегун gitlab может получить доступ к образу докера.Удостоверьтесь, что вы отметили образ докера по своему предпочтению в качестве примера, давайте подумаем, что это тег, и вы отправляете его в локальный репозиторий {your-docker-repo}/maven-with-chrome-headless:1.0.0

Затем используйте этот предыдущий тег в файле gitlab-ci.yml как image: {your-docker-repo}/maven-with-chrome-headless:1.0.0

0 голосов
/ 20 декабря 2018

Вы не"комбинируете" док-контейнеры.Вы помещаете разные сервисы в разные контейнеры и запускаете их все вместе.Посмотрите на kubernetes (теперь он имеет общую поддержку gitlab) или выберите более простое решение, такое как docker-compose или docker-swarm.

. Для интеграционных тестов мы используем docker-compose.

.В любом случае, если вы используете docker-compose, вы, вероятно, попадете в ситуацию, в которой вам нужен так называемый docker-in-docker.Это зависит от типа работника, которого вы используете для выполнения заданий gitlab.Если вы используете shell executor, все будет хорошо.Если вы используете docker executor, вам придется правильно его настроить, потому что вы не можете вызвать docker из docker без дополнительной ручной настройки.

Если использование нескольких контейнеров не ваш выбор, и вы определенноЕсли вы хотите поместить все в один контейнер, рекомендуется использовать супервизор для запуска процессов внутри контейнера.Один из вариантов supervisord: http://supervisord.org/

...