bitbucket-sources
Ansible Роль: Bitbucket Источники
Эта роль клонирует/обновляет репозиторий Bitbucket cloud, используя ключ доступа. Клонированный репозиторий может находиться в любом месте, принадлежащем указанному пользователю. Если пользователь или место не существуют, они будут созданы.
Эту роль можно использовать более одного раза с помощью include_role
/import_role
. Другие методы не тестировались.
Тестируемые сценарии в CI:
- публичные git репозитории по анонимному https
- публичные git репозитории по ssh с использованием ключа
- приватные git репозитории по ssh с использованием ключа
- публичные hg репозитории по анонимному https
TODO: Поддержка приватных hg репозиториев требует способа указания ssh ключа. TODO: Поддержка публичных hg репозиториев по ssh требует тестирования (ключ должен быть в конфигурации ssh)
ПРИМЕЧАНИЕ: Это было перенесено с cognifloyd/ansible-role-bitbucket_sources.
Требования
Эта роль предполагает, что исполняемый файл для управления версиями (git или hg) уже установлен. Если вам нужно указать нестандартное местоположение исполняемого файла, задайте опциональную переменную bitbucket_sources_executable
.
Переменные роли
Формирование URL для клонирования
Эта роль использует три переменные (которые я удобно назову <type>
, <account>
, и <name>
) для генерации URL репозитория Bitbucket cloud:
bitbucket_sources_repo_type
(допустимые варианты: "git", "hg")bitbucket_sources_repo_account
bitbucket_sources_repo_name
В зависимости от того, является ли <type>
git или hg, URL будет (см. документацию Bitbucket):
ssh://[email protected]/<account>/<name>.git
ssh://[email protected]/<account>/<name>
Вы можете установить булеву переменную bitbucket_sources_altssh
в "yes
", чтобы использовать altssh URL:
ssh://[email protected]:443/<account>/<name>/
ssh://[email protected]:443/<account>/<name>/
Если вы не хотите использовать ssh, задайте bitbucket_sources_protocol
значение https
(по умолчанию ssh
).
Эта роль поддерживает только анонимный https. При использовании https, это будут URL:
https://bitbucket.org/<account>/<name>.git
https://bitbucket.org/<account>/<name>
Место назначения клонирования
Репозиторий будет клонирован в bitbucket_sourcces_dest
, принадлежащий bitbucket_sources_owner:bitbucket_sources_group
(удобно называется как <dest>
, <owner>
и <group>
). Родительский каталог <dest>
должен принадлежать <owner>:<group>
и будет создан, если он не существует. Каталог будет иметь пермишны, определенные в bitbucket_sources_mode
.
Клон будет создан пользователем bitbucket_sources_owner
с группой bitbucket_sources_group
, и будет иметь разрешения этого пользователя/группы.
Bitbucket требует некоторые учетные данные для доступа к репозиторию, поэтому вам нужно будет предоставить ключ доступа Bitbucket в bitbucket_sources_key
. Если ключ не следует копировать с контроллера на ansible_host (например, ключ был сгенерирован на целевом ansible_host, или вы развернули ключ в другой роли/плей, и т.д.), то установите bitbucket_sources_key_copy
в false
или no
.
** TODO: ** Добавить возможность отправки публичного ключа в Bitbucket. Это должно получить ключ, в зависимости от значения bitbucket_sources_key_copy
, с ansible_host (когда true
) или с ansible_controller (когда false
). Это может потребовать дополнительной переменной для суффикса, но скорее всего это будет {{ bitbucket_sources_key }}.pub
. Соответствующие API – deploy-keys (для только чтения к одному или нескольким репозиториям) ssh-keys (для полного доступа для конкретного пользователя). Потребуются какие-то учетные данные для входа.
** defaults/main.yml **:
bitbucket_sources_repo_type: git
bitbucket_sources_owner: "{{ ansible_user }}"
bitbucket_sources_group: "{{ ansible_user }}"
bitbucket_sources_mode: 0755
bitbucket_sources_altssh: no
bitbucket_sources_key_dest: "~{{ bitbucket_sources_owner }}/.ssh/{{ bitbucket_sources_key | basename }}"
bitbucket_sources_key_copy: yes
bitbucket_sources_force: no
** vars/main.yml **:
none
** параметры роли **:
Вы должны установить эти параметры роли (по умолчанию их нет, и утверждение завершится неудачей, если они не определены):
bitbucket_sources_repo_account: "<пользователь bitbucket>"
bitbucket_sources_repo_name: "<репозиторий bitbucket (без .git)>"
bitbucket_sources_dest: "~<пользователь>/scm/<account>/<name>.git"
bitbucket_sources_key: "~/.ssh/access_key"
Вы также можете переопределить любые из значений по умолчанию (см. выше). Другие опциональные переменные включают:
bitbucket_sources_version: a83b8a42
bitbucket_sources_executable: "/home/acme/gentoo-prefix/usr/bin/git"
bitbucket_sources_force: yes
** TODO: ** Я не знаю, как сделать так, чтобы hg использовал указанный ключ.
** глобальные переменные **: Любые переменные, которые читаются из глобальной области (т.е. hostvars, group vars и т.д.)
По умолчанию <owner>
и <group>
установлены в ansible_user
.
ansible_user
** переменные из других ролей **: Любые переменные, которые читаются из других ролей
none
Зависимости
Нет внешних зависимостей.
Пример плейбука
- hosts: vagrant
tasks:
- name: Клонировать или принудительно обновить example-magnificent из bitbucket.
include_role:
name: theatro.bitbucket_sources
allow_duplicates: yes
public: no
vars:
bitbucket_sources_repo_type: git
bitbucket_sources_repo_account: example
bitbucket_sources_repo_name: magnificent
bitbucket_sources_dest: /var/scm/bitbucket/example/magnificent.git
bitbucket_sources_owner: vagrant
bitbucket_sources_group: vagrant
bitbucket_sources_key: "~/.ssh/example_access_key"
bitbucket_sources_force: yes
Лицензия
MIT
Информация об авторе
Создано Jacob Floyd, работает в Theatro, в 2017 году. Я извлек эти задачи из другого плейбука, который я писал. После написания большей части этой роли, я нашел webbylab.sources и Stouts.source. Название "sources" было намного лучше, чем мое рабочее "bitbucket-repo-clone", поэтому я использовал "bitbucket-sources" вместо этого. К сожалению, я использую EL 7, так что эти роли, ориентированные на Ubuntu, потребовали бы адаптации, даже если бы я нашел их до того, как написал большую часть этой роли. Хотя я не использовал больше, чем идеи, им заслужено приведение к признанию за то, что они подумали об этом раньше меня.
ansible-galaxy install cognifloyd/ansible-role-bitbucket-sources