将Gitlab CI变量注入Ansible

时间:2019-11-15 13:43:40

标签: ansible gitlab-ci

我正在使用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

如何传递变量?

3 个答案:

答案 0 :(得分:1)

尽管我不太确定查找是否可以在清单插件配置文件中使用(我会尽力尝试),但是您编写的内容根本无法使用。您只是在说密码是字符串“ lookup('env','vCenterAdminPass')”。

密码的内容应该是jinja2将处理的查找结果。因此,您需要将表达式包含在jinja2模板块中:

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

答案 1 :(得分:0)

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

下面是一个片段,显示了如何将额外的变量传递到我的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

答案 2 :(得分:0)

我最终完成了将密码注入清单文件的构建工作:

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