我最近开始使用Jenkinsfile
和pipeline plugin,我想知道在测试通过或合并时我的盐主服务器运行命令的最佳方法是什么拉请求例如。
这个jenkinsci/saltstack-plugin效果很好(不处理彩色输出,但没关系)。
一个。 在Jenkinsfile
范围内运行salt步骤会更好吗?
湾与上述插件进行交互的语法是什么?
或我应该设置我的Salt master (位于不同的服务器上)作为jenkins slave节点并直接在salt master上执行命令
这里草稿:
node("salt-master") {
sh "salt -E 'some.target.*' state.sls some.state"
}
我认为选项2可行,但我还没有将主人设置为e jenkins奴隶。
答案 0 :(得分:3)
这是对旧帖子的更新,但是如果它对任何人都有帮助,那么作为JenkinsFile中的一个步骤的saltplugin的语法在jenkins wiki上给出: https://wiki.jenkins-ci.org/display/JENKINS/saltstack-plugin
以下内容将为您提供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中,我们可以发送一个盐钩调用,在saltmaster上启动一个反应堆向Slack或MS团队发送通知。因此,我们的jenkins服务器能够将构建状态发布到互联网服务,而无需访问互联网。
答案 1 :(得分:2)
Jenkins
和SaltStack
都是CI / CD流程的核心。 Jenkins
负责artifcats(deb
s,rpm
,Docker镜像,静态文件等),而SaltStack
则在我们的群集中执行工件的部署。 Jenkins
群集和SaltMaster
位于不同的主机上。
很遗憾,我并不知道Jenkinsfile
(我们现在必须使用Jenkins 1.x
),也不知道将SaltMaster
转换为{ {1}}奴隶。目前,我们的CD由几十个不同的Jenkins
工作(由我们后端的许多微服务组成)组成,这些工作由相应的上游构建作业触发。每个部署作业都有一个Jenkins
步骤。
saltstack-plugin
在不同的端口上提供入口点 - SaltMaster
。可能是SaltApi
的某些部分可能有用:
/etc/salt/master
因此,在我们的案例中,external_auth:
pam:
jenkins:
- .*
rest_cherrypy:
port: 8001
host: 0.0.0.0
通过Jenkins
向SaltMaster
进行身份验证,并在群集中启动常见的盐rpcs。没有管道,因为我们的项目太复杂,管道不合适。