Java Maven将下载挂在Docker容器中
我有一个带有gitlab ci的gitlab和一个在CoreOs机器上运行良好的runner 所有3个服务都使用以下dockerfiles服务文件和生成脚本运行: 生成脚本:Java Maven将下载挂在Docker容器中,java,maven,gitlab,coreos,Java,Maven,Gitlab,Coreos,我有一个带有gitlab ci的gitlab和一个在CoreOs机器上运行良好的runner 所有3个服务都使用以下dockerfiles服务文件和生成脚本运行: 生成脚本: git submodule update --init ls -la mvn install CI服务: [Unit] Description=CI # Requirements Requires=docker.service Requires=db.service
git submodule update --init
ls -la
mvn install
CI服务:
[Unit]
Description=CI
# Requirements
Requires=docker.service
Requires=db.service
Requires=gitlab.service
Requires=redis.service
# Dependency ordering
After=docker.service
After=db.service
After=gitlab.service
After=redis.service
[Service]
User=core
# Let the process take awhile to start up (for first run Docker containers)
TimeoutStartSec=0
# Get CoreOS environmental variables
EnvironmentFile=/etc/environment
# Pre-start and Start
## Directives with "=-" are allowed to fail without consequence
KillMode=none
Restart=always
RestartSec=2
ExecStartPre=-/usr/bin/docker kill ci
ExecStartPre=-/usr/bin/docker rm ci
ExecStartPre=/usr/bin/docker pull sameersbn/gitlab-ci:5.2.0
ExecStart=/usr/bin/docker run --name ci \
-e 'DB_TYPE=mysql' -e 'DB_HOST=${COREOS_PRIVATE_IPV4}' -e 'DB_NAME=***' -e 'DB_USER=***' -e 'DB_PASS=********'\
-e 'REDIS_HOST=${COREOS_PRIVATE_IPV4}' -e 'REDIS_PORT=6379'\
-e 'GITLAB_URL=http://${COREOS_PRIVATE_IPV4}:8081/'\
-e 'GITLAB_CI_HOST=${COREOS_PRIVATE_IPV4}'\
-e 'GITLAB_CI_PORT=8080'\
-e 'GITLAB_CI_HTTPS=true'\
-e 'GITLAB_CI_EMAIL=*****************'\
-e 'SMTP_USER=**********' -e 'SMTP_PASS=**********'\
-p 8080:80 \
sameersbn/gitlab-ci:5.2.0
# Stop
ExecStop=/usr/bin/docker stop ci
CI runner服务:
[Unit]
Description=CI Runner Maven & Dart
# Requirements
Requires=docker.service
Requires=ci.service
Requires=db.service
Requires=gitlab.service
Requires=redis.service
# Dependency ordering
After=docker.service
After=ci.service
After=db.service
After=gitlab.service
After=redis.service
[Service]
User=core
# Let the process take awhile to start up (for first run Docker containers)
TimeoutStartSec=0
RemainAfterExit=yes
# Get CoreOS environmental variables
EnvironmentFile=/etc/environment
#Pre-start and Start
## Directives with "=-" are allowed to fail without consequence
ExecStartPre=-/usr/bin/docker kill ci-runner-maven-dart
ExecStartPre=-/usr/bin/docker rm ci-runner-maven-dart
ExecStartPre=/usr/bin/docker pull registry.globaleda.pt/globaleda/ci-runner-maven-dart:latest
ExecStart=/usr/bin/docker run --name ci-runner-maven-dart -d \
-v /data/ci-runner-maven-dart:/home/gitlab_ci_runner/data \
registry.globaleda.pt/globaleda/ci-runner-maven-dart:latest
# Stop
ExecStop=/usr/bin/docker stop ci-runner-maven-dart
Ci runner dockerfile:
FROM lemonbar/gitlab-runner-jdk-maven:1.0
MAINTAINER jrofurtado@gmail.com
RUN apt-get update
RUN apt-get install curl -y
# Install dartIn the dockerfile i added ENV MAVEN_OPTS -Djava.net.preferIPv4Stack=true
RUN apt-get install apt-transport-https -y
RUN sh -c 'curl https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -'
RUN sh -c 'curl https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list > /etc/apt/sources.list.d/dart_stable.list'
RUN apt-get update
RUN apt-get install dart -y
ENV DART_HOME /usr/lib/dart
RUN apt-get -y install ca-certificates curl
ADD globaleda.crt /usr/local/share/ca-certificates/
RUN update-ca-certificates
RUN git config --global http.sslverify false
RUN apt-get update
RUN curl -sSL https://get.docker.com/ubuntu/ | sudo sh
ENV DOCKER_HOST tcp://*************
ADD .dockercfg /
RUN rm -f /app/init
ADD init /app/
RUN chmod 777 /app/init
Ci dockerfile是sameersbn/gitlab Ci:5.2.0的未修改版本
当我使用mvn install编译maven项目时,它开始下载所需的工件,下载挂起,如果我反复尝试下载,它会成功地完全下载问题是我需要一次下载所有内容而不中断它会继续,因为我将所有下载内容存储在映射卷上
意见:
-我在本地计算机上而不是服务器上部署了Ci runner容器,并链接到gitlab Ci,问题仍然存在
-如果您使用docker enter script或docker exec container bash进入容器并在终端上运行mvn install,它将按其应该的方式下载所有内容,尽管在构建中下载时会挂起
-我尝试在CI Runner的dockerfile上使用将MAVEN_OPTS设置为-Djava.net.preferIPv4Stack=true,还尝试将其包含在CI Runner的构建脚本中以强制此变量:
在dockerfile中,我添加了ENV MAVEN_OPTS-Djava.net.preferIPv4Stack=true
在构建脚本中,我添加了MAVEN_OPTS=-Djava.net.preferIPv4Stack=true
-在调试模式-e下运行或读取日志我仅有的信息是:下载超时
更新:Maven实际上没有挂起,构建已成功完成。但运行程序没有与gitlab ci通信,表示由于响应错误,它已成功运行:500
> 2015-01-02 18:37:54 +0000 | Submitting build 439 to coordinator...response error: 500
> 2015-01-02 18:38:02 +0000 | Submitting build 439 to coordinator...response error: 500
> 2015-01-02 18:38:06 +0000 | Completed build 439, success.
> 2015-01-02 18:38:06 +0000 | Submitting build 439 to coordinator...response error: 500
> 2015-01-02 18:38:15 +0000 | Submitting build 439 to coordinator...response error: 500
> 2015-01-02 18:38:18 +0000 | Completed build 439, success.
> 2015-01-02 18:38:18 +0000 | Submitting build 439 to coordinator...response error: 500
> 2015-01-02 18:38:27 +0000 | Submitting build 439 to coordinator...response error: 500
> 2015-01-02 18:38:30 +0000 | Completed build 439, success.
> 2015-01-02 18:38:30 +0000 | Submitting build 439 to coordinator...response error: 500
> 2015-01-02 18:38:39 +0000 | Submitting build 439 to coordinator...response error: 500
似乎是网络权限/防火墙问题。尝试使用脚本正在运行的同一用户,再次测试mvn install命令,看看它是否下载了所需的内容。我刚刚测试了您所说的内容,并且两个用户都是root用户,所以这不是问题=挂起的是docker run命令吗?我以前和docker exec玩得很开心。1.TTYS2的乐趣。挂起/冻结docker exec在超时情况下运行。1.jenkins作业->脚本ssh到测试驱动程序->ssh到测试中的系统->bash脚本->调用docker exec。Ssh-tty标志必须以特定的方式使用,以使事情正常工作。2.似乎有各种各样的docker exec悬而未决的问题,例如,我的经历中有一个特别的问题:老实说,我记不起来已经快两年了,但我想是的