3

我最近开始使用Jenkinsfile管道插件,我想知道当测试通过或合并拉取请求时,让我的盐主服务器运行命令的最佳方法是什么。

有这个jenkinsci/saltstack-plugin效果很好(不处理彩色输出,但没关系)。

  1. 一种。在 a 内运行盐步骤会更好Jenkinsfile吗?
    湾。与上述插件交互的语法是什么?

  2. 或者我应该将我的 Salt master(位于不同的服务器上)设置为 jenkins 从节点,并直接在 salt master 上执行命令。

此处草稿:

node("salt-master") {
    sh "salt -E 'some.target.*' state.sls some.state"
}

我认为选项 2 会起作用,但我还没有将 master 设置为 e jenkins slave。

4

2 回答 2

3

这是对旧帖子的更新,但如果它对任何人都有帮助,jenkins wiki 上给出了 saltplugin 作为 JenkinsFile 中的一个步骤的语法: https ://wiki.jenkins-ci.org/display/JENKINS/ saltstack插件

像下面这样的东西会给你 prettyprint json 输出

import groovy.json.*

node() {
  saltresult = salt authtype: 'pam', clientInterface: local(arguments: '"ls -la"', blockbuild: true,
function: 'cmd.run', jobPollTime: 16, target: '*', targetType: 'glob'),
credentialsId: 'a3d814c2-84ed-4752-94a8-271791bb5375', servername: 'http://localhost:8000'
  def prettyJson = JsonOutput.prettyPrint(saltresult)
  println(prettyJson)
}

使用 jenkins 插件的一个好处是您可以访问其他 salt-api 端点,例如 hook。我们的 jenkins 服务器在无法访问互联网的内部网络上,但我们的 saltmaster 在另一个网络上并且能够出去。然后,在我们的 JenkinsFiles 中,我们可以发送一个 salt hook 调用,它会在 saltmaster 上启动一个反应器,以向 Slack 或 MS Teams 发送通知。因此,我们的 jenkins 服务器能够将构建状态发布到 Internet 服务,而自身无法访问 Internet。

于 2017-06-24T06:54:01.177 回答
2

两者都是我们 CI/CD 流程JenkinsSaltStack核心。Jenkins负责工件(debs、rpms、Docker 镜像、静态文件等),同时SaltStack在我们的集群中执行工件的部署。Jenkins集群并SaltMaster生活在不同的主机上。

不幸的是,我既不知道Jenkinsfile(我们现在一定要使用Jenkins 1.x),也不知道SaltMaster变成Jenkins奴隶的选择。目前,我们的 CD 包含几十个不同的Jenkins作业(由我们在后端拥有的许多微服务),这些作业由相应的上游构建作业触发。每个部署作业都有一个saltstack-plugin步骤。

SaltMaster在不同的端口上提供入口点 - SaltApi. 可能是我们/etc/salt/master可能有用的一部分:

external_auth:
  pam:
    jenkins:
    - .*

rest_cherrypy:
  port: 8001
  host: 0.0.0.0

因此,在我们的例子中,通过Jenkins身份验证并在集群中启动 common salt RPC。没有管道,因为我们的项目太复杂,管道不合适。SaltMasterSaltAPI

于 2016-09-11T21:24:13.077 回答