cognifloyd.bitbucket-sources
Ansibleロール: Bitbucketソース
このロールは、アクセスキーを使用してBitbucketのクラウドリポジトリをクローンまたはプルします。クローンしたリポジトリは、指定されたユーザーが所有する任意の場所に配置できます。ユーザーや場所が存在しない場合は、作成されます。
このロールは、include_role
やimport_role
を使って複数回使用できます。その他の方法は未検証です。
CIでテストしたシナリオ:
- 匿名のHTTPSによるgitパブリックリポジトリ
- キーを使ったSSHによるgitパブリックリポジトリ
- キーを使ったSSHによるgitプライベートリポジトリ
- 匿名のHTTPSによるhgパブリックリポジトリ
TODO: hgプライベートリポジトリのサポートにはSSHキーを設定する方法が必要です。 TODO: SSHによるhgパブリックリポジトリのサポートはテストが必要です(キーはSSH設定に含める必要があります)。
注意: これはcognifloyd/ansible-role-bitbucket_sourcesから移動されました。
要件
このロールは、ソースコントロールの実行可能ファイル(gitまたはhg)がすでにインストールされていることを前提としています。非標準の実行可能ファイルの場所を指定する必要がある場合は、オプションの変数bitbucket_sources_executable
を設定してください。
ロールの変数
クローンURLの構成
このロールは、BitbucketクラウドリポジトリのURLを生成するために、次の3つの変数(以下、便利に<type>
, <account>
, <name>
と呼びます)を使用します:
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_sources_dest
にクローンされ、bitbucket_sources_owner:bitbucket_sources_group
が所有します(以下、便利に<dest>
, <owner>
, <group>
と呼びます)。<dest>
の親ディレクトリは<owner>:<group>
が所有するディレクトリでなければならず、存在しない場合は作成されます。ディレクトリのパーミッションはbitbucket_sources_mode
で定義されたモードを持ちます。
クローンはbitbucket_sources_owner
によって作成され、bitbucket_sources_group
が設定され、そのユーザー/グループのパーミッションを持ちます。
Bitbucketはリポジトリにアクセスするために何らかの認証情報を必要とするため、bitbucket_sources_key
にBitbucketアクセキーを提供する必要があります。もし、キーがコントローラから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はデプロイキー(1つ以上のリポジトリに対する読み取り専用アクセス用)およびSSHキー(特定のユーザーに対する完全なアクセス用)です。何らかのログイン認証情報が必要になります。
** 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: "~<user>/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: Bitbucketからexample-magnificentをクローンまたは強制更新。
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中心のロールは、かなりの調整が必要でした。