【问题标题】:Injecting Gitlab CI variables into Ansible将 Gitlab CI 变量注入 Ansible
【发布时间】:2020-03-11 16:23:14
【问题描述】:

我正在使用 Gitlab CI 运行程序来执行 Ansible 剧本,并且无法将 Gitlab 中定义的变量推送到 Ansible。我知道我可以使用lookup('env','var') 来获取变量,但这似乎在 yml 库存文件中不起作用。例如:

# List everything in vCenter
- ansible-inventory --list -i vSphere/vxrail.vmware.yml

vxrail.vmware.yml

plugin: vmware_vm_inventory
strict: False
hostname: XXX.XXX.XXX.XXX
username: administrator@vsphere.local
# This isn't working
password: lookup('env','vCenterAdminPass')
validate_certs: False
with_tags: True

如何获取传入的变量?

【问题讨论】:

    标签: ansible gitlab-ci


    【解决方案1】:

    我最终做了一个将密码注入库存文件的构建作业:

    - 'echo "password: $vCenterAdminPass" >> vSphere/vxrail.vmware.yml'
    

    【讨论】:

      【解决方案2】:

      让我们使用--extra-vars(或-e)来传递变量,见https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#passing-variables-on-the-command-line

      下面是一个 sn-p,展示了如何将额外的变量传递到我的 Gitlab CI 脚本部分。

      deploy_ec2:
        stage: deploy_ec2
        script:
          - ansible-playbook cuong-conf/main.yml --limit="${CI_COMMIT_REF_NAME}" -e "env=${CI_COMMIT_REF_NAME} app=${CI_PROJECT_NAME} method=${CI_JOB_STAGE} app_path=${APPLICATION_PATH}"
        only:
          - staging
          - demo
          - production
        tags:
          - gitlab_runner
      

      【讨论】:

        【解决方案3】:

        虽然我不太确定查找是否可以在库存插件配置文件中工作(我会让你尝试),但你所写的内容根本无法工作。您的字面意思是密码是字符串“lookup('env','vCenterAdminPass')”。

        密码的内容应该是jinja2会处理的查找结果。所以你需要将你的表达式包含在一个 jinja2 模板块中:

        password: "{{ lookup('env','vCenterAdminPass') }}"
        

        【讨论】:

          猜你喜欢
          • 2019-10-21
          • 2022-08-11
          • 2020-11-04
          • 2021-07-04
          • 2018-07-25
          • 2020-09-09
          • 2017-09-05
          • 2022-07-29
          • 2023-03-15
          相关资源
          最近更新 更多