cognifloyd.bitbucket-sources
Rola Ansible: Źródła Bitbucket
Ta rola klonuje/ściąga repozytorium z chmury Bitbucket przy użyciu klucza dostępu. Skopiowane repozytorium może znajdować się w dowolnym miejscu, które należy do wskazanego użytkownika. Jeśli użytkownik lub lokalizacja nie istnieją, zostaną utworzone.
Rola ta może być używana więcej niż raz przy użyciu include_role
/import_role
. Inne metody nie były testowane.
Testowane scenariusze w CI:
- publiczne repozytorium git przez anonimowe https
- publiczne repozytorium git przez ssh z użyciem klucza
- prywatne repozytorium git przez ssh z użyciem klucza
- publiczne repozytorium hg przez anonimowe https
DO ZROBIENIA: wsparcie dla prywatnego repozytorium hg wymaga możliwości ustawienia klucza ssh. DO ZROBIENIA: wsparcie dla publicznego repozytorium hg przez ssh wymaga przetestowania (klucz musi być w konfiguracji ssh).
Uwaga: Ta rola została przeniesiona z cognifloyd/ansible-role-bitbucket_sources.
Wymagania
Ta rola zakłada, że wykonawca kontroli źródła (git lub hg) jest już zainstalowany. Jeśli potrzebujesz określić niestandardową lokalizację wykonawcy, ustaw opcjonalną zmienną bitbucket_sources_executable
.
Zmienne Roli
Budowanie URL Klonu
Ta rola wykorzystuje trzy zmienne (które nazywam <type>
, <account>
i <name>
) do generowania URL repozytorium w chmurze Bitbucket:
bitbucket_sources_repo_type
(ważne opcje: "git", "hg")bitbucket_sources_repo_account
bitbucket_sources_repo_name
W zależności od tego, czy <type>
to git czy hg, URL będzie (zobacz dokumentację Bitbucket):
ssh://[email protected]/<account>/<name>.git
ssh://[email protected]/<account>/<name>
Możesz ustawić zmienną bitbucket_sources_altssh
na "yes
", aby używać url-ów altssh zamiast:
ssh://[email protected]:443/<account>/<name>/
ssh://[email protected]:443/<account>/<name>/
Jeśli nie chcesz używać ssh, możesz ustawić bitbucket_sources_protocol
na https
(domyślnie ssh
).
Ta rola obsługuje tylko anonimowe https. Przy użyciu https, URL to:
https://bitbucket.org/<account>/<name>.git
https://bitbucket.org/<account>/<name>
Miejsce Klonowania
Repozytorium zostanie sklonowane jako bitbucket_sources_dest
, należące do bitbucket_sources_owner:bitbucket_sources_group
(wygodnie określone jako <dest>
, <owner>
i <group>
). Katalog nadrzędny <dest>
musi być katalogiem należącym do <owner>:<group>
i zostanie utworzony, jeśli nie istnieje. Katalog będzie miał uprawnienia określone w bitbucket_sources_mode
.
Klon zostanie utworzony przez bitbucket_sources_owner
z grupą bitbucket_sources_group
i będzie miał uprawnienia tego użytkownika/grupy.
Bitbucket wymaga jakiegoś rodzaju poświadczeń do uzyskania dostępu do repozytorium, więc musisz dostarczyć klucz dostępu Bitbucket w bitbucket_sources_key
. Jeśli klucz nie powinien być kopiowany z kontrolera na ansible_host (np. klucz został wygenerowany na docelowym ansible_host lub klucz został wdrożony w innej roli/play itd.), to ustaw bitbucket_sources_key_copy
na false
lub no
.
** DO ZROBIENIA: ** Dodaj możliwość w tej roli przesyłania publicznego klucza do Bitbucket. Powinno to pobrać klucz, w zależności od wartości bitbucket_sources_key_copy
, z ansible_host (gdy true
) lub ansible_controller (gdy false
). Może to wymagać dodatkowej zmiennej dla sufiksu, ale prawdopodobnie będzie to po prostu {{ bitbucket_sources_key }}.pub
. Odpowiednie API to deploy-keys (dla dostępu tylko do odczytu do jednego lub więcej repozytoriów) oraz ssh-keys (dla pełnego dostępu dla danego użytkownika). Wymagane będą jakieś dane logowania.
** 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
** parametry roli **:
Musisz ustawić te parametry roli (Nie ma domyślnych, a asercja nie powiedzie się, jeśli nie są zdefiniowane):
bitbucket_sources_repo_account: "<użytkownik bitbucket>"
bitbucket_sources_repo_name: "<repozytorium bitbucket (bez .git)>"
bitbucket_sources_dest: "~<użytkownik>/scm/<account>/<name>.git"
bitbucket_sources_key: "~/.ssh/access_key"
Możesz również nadpisać dowolne z domyślnych (zobacz powyżej). Inne opcjonalne zmienne to:
bitbucket_sources_version: a83b8a42
bitbucket_sources_executable: "/home/acme/gentoo-prefix/usr/bin/git"
bitbucket_sources_force: yes
** DO ZROBIENIA: ** Nie wiem, jak sprawić, aby hg używał wskazanego klucza.
** zmienne o zasięgu globalnym **: Jakiekolwiek zmienne odczytywane z zakresu globalnego (tj. hostvars, group vars itp.)
Domyślnie <owner>
i <group>
są ustawione na ansible_user
.
ansible_user
** zmienne z innych ról **: Jakiekolwiek zmienne odczytywane z innych ról
none
Zależności
Brak zależności zewnętrznych.
Przykładowy Playbook
- hosts: vagrant
tasks:
- name: Sklonuj lub wymuś aktualizację example-magnificent z 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
Licencja
MIT
Informacje o autorze
Stworzone przez Jacoba Floyda, zatrudnionego przez Theatro, w 2017 roku. Wyodrębniłem te zadania z innego playbooka, który pisałem. Po napisaniu większości tego, znalazłem webbylab.sources oraz Stouts.source. Nazwa "sources" była znacznie lepsza niż moja robocza "bitbucket-repo-clone", więc użyłem "bitbucket-sources" zamiast tego. Niestety, używam EL 7, więc te skoncentrowane na Ubuntu role wymagałyby przystosowania, nawet gdyby znalazłem je przed napisaniem większości tej roli. Nawet jeśli nie używałem więcej niż pomysłów, zasługują na uznanie, że pomyśleli o tym przed mną.
ansible-galaxy install cognifloyd.bitbucket-sources