Gitlab CI с Ansible - PullRequest
       14

Gitlab CI с Ansible

0 голосов
/ 03 марта 2020

Я создаю конвейер, который автоматически запускается, когда я пу sh мой код на gitlab.com. Проект о подготовке машины.

Здесь мой файл .gitlab-ci.yml

ansible_build:
image: debian:10
script:
  - apt-get update -q -y
  - apt-get install -y ansible git openssh-server keychain
  - service ssh stop
  - service ssh start
  - cp files/<ad-hoc-created-key> key.pem && chmod 600 key.pem
  - eval `keychain --eval` > /dev/null 2>&1
  - ssh-add key.pem
  - ansible-galaxy install -r requirements.yml
  - ansible-playbook provision.yml --inventory hosts --limit local

Когда я пу sh мой код, среда gitlab запускает все команды , но затем выходит со следующей ошибкой

$ ansible-playbook provision.yml --inventory hosts --limit local
 PLAY [Provision step] **********************************************************
 TASK [Gathering Facts] *********************************************************
 fatal: [127.0.0.1]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Host key verification failed.", "unreachable": true}
 NO MORE HOSTS LEFT *************************************************************
    to retry, use: --limit @/builds/team/ansible/provision.retry
 PLAY RECAP *********************************************************************
 127.0.0.1                  : ok=0    changed=0    unreachable=1    failed=0   

В моем локальном P C я решил это с помощью команды ssh-copy-id <path-to-the-key> <localhost>, но я не знаю, как решить это для gitlab-ci , учитывая, что это не среда, которой я могу управлять.

Я также попытался заменить IP-адрес 127.0.0.1 на localhost.

ansible-playbook provision.yml --inventory hosts --limit localhost

Тогда произойдет сбой:

ansible-playbook provision.yml --inventory hosts --limit localhost
  [WARNING] Ansible is being run in a world writable directory (/builds/teamiguana/minerva-ansible), 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
  [WARNING]: Found both group and host with same name: localhost
 PLAY [Provision step] **********************************************************
 TASK [Gathering Facts] *********************************************************
 fatal: [localhost]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.\r\nroot@localhost: Permission denied (publickey,password).", "unreachable": true}
 NO MORE HOSTS LEFT *************************************************************
    to retry, use: --limit @/builds/teamiguana/minerva-ansible/provision.retry
 PLAY RECAP *********************************************************************
 localhost                  : ok=0    changed=0    unreachable=1    failed=0   

1 Ответ

0 голосов
/ 03 марта 2020

У меня нет опыта настройки подобного - но моей первой мыслью было бы проверить

  1. Какой системный пользователь Gitlab пытается использовать S SH как?
  2. Что У пользователя системы есть соответствующие ключи publi c на удаленных хостах?

Вы можете переопределить, с каким пользователем Ansible соединяется, либо в playbooks, либо с помощью флага командной строки --user <user>, см. https://docs.ansible.com/ansible/latest/cli/ansible-playbook.html#cmdoption - ansible -playbook-u .

Хотя, может быть, я неправильно понимаю, потому что только что заметил, что вы задали --limit local в своей команде?

...