如何 运行 jenkins pipeline on all or some servers based
How to run jenkins pipeline on all or some servers based
我有一个将文件复制到服务器的 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/"
}
}
改用复选框怎么样?
您可以使用 Extended Choice Parameter 创建一个基于服务器值的复选框列表,当用户构建他 select 相关服务器的作业时,这个 selected 服务器列表将传播到具有 selected 值的作业,然后您可以将其用于您的逻辑。
类似于:
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 中它看起来像:
您还可以使用多个 select select 列表而不是复选框,或者如果您只想允许一个值,您可以使用单选按钮或单个 select select-列表。
如果您希望用户看到与代码中使用的值不同的值,这也是可能的,因为您可以在使用输入值之前使用 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/"
}
}
我有一个将文件复制到服务器的 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/"
}
}
改用复选框怎么样?
您可以使用 Extended Choice Parameter 创建一个基于服务器值的复选框列表,当用户构建他 select 相关服务器的作业时,这个 selected 服务器列表将传播到具有 selected 值的作业,然后您可以将其用于您的逻辑。
类似于:
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 中它看起来像:
您还可以使用多个 select select 列表而不是复选框,或者如果您只想允许一个值,您可以使用单选按钮或单个 select select-列表。
如果您希望用户看到与代码中使用的值不同的值,这也是可能的,因为您可以在使用输入值之前使用 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/"
}
}