【发布时间】:2018-10-03 17:16:09
【问题描述】:
我正在尝试使用 jenkinsfile 和 docker-compose 安装 jenkins 管道。 我的 docker-compose 运行良好。但是接下来的步骤(Jenkinsfile 中的测试阶段)不要运行。
如何告诉 jenkins“ok,docker 容器很好,你可以做接下来的事情”但是防止 docker 容器停止(这就是为什么我把 rails s 放在命令”
这里是 docker-compose.yml:
version: '3'
services:
db-test:
image: postgres
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=secret
- POSTGRES_DB=server_dev
volumes:
- ./tmp/db:/var/lib/postgresql/data
ports:
- "${POSTGRES_PORT}:5432"
web-test:
image: starefossen/ruby-node
command: bash -c "cd /app && bundle install && rake db:migrate && rails s"
volumes:
- /home/xero/jenkins/jenkins_home/workspace/project-open-source:/app # Workspace
- /home/cache/bundle:/usr/local/bundle # Cache gemfiles
- /home/cache/node_modules:/app/node_modules # Cache yarn files
- /home/xero/.ssh:/root/.ssh # SSH keys (for git)
ports:
- "3000:3000"
depends_on:
- db-test
还有 Jenkinsfile :
pipeline {
agent any
options {
timeout(time: 1, unit: 'DAYS')
disableConcurrentBuilds()
}
stages {
stage("Init") {
agent any
steps { initialize() }
}
stage("Test") {
agent any
steps { test() }
}
}
}
def initialize() {
sh 'docker-compose -f docker-compose-jenkins.yml up --build --abort-on-container-exit'
}
def test() {
sh 'docker exec -ti web-test sh -c "cd app/ && bundle exec rspec -f documentation"'
}
【问题讨论】:
-
听起来你正在寻找与
--abort-on-container-exit不兼容的-d/--detachut -
这不是我想要的。 --detach 会触发下一步,docker可能还没准备好……
-
我相信您将不得不在后台处理
docker-compose时实现某种“自旋循环”,因为docker-compose本身会阻塞前景。
标签: ruby-on-rails docker jenkins docker-compose jenkins-pipeline