【发布时间】:2019-07-12 09:35:20
【问题描述】:
我有一个工作良好的 docker-compose 可以在我的本地环境中工作和玩耍。 docker compose 将添加我的网站、mysql 和其他一些东西,以使一切正常。
所有必要的文件现在都在我的一个 docker 容器中,我可以
docker cp container_name:/var/www/html/. dist/
将我的文件放在我的本地计算机上的 dist 目录中,我可以在其中将文件传输到我的服务器。
下一步是自动化整个过程,因为我想使用 Jenkins。
这不是我第一次使用 Jenkins,但由于某种原因我无法让它工作。
我将我的项目从 SCM 签出到 Jenkins 中,并且能够运行 docker-compose up --build,但是当我不使用 -d 参数时,它会卡在这个命令行中,因为 docker-compose up -- build 只会以 CTRL+C 终止,因此我使用 -d 参数。
后来我用了
docker cp container_name:/var/www/html/. dist/
将文件移动到我的 Jenkins 目录中,但这里存在下一个问题:由于我使用 -d 参数,所以 docker cp 命令不会等待 docker-compose up --build 完全完成。
所以我尝试使用类似的东西
docker-compose logs -f -t | sed '/^Almost ! Starting web server now$/ q'
在构建命令之后确定构建过程中的一个点,我确信自定义 docker_run.sh 等文件生成的所有文件和安装都已执行。
但它不起作用。要么工作永远不会结束并卡住,要么我的命令没有完全等待 docker-compose 日志中的“几乎!现在正在启动 web 服务器”行,并且将直接复制文件,而 docker_run.sh 没有在其中完成修改容器。
这是我当前项目部署作业中的 jenkins shell 脚本。
# Create a dist directory
mkdir dist
# Build Docker
docker-compose up -d --build
# Wait for the logs to output "Almost ! Starting web server now"
docker-compose logs -f -t | sed '/^Almost ! Starting web server now$/ q'
# Copy files from container to jenkins directory "dist"
docker cp container_name:/var/www/html/. dist/
# Stop the containers, as I dont need them anymore
docker-compose down
# Go into the dist folder
cd dist
# Send files to remote
rsync -aHAXx --numeric-ids -e "some_parameters_here" . ssh_user@ssh_ip:httpdocs
我希望 docker-compose 由 jenkins 启动,jenkins 等待它准备好,然后将文件 cp 到 jenkins 目录,然后发送到远程服务器。
如上所述,实际结果要么是 Jenkins 永无止境的工作,要么是 Jenkins 从 docker 发送文件而 docker 没有 100% 构建。
【问题讨论】:
-
你在 sed 中的正则表达式是错误的,你能从日志中复制洞线
-
当我通过 cli 连接到 jenkins 服务器时,SED 进程正常工作。实际上我忘了提到这是否是归档我想做的事情的正确方法..
-
你可以在你的 docker-compose 中使用健康检查和“依赖”来让 docker 自动配置等待时间。我还在容器本身中使用了初始化脚本来检查所需的远程服务,例如在完成自己的启动之前的 postgres 实例。
-
顺便说一句,我们让 jenkins 从一个私人仓库中检查图像,并使用一个 groovy 管道在本地构建它们。事实证明,这对我们来说非常强大。
-
嗨@Dov Rine,我进行健康检查并依赖于 yml 文件中的内容。问题是 docker-compose 永远不会自行结束,因为它以侦听 localhost 的 apache 服务器结束。就您而言,“在本地构建它们”是什么意思?詹金斯内部?还是在哪里?你是如何配置你的 groovy 管道的?我很感兴趣!
标签: shell docker jenkins docker-compose continuous-integration