2015-09-15 3 views
4

Я пытаюсь создать «без пароля» процесс развертывания с использованием Gitlab CI и Ansible. Некоторые шаги требуют пароля (я уже использую ключи SSH, когда только могу), поэтому я сохранил их в Ansible Vault. Затем мне просто нужно будет предоставить пароль Vault при запуске playbook.Развертывание с Ansible от Gitlab CI, касающееся паролей

Но как я мог бы интегрировать это с Gitlab CI?

Могу ли я зарегистрировать задание gitlab-ci (или задания подходят только для сборки?), В котором просто запускается игровая книжка, предоставляющая пароль хранилища каким-то образом ?! Можно ли это сделать без прокладки пароля в виде простого текста ?!

Кроме того, я был бы очень рад, если бы кто-нибудь мог указать мне какой-то материал, который показывает, как мы можем развернуть сборки с помощью Ansible. Как вы можете заметить, я окончательно ничего не нашел об этом.

+0

Это самозакрытый gitlab-бегун? если это так, просто используйте ssh-ключи (или настройте их) пользователя gitlab-runner. – Rufinus

ответ

1

Я не очень хорошо знаком с gitlab ci или сэкономленным хранилищем, но одна из стратегий, которые я предпочитаю для такого рода ситуаций, - создать единое изолированное, безопасное и долговечное место, где ваш пароль или другое существуют секреты. Например, личное ведро s3. Затем дайте поле сборки или создайте явный доступ кластера к этому безопасному месту. Конечно, вы захотите убедиться, что ваш блок сборки или кластер также заблокирован, например, внутри vpc, который не является общедоступным и доступен только через vpn или другие очень безопасные средства.

Идея состоит в том, чтобы предоставить машинам, которые нуждаются в вашем пароле, явное знание того, где его получить, и отдельно разрешение &, необходимое для его получения. Первое не должно быть секретом (поэтому оно может существовать в контроле источника), но последнее практически невозможно достичь, не подвергая риску всю систему, и в этот момент вы уже обжарены.

Так, более конкретно, машина, которая работает, может находиться внутри защищенного кластера. Он знает, как получить доступ к паролю. У него есть разрешение на это. Таким образом, он может просто получить pw, хранить как переменную и использовать его для доступа к защищенным ресурсам по мере их запуска. Вы хотите быть осторожным, чтобы не пропустить пароль в процессе (например, трубопроводы с доступными журналами с pw куда-то вне кластера или даже где-нибудь возможно). Если вы хотите запустить скрипт, который может быть запущен вне кластера, вы будете использовать vpn для запуска загружаемой книги на удаленном компьютере.

2

Вы можете установить переменную среды в Cit GitLab, которая будет содержать пароль Ansible Vault. В моем примере я назвал его $ANSIBLE_VAULT_PASSWORD

Вот пример для .gitlab-ci.yml:

deploy: 
    only: 
    - master 
    script: 
    - echo $ANSIBLE_VAULT_PASSWORD > .vault_password.txt 
    - ansible-playbook -i ansible/staging.yml --vault-password-file .vault_password.txt 

Надежда этот трюк помогает вам.

Смежные вопросы