jenkins - 如何在所有或部分服务器上运行詹金斯管道
问题描述
我有一个将文件复制到服务器的詹金斯管道。在工作中,我用 IP 定义了 3 台服务器。
我需要实现的是,用户可以通过在depoly_on_server_x下键入 yes 或 no 来选择在哪个服务器上部署副本。
在我的原始管道中,我使用的是 IP 列表 - 但请求正如我上面提到的我如何定义请求?
谢谢
server_1_IP - '1.1.1.1'
server_2_IP - '1.1.1.2'
server_3_IP - '1.1.1.3'
deploy_on_server_1 = 'yes'
deploy_on_server_2 = 'yes'
deploy_on_server_3 = 'no'
pipeline {
agent { label 'client-1' }
stages {
stage('Connect to git') {
steps {
git branch: 'xxxx', credentialsId: 'yyy', url: 'https://zzzz'
}
}
stage ('Copy file') {
when { deploy == yes }
steps {
dir('folder_a') {
file_copy(server_list)
}
}
}
}
}
def file_copy(list) {
list.each { item ->
sh "echo Copy file"
sh "scp 11.txt user@${item}:/data/"
}
}
解决方案
改用复选框怎么样?
您可以使用扩展选择参数根据服务器值创建一个复选框列表,当用户构建他选择相关服务器的作业时,此选定服务器列表将传播到具有选定值的作业,然后您可以使用为你的逻辑。
就像是:
pipeline {
agent { label 'client-1' }
parameters {
extendedChoice(name: 'Servers', description: 'Select servers for deployment', multiSelectDelimiter: ',',
type: 'PT_CHECKBOX', value: '1.1.1.1,1.1.1.2 ,1.1.1.3', visibleItemCount: 5)
}
stages {
stage('Connect to git') {
steps {
git branch: 'xxxx', credentialsId: 'yyy', url: 'https://zzzz'
}
}
stage ('Copy files') {
steps {
dir('folder_a') {
script{
params.Servers.split(',').each { server ->
sh "echo Copy file to ${server}"
sh "scp 11.txt user@${server}:/data/"
}
}
}
}
}
}
}
在 UI 中,它看起来像:
您还可以使用多选选择列表而不是复选框,或者如果您只想允许单个值,您可以使用单选按钮或单选选择列表。
如果您希望用户看到不同的值,那么那些将在代码中使用的值也是可能的,因为您可以在使用之前使用 groovy 操作输入值。
例如,如果您希望用户选项是,<Hostname>-<IP>
您可以将参数值更新为类似value: 'server1-1.1.1.1,server2-2.2.2.2'
,然后在您的代码中从给定值中提取相关 ip:
script {
params.Servers.split(',').each { item ->
server = item.split('-').last()
sh "echo Copy file to ${server}"
sh "scp 11.txt user@${server}:/data/"
}
}
推荐阅读
- flutter - Dart/Flutter 中的 onPressed() 属性中的 If Else 条件问题
- node.js - Mongoose:在预保存挂钩中更新文档
- ruby - 加载 RubyGems 插件时出错。无法加载此类文件
- python - 无法在 Visual Studio Code 中调试 Django 单元测试
- java - 如何在 Quarkus 上使用 OpenId 实现 websocket/sse?
- rest - API调用多个API时部分响应的Http状态
- azure - How to get ResourceId as output for VM when using copyIndex
- python - graphviz.Source() 中的 re.sub 是什么
- c++ - std::strong_ordering 如何仅适用于零?
- javascript - react-spring:从左上角淡入到右下角