我已经设置了一个基于家庭的CI服务器来处理个人项目。下面你可以看到分支“staging”会发生什么。它工作正常,但这种管道配置的问题是:
1)停止实例的唯一方法似乎是中止jenkins中的构建,导致退出代码143和构建标记为红色而不是绿色
2)如果机器重新启动,我必须手动触发构建
3)我想应该有更好的方法来解决这个问题?
由于
stage('Staging') {
when {
branch 'staging'
}
environment {
NODE_ENV = 'production'
}
steps {
sh 'docker-compose -f docker-compose/staging.yml build'
sh 'docker-compose -f docker-compose/staging.yml up --abort-on-container-exit'
}
post {
always {
sh 'docker-compose -f docker-compose/staging.yml rm -f -s'
sh 'docker-compose -f docker-compose/staging.yml down --rmi local --remove-orphans'
}
}
}
答案 0 :(得分:0)
那么,这里的目标是什么?您是否要部署到分期?如果是这样,那是什么意思?如果jenkins要启动一个长时间运行的进程(例如运行Web服务器的docker容器),则shell命令行必须能够启动,然后使其退出状态告诉jenkins管道启动是否成功。
一种选择是将docker compose包装在一个脚本中,该脚本执行,检查并使用适当的退出代码退出。另一种是使用另一种自动化工具来帮助(例如ansible)
第一个问题仍然是,您想让詹金斯做什么,以及如何在命令行上运行。如果可以对命令行建模,则可以将其封装在脚本文件中,并让jenkins启动它。
Jenkins管道代码看起来像groovy,也很像groovy。这可以使我们相信,将复杂的逻辑添加到管道中是个好主意,但是这使詹金斯变成了我们的IDE,这很难调试,并且我陷入了几次陷阱。
一种更简单的方法是拥有一些其他工具,让您可以轻松地在命令行上进行测试,然后让jenkins构建运行该命令行过程的环境。詹金斯(Jenkins)处理擅长的事情:
答案 1 :(得分:0)
我正在使用并行阶段。 这是一个最小的示例:
pipeline {
agent any
options {
parallelsAlwaysFailFast() // https://stackoverflow.com/q/54698697/4480139
}
stages {
stage('Parallel') {
parallel {
stage('docker-compose up') {
steps {
sh 'docker-compose up'
}
}
stage('test') {
steps {
sh 'sleep 10'
sh 'docker-compose down --remove-orphans'
}
}
}
}
}
post {
always {
sh 'docker-compose down --remove-orphans'
}
}
}