在 Groovy 脚本中循环子字符串列表

问题描述 投票:0回答:1

我正在尝试使用 Groovy 脚本创建 Jenkins 管道来调用 Ansible 剧本。我需要将几个变量和值对传递给 ansible 剧本。我使用一个函数来调用剧本,Groovy 看起来像这样:

void RunAnsiblePlaybook(String playbookPath, String playbookParam = '') {

         for (item in playbookParam) {
             extras += " -e ${item}"
         } 
         ansiblePlaybook become: true,
                         colorized: true,
                         extras: extras,
                         installation: 'ansible',
                         vaultCredentialsId: 'AnsibleVaultPassword',
                         playbook: playbookPath
}

pipeline {
    agent any

    stage('Get prod copy') {
    steps { 
        script {
                RunAnsiblePlaybook("",
                                "jenkins/ansible_playbooks/try.yml",
                                "['source_instance=${env.SOURCE_INSTANCE}','source_instance=${env.TARGET_INSTANCE}','specific_snapshot_name=${A_SPECIFIC_SNAPSHOT_NAME}']")
}

变量

SOURCE_INSTANCE
TARGET_INSTANCE
A_SPECIFIC_SNAPSHOT_NAME
在管道中定义。

我希望 RunAnsiblePlaybook 函数将

-e source_instance=apple -e source_instance=orange -e specific_snapshot_name=berry
传递给剧本,但相反,这是我从输出中看到的:

11:58:18  [test_grovvy_script] $ ansible-playbook _new/google/ansible/ansible-root/playbooks/utility/prodcopy/dry.yml -b --become-user root --vault-password-file /var/lib/jenkins/workspace/_migration_jobs/test_ppc/vault6368263148356134694.password --private-key=**** -vvv
 -e [ -e " -e s -e o -e u -e r -e c -e e -e _ -e i -e n -e s -e t -e a -e n -e c -e e -e = -e a -e p -e p -e l -e e " -e , -e " -e t -e a -e r -e g -e e -e t -e _ -e i -e n -e s -e t -e a -e n -e c -e e -e = -e o -e r -e a -e n -e g -e e ............]

它将每个字母作为一个项目拾取。

我怎样才能接载

-e source_instance=apple -e source_instance=orange -e specific_snapshot_name=berry

谢谢, 菲利普

ansible jenkins-groovy
1个回答
0
投票

这看起来符合预期,因为您的

playbookParam
String
。由于它是 Groovy,我认为您实际上可以省略类型,或者使用
List

但一般来说,我建议不要使用 Groovy 包装器,并建议使用

sh
管道步骤、inventoriesAnsible 环境变量(只要可能)以降低复杂性并保持执行字符串尽可能短且易于理解。您还可以从文件中传递额外的变量,或使用
env
查找
从环境变量中获取变量值。

© www.soinside.com 2019 - 2024. All rights reserved.