如何在jenkins管道

时间:2018-01-13 11:02:21

标签: jenkins docker-compose

我已经设置了一个基于家庭的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'
    }
  }

}

2 个答案:

答案 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'
    }
  }
}