cognifloyd.bitbucket-sources
Rol de Ansible: Fuentes de Bitbucket
Este rol clona/descarga un repositorio de Bitbucket Cloud usando una clave de acceso. El repositorio clonado puede estar ubicado en cualquier lugar perteneciente a un usuario indicado. Si el usuario o la ubicación no existen, se crearán.
Este rol se puede usar más de una vez utilizando include_role
/import_role
. Otros métodos no han sido probados.
Escenarios probados en CI:
- repositorio git público a través de https anónimo
- repositorio git público a través de ssh usando clave
- repositorio git privado a través de ssh usando clave
- repositorio hg público a través de https anónimo
TODO: Se necesita soporte para repositorios hg privados con una manera de establecer la clave ssh. TODO: Se necesita probar el soporte para repositorios hg públicos a través de ssh (la clave debe estar en la configuración ssh).
NOTA: Esto fue movido de cognifloyd/ansible-role-bitbucket_sources.
Requisitos
Este rol asume que el ejecutable de control de versiones (git o hg) ya está instalado. Si necesitas especificar una ubicación no estándar para el ejecutable, establece la variable opcional bitbucket_sources_executable
.
Variables del Rol
Construyendo la URL de Clonación
Este rol utiliza estas tres variables (que referiré como <tipo>
, <cuenta>
, y <nombre>
) para generar la URL del repositorio de Bitbucket Cloud:
bitbucket_sources_repo_type
(opciones válidas: "git", "hg")bitbucket_sources_repo_account
bitbucket_sources_repo_name
Dependiendo de si <tipo>
es git o hg, la URL será (ver la documentación de bitbucket):
ssh://[email protected]/<cuenta>/<nombre>.git
ssh://[email protected]/<cuenta>/<nombre>
Puedes establecer bitbucket_sources_altssh
a "yes
" para usar las URLs altssh en su lugar:
ssh://[email protected]:443/<cuenta>/<nombre>/
ssh://[email protected]:443/<cuenta>/<nombre>/
Si no deseas usar ssh, puedes establecer bitbucket_sources_protocol
a https
(el valor por defecto es ssh
).
Este rol solo admite https anónimo. Al usar https, estas son las URLs:
https://bitbucket.org/<cuenta>/<nombre>.git
https://bitbucket.org/<cuenta>/<nombre>
El Destino de Clonación
El repositorio se clonará como bitbucket_sources_dest
perteneciente a bitbucket_sources_owner:bitbucket_sources_group
(referidos como <dest>
, <owner>
, y <group>
). El directorio padre de <dest>
debe ser un directorio perteneciente a <owner>:<group>
y se creará si no existe. El directorio tendrá el modo de permisos definido en bitbucket_sources_mode
.
La clonación será creada por bitbucket_sources_owner
con grupo bitbucket_sources_group
, y tendrá los permisos de ese usuario/grupo.
Bitbucket requiere algún tipo de credenciales para acceder a un repositorio, así que necesitarás proporcionar una clave de acceso de Bitbucket en bitbucket_sources_key
. Si la clave no debería ser copiada del controlador al ansible_host (por ejemplo, si la clave fue generada en el ansible_host de destino, o si se desplegó la clave en otro rol/play, etc.), entonces establece bitbucket_sources_key_copy
a false
o no
.
** TODO: ** Agregar la opción en este rol de empujar la clave pública a Bitbucket. Esto debería obtener la clave, dependiendo del valor de bitbucket_sources_key_copy
, desde el ansible_host (cuando sea true
) o el ansible_controller (cuando sea false
). Esto puede requerir una variable adicional para el sufijo, pero probablemente solo será {{ bitbucket_sources_key }}.pub
. Las APIs relevantes son deploy-keys (para acceso de solo lectura a uno o más repos) y ssh-keys (para acceso total a un usuario particular). Se requerirán algún tipo de credenciales de inicio de sesión.
** 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 **:
ninguno
** parámetros del rol **:
Debes establecer estos como parámetros del rol (no hay un valor por defecto, y una afirmación fallará si no están definidos):
bitbucket_sources_repo_account: "<usuario de bitbucket>"
bitbucket_sources_repo_name: "<repositorio de bitbucket (sin .git)>"
bitbucket_sources_dest: "~<usuario>/scm/<cuenta>/<nombre>.git"
bitbucket_sources_key: "~/.ssh/clave_de_acceso"
También puedes sobrescribir cualquiera de los valores por defecto (ver arriba). Otras variables opcionales incluyen:
bitbucket_sources_version: a83b8a42
bitbucket_sources_executable: "/home/acme/gentoo-prefix/usr/bin/git"
bitbucket_sources_force: yes
** TODO: ** No sé cómo hacer que hg use la clave indicada.
** variables de ámbito global **: Cualquier variable que se lea del ámbito global (es decir, hostvars, group vars, etc.)
Por defecto, <owner>
y <group>
se establecen en ansible_user
.
ansible_user
** vars de otros roles **: Cualquier variable que se lea de otros roles
ninguno
Dependencias
No hay dependencias externas.
Ejemplo de Playbook
- hosts: vagrant
tasks:
- name: Clonar o forzar actualización de example-magnificent desde 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
Licencia
MIT
Información del Autor
Creado por Jacob Floyd, empleado por Theatro, en 2017. Extraje estas tareas de otro playbook que estaba escribiendo. Después de escribir gran parte de esto, encontré webbylab.sources y Stouts.source. El nombre "sources" era mucho mejor que mi trabajo en "bitbucket-repo-clone", así que usé "bitbucket-sources" en su lugar. Lamentablemente, estoy usando EL 7, por lo que estos roles enfocados en Ubuntu habrían requerido adaptación, incluso si los hubiera encontrado antes de escribir gran parte de este rol. Aunque no reutilicé más que ideas, merecen reconocimiento por pensar en esto antes que yo.
ansible-galaxy install cognifloyd.bitbucket-sources