如何将 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}"
                         ]
                     ])
                   }
                 }
             }
           }
}