如何在Ansible中使用Jenkinsfile中的嵌套变量?

时间:2019-10-18 13:03:24

标签: ansible jenkins-pipeline

在我的Jenkins文件中,我将环境名称指定为环境变量:

environment {
   WORK_ENV = 'DEV'
} 

在我的Ansible脚本中,我有变量:

postfix:
  DEV: temp
  TEST: test

因此,现在取决于WORK_ENV变量的值,后缀应该更改。

我需要在Ansible中具有与此操作相同的功能:

{{ postfix.{{ WORK_ENV }} }}

我知道这条线不起作用,所以我正在寻找解决方法-有任何想法吗?

编辑:

我尝试查找:

{{ lookup('vars', 'postfix_' + work_env) }}

我有这样的var(宁愿使用以前的方式):

postfix_DEV: "temp"
postfix_UAT1: "TEST"

这是可行的,但是输出是错误的...

enter image description here

2 个答案:

答案 0 :(得分:0)

如果您的var确实在您的jenkins env中可用,并且您正在那里运行剧本,则可以尝试以下操作,它将lookup the value in your env vars

{{ postfix[lookup('env', 'WORK_ENV')] }}

如果这在您的情况下不起作用,您可以按照@Matt Schuchard在上面的评论中的建议,将额外的var传递给您的剧本。

答案 1 :(得分:0)

就我而言,当我使用它时,它可以工作:

- name: Run SQL scripts
  win_shell: |
    cd "{{ package_unzip_dest }}"
    Write-Output "Running script {{ item }}.sql"
    sqlcmd -S {{ server }} -U {{ db_user }} -P {{ db_password }} -i {{ item }}.sql -d {{ data_base }}_{{ lookup('vars', 'postfix_' + work_env) | to_nice_yaml | regex_replace('- ', '') }}
  with_items: "{{ scripts }}"
  vars:
    postfix_DEV: temp
    postfix_UAT1: TEST

在不使用to_nice_yaml的情况下,Unicode输出出现了问题。