如何将 shell 变量传递给 ansible playbook 命令
How to pass shell variable to ansible playbook command
我有这个 Jenkins 管道,我需要 运行 ansiblePlaybook() 命令和清单文件。清单文件确实包含日期(当前日期)部分(my-instance-ips-(mm-dd-yyyy))。在这里,我在创建 currentDate 变量并传递到管道脚本时遇到问题
詹金斯文件:
pipeline {
agent any
stages {
stage ( 'Executing shell script' ) {
steps {
script {
sh """
currentDate = "$(date +'%m-%d-%Y')"
inventory_file = "my-instance-ips-{$currentDate}.yml"
ansiblePlaybook (
playbook: 'task.yml',
inventory: $inventory_file,
installation: 'ansible-2.6.5','
-e "DATE = $currentDate")
"""
}
}
}
}
}
错误信息:
groovy.lang.MissingPropertyException: No such property: currentDate for class: groovy.lang.Bindin
有人可以帮我在管道脚本中创建当前日期,同样应该传递给 ansible playbook 命令吗?
看起来您正在调用 ansible 插件。如果那是您要实现的目标,那么您的 ansible 剧本调用不应在 sh
步骤内。
您需要先获取命令的输出,然后调用 ansible 插件。
import java.time.format.DateTimeFormatter
pipeline {
agent any
stages {
stage ( 'Executing shell script' ) {
steps {
script {
/* currentDate = sh (
script: "date +'%m-%d-%Y'"
returnStatus: true
).trim()
*/
cDate = java.time.LocalDate.now()
currentDate = cDate.format(DateTimeFormatter.ofPattern("MM-dd-yyyy"))
inventory_file = "my-instance-ips-${currentDate}.yml"
println inventory_file
ansiblePlaybook ([
playbook: 'task.yml',
// credentialsId: 'xxxx',
disableHostKeyChecking: true,
inventory: "${inventory_file}",
extraVars: [
DATE: "${currentDate}"
]
])
}
}
}
}
}
我有这个 Jenkins 管道,我需要 运行 ansiblePlaybook() 命令和清单文件。清单文件确实包含日期(当前日期)部分(my-instance-ips-(mm-dd-yyyy))。在这里,我在创建 currentDate 变量并传递到管道脚本时遇到问题
詹金斯文件:
pipeline {
agent any
stages {
stage ( 'Executing shell script' ) {
steps {
script {
sh """
currentDate = "$(date +'%m-%d-%Y')"
inventory_file = "my-instance-ips-{$currentDate}.yml"
ansiblePlaybook (
playbook: 'task.yml',
inventory: $inventory_file,
installation: 'ansible-2.6.5','
-e "DATE = $currentDate")
"""
}
}
}
}
}
错误信息:
groovy.lang.MissingPropertyException: No such property: currentDate for class: groovy.lang.Bindin
有人可以帮我在管道脚本中创建当前日期,同样应该传递给 ansible playbook 命令吗?
看起来您正在调用 ansible 插件。如果那是您要实现的目标,那么您的 ansible 剧本调用不应在 sh
步骤内。
您需要先获取命令的输出,然后调用 ansible 插件。
import java.time.format.DateTimeFormatter
pipeline {
agent any
stages {
stage ( 'Executing shell script' ) {
steps {
script {
/* currentDate = sh (
script: "date +'%m-%d-%Y'"
returnStatus: true
).trim()
*/
cDate = java.time.LocalDate.now()
currentDate = cDate.format(DateTimeFormatter.ofPattern("MM-dd-yyyy"))
inventory_file = "my-instance-ips-${currentDate}.yml"
println inventory_file
ansiblePlaybook ([
playbook: 'task.yml',
// credentialsId: 'xxxx',
disableHostKeyChecking: true,
inventory: "${inventory_file}",
extraVars: [
DATE: "${currentDate}"
]
])
}
}
}
}
}