我正在使用Jenkins来触发Ansible剧本。我想传递一系列计算机名称,以便Ansible剧本能够触发剧本并逐一对机器进行成像。
为了做到这一点,我相信我需要一个foreach循环。
我在groovy / Jenkins方面没什么技巧,遇到了一个问题。
error = "Expected a symbol @ line..."
这指的是HOSTS.each {item - >
有人可以帮助我吗?我的脚本如下(我已经编辑了一些私人数据)
pipeline {
agent any
// every day
triggers {
cron('H 7 * * *')
}
environment {
HOSTS = ['node1','node2']
}
stages {
stage('MachineDB Scheduler') {
steps {
HOSTS.each { item -> // review
HOSTNAME = ${item} // review
ansibuildPlaybookperf(
sshUser: env.USER,
vaultUser: env.USER,
server: "$SERVER",
dir: "$HOMEDIR/$BUILD_TAG",
playbook: "$PLAYBOOK",
extras: "--vault-password-file passmgr.sh",
extraVars: "$VARS_JENKINS"
)
}
}
}
}
}
答案 0 :(得分:0)
我对ansible并不是很了解但也许这会有所帮助。 此管道显示了PC的列表。在声明性管道中,我调用了一个在管道之后定义的groovy函数。在这个函数中,我浏览列表并通过每个PC名称。
def list = [
'PCNAME1',
'PCNAME2',
'PCNAME3'
]
pipeline {
agent any
stages {
stage('Loop through PCs') {
steps {
loopPC(list)
}
}
}
}
def loopPC(list){
list.each {
println "Computer ${it}"
}
}
输出:
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Loop through PCs)
[Pipeline] echo
Computer PCNAME1
[Pipeline] echo
Computer PCNAME2
[Pipeline] echo
Computer PCNAME3
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
您还可以在声明性管道中使用脚本块立即执行脚本。它不太干净,但在开始时可能更容易并使其工作(并且更接近您的尝试):
def list = [
'PCNAME1',
'PCNAME2',
'PCNAME3'
]
pipeline {
agent any
stages {
stage('Loop through PCs') {
steps {
script {
list.each {
println "Computer ${it}"
}
}
}
}
}
}