在我目前正在工作的一家公司中,我们大多数的Jenkins作业都是脚本化的,而他们所做的只是在python或bash中调用一个外部脚本,这实际上是很繁重的工作。像这样:
timestamps {
stage('deploy-site') {
sh('python deploy-script.py')
}
}
我想知道这是否是一个好习惯,是否最好使用Groovy和Jenkins API编写工作步骤。
有什么想法吗?每种方法的利弊是什么?
答案 0 :(得分:0)
我认为这很大程度上取决于您使用Jenkins的目的。 Jenkins可用于使各种事情自动化,而不仅仅是持续集成。我将其用于修补服务器,应用程序和数据库,自动执行灾难恢复步骤,在整个公司范围内完全替代Cron,等等。因此,就我而言,Groovy中没有很多API可以处理此类问题,因此我的方法与那里的方法非常相似。但是,我确实围绕着用Groovy编写的这些流程构建了很多逻辑,例如知道在哪里运行事物,当前在生产的服务器,在DR。而且我将Groovy功能用于参数,电子邮件,移动文件等。最好的事情之一是日志记录。我所有的脚本都转到STDOUT,以便Jenkins捕获该脚本并可以使用其日志解析功能来解析错误。因此,即使在使用shell脚本进行繁重的工作时,Jenkins也带来了很多改进。
答案 1 :(得分:0)
希望正在调用的脚本处于某种版本控制之下。如果不是这样,如果脚本在不同的构建节点上运行,则必须维护这些脚本的更新。
如果是后者,我会把它们放在git repo中,并在必要时针对每个构建将它们克隆下来。
答案 2 :(得分:0)
如果每个人都是团队中的python专家,那么为什么不这样做呢?
我认为,在jenkins声明性管道中添加更多逻辑可以帮助跨多个工件/团队统一构建过程,因为它具有一定的结构。另外,它可能有助于在生产代码和构建代码之间进行拆分。
答案 3 :(得分:0)
问题是,团队中是否有人必须手动运行python deploy-script.py
?如果可以,那么维护deploy-script.py
是正确的方法,因为您无法在Jenkins之外轻松地手动运行Jenkins代码。