如何从Gitlab CI运行Ansible Playbook?

如何从Gitlab CI运行Ansible Playbook?,ansible,gitlab-ci,gitlab-ci-runner,Ansible,Gitlab Ci,Gitlab Ci Runner,我试图在Gitlab ci中创建一个管道来运行ansible剧本。 这是我的.gitlab-ci.yml文件: 图像:“我的可解析图像” 在脚本之前: -eval$(ssh代理-s) -echo“$SSH_PRIVATE_KEY”| tr-d'\r'| SSH add- -mkdir-p~/.ssh -chmod 700~/.ssh 建造: 脚本: -ansible playbook-i inventory-u root--private key“$SSH_private_key”playboo

我试图在Gitlab ci中创建一个管道来运行ansible剧本。 这是我的.gitlab-ci.yml文件:

图像:“我的可解析图像”
在脚本之前:
-eval$(ssh代理-s)
-echo“$SSH_PRIVATE_KEY”| tr-d'\r'| SSH add-
-mkdir-p~/.ssh
-chmod 700~/.ssh
建造:
脚本:
-ansible playbook-i inventory-u root--private key“$SSH_private_key”playbook.yml-vv
playbook正在尝试执行一个简单的ping模块:

---
   - name: Ping test ## name of the first task
     ping:  ##ping is a special case that do not requieres any attributs
由于某些原因,ssh连接总是失败,出现以下错误:

$ ansible-playbook -i inventory -u root --private-key /builds/my_name/rhe7_set-up-rpm/private_key playbook.yml -vv
[WARNING]: Ansible is being run in a world writable directory
(/builds/aramniko/rhe7_set-up-rpm), ignoring it as an ansible.cfg source. For
more information see
https://docs.ansible.com/ansible/devel/reference_appendices/config.html#cfg-in-
world-writable-dir
ansible-playbook 2.9.11
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.8/site-packages/ansible
  executable location = /usr/local/bin/ansible-playbook
  python version = 3.8.3 (default, Jul 26 2020, 02:36:32) [GCC 9.2.0]
No config file found; using defaults
PLAYBOOK: playbook.yml *********************************************************
1 plays in playbook.yml
PLAY [Set-UP] ******************************************************************
TASK [Gathering Facts] *********************************************************
task path: /builds/my_name/rhe7_set-up-rpm/playbook.yml:2
fatal: [XXXXXXXXX]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Warning: Permanently added 'XXXXXXXX' (ECDSA) to the list of known hosts.\r\nno such identity: /builds/my_name/rhe7_set-up-rpm/private_key: No such file or directory\r\nroot@XXXXXXXXXX: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", "unreachable": true}
PLAY RECAP *********************************************************************
XXXXXXXXXXX               : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0 
我如何解决这个问题

编辑解决方案是在脚本之前添加以下内容:

-ssh密钥扫描DNS/Remote\u IP
-echo“$SSH\u已知\u主机”>~/.SSH/KNOWN\u主机
-chmod 644~/.ssh/known_主机

您应该通过在专用服务器上运行
ssh keyscan
并将结果复制到名为
ssh\u KNOWN\u HOSTS
的GitLab变量来验证主机密钥。在管道中,您需要将其复制到管道环境中的
~/.ssh/known_hosts
文件中。说明如下:


一个旁注,你应该考虑创建一个安全目录来存储你的配置文件。请参阅:

一个更简单的选项是创建一个ansible.cfg文件,并添加那些配置和其他配置,如远程用户、资源清册、私钥文件等


Hi@DV82XL,ssh密钥在本地创建并保存在ENV_VAR“$ssh_PRIVATE_key”中。这里的问题是,它来自docker容器和主机不知道的新IP。对。对不起,安德鲁·拉姆尼科夫。我添加了一些关于已知主机文件的信息。您当前正在设置此选项吗?如果不是,那可能就是问题所在。让我知道这是否解决了你的问题。有效。。。非常感谢。我编辑了上面关于如何正确设置的问题。
#ansible.cfg
[defaults]
host_key_checking = False