Jenkins:使用外部脚本与在Groovy中编写作业

Jenkins:使用外部脚本与在Groovy中编写作业,jenkins,groovy,jenkins-pipeline,jenkins-groovy,Jenkins,Groovy,Jenkins Pipeline,Jenkins Groovy,在我目前工作的一家公司,Jenkins的大部分工作都是编写脚本的,他们所做的就是用python或bash调用外部脚本,这实际上是一项繁重的工作。大概是这样的: timestamps { stage('deploy-site') { sh('python deploy-script.py') } } 我想知道这是否是一个好的实践,是否最好使用Groovy和Jenkins API编写作业步骤 有什么想法吗?每种方法的优缺点是什么?我认为这在很大程度上取决于你使用詹金斯的目的。Jen

在我目前工作的一家公司,Jenkins的大部分工作都是编写脚本的,他们所做的就是用python或bash调用外部脚本,这实际上是一项繁重的工作。大概是这样的:

timestamps {
  stage('deploy-site') {
    sh('python deploy-script.py')
  }
}
我想知道这是否是一个好的实践,是否最好使用Groovy和Jenkins API编写作业步骤


有什么想法吗?每种方法的优缺点是什么?

我认为这在很大程度上取决于你使用詹金斯的目的。Jenkins可以用于自动化各种事情,而不仅仅是持续集成。我使用它修补服务器、应用程序和数据库,自动化灾难恢复步骤,完全替代公司范围内的Cron,等等。所以在我的例子中,Groovy中没有很多API来处理这些事情,所以我的方法与您的方法非常相似。但是,我确实有很多用Groovy编写的流程的逻辑,比如知道在哪里运行东西,哪台服务器目前正在生产,哪台是DR。我使用Groovy的功能进行参数设置、发送电子邮件、移动文件等,最好的事情之一就是日志记录。我所有的脚本都会转到标准输出,这样Jenkins就可以捕捉到它,并可以使用它的日志解析功能来解析错误。因此,即使在使用shell脚本进行繁重的工作时,Jenkins也会带来很多东西来增强这一点

希望正在调用的脚本处于某种版本控制之下。否则,如果这些脚本运行在不同的构建节点上,则必须对其进行更新可能会有问题


如果是后者,我会将它们放在git repo中,并在必要时为每个构建克隆它们。

如果团队中的每个人都是python专家,那么为什么不这样做呢


我认为在jenkins声明性管道中加入更多的逻辑有助于跨多个工件/团队统一构建过程,因为它具有特定的结构。另外,它可能有助于在生产代码和构建代码之间进行拆分

问题是,团队中是否有人必须手动运行
python deploy script.py
?如果是的话,那么维护
deploy script.py
是一个不错的选择,因为您无法在Jenkins之外轻松地手动运行Jenkins代码。

如果您选择该路线,稳定性和安全性肯定会提高,但相关员工也会有一个学习曲线和提升时间。您指的是哪条路线。使用外部脚本进行重载?或者只使用Groovy和Jenkins API?脚本受源代码控制,因此,没有问题。我们的用例与您的非常相似,除了CI之外,我们在很多方面都使用Jenkins,所以我想我们不是唯一这样做的人。非常感谢。