メインコンテンツまでスキップ

リポジトリ

リポジトリは、playbook やロールなどの Ansible コンテンツを保存・管理する場所です。

Semaphore は次の種類のリポジトリを認識します。

  • ローカルファイルシステム (/path/to/the/repo)
  • ローカル Git リポジトリ (file://)
  • HTTPS (https://) または SSH (ssh://) 経由でアクセスするリモート Git リポジトリ
  • git:// プロトコルもサポートされていますが、セキュリティ上の理由から推奨されません。

すべてのタスクテンプレートは、実行のためにリポジトリを必要とします。

認証​

認証が必要なリモートリポジトリを使用する場合は、Semaphore のキーストアセクションでキーを設定する必要があります。

SSH を使用するリモートリポジトリの場合は、キーストアの SSH キーを使用する必要があります。

認証のないリモートリポジトリの場合は、種類が None のキーを作成できます。

リポジトリのキーは、そのリポジトリにのみ使用されます。サブモジュール、requirements.yml のロール、または独自の認証情報を持つ別の場所のリポジトリにアクセスするには、ホスト設定 でマッピングを追加してください。

新しいリポジトリの作成​

  1. 追加しようとしているリポジトリ用のキーを、キーストアセクションで設定済みであることを確認します。

  2. Semaphore のリポジトリセクションに移動し、右上隅にある新しいリポジトリボタンをクリックします。

  3. リポジトリを設定します:

    • リポジトリに名前を付けます
    • URL を追加します。URL は次のいずれかで始まる必要があります:
      • /path/to/the/repo — ファイルシステム上のローカルフォルダー
      • https:// — HTTPS 経由でアクセスするリモート Git リポジトリ
      • ssh:// — SSH 経由でアクセスするリモート Git リポジトリ
      • file:// — ローカル Git リポジトリ
      • git:// — Git プロトコル経由でアクセスするリモート Git リポジトリ
    • リポジトリのブランチを設定します。不明な場合は、おそらく master または main です
    • リポジトリがすべてのテンプレートで共有するモノレポの場合は、すべてのテンプレートで単一チェックアウトにチェックを入れます。モノレポを参照してください
    • このリポジトリを設定する前に用意しておいたアクセスキーを選択します。
  4. すべて設定したら「保存」をクリックします。

モノレポ: すべてのテンプレートで 1 つのチェックアウト​

v2.20 以降

すべてのテンプレートで単一チェックアウト オプションは Semaphore 2.20 以降で利用できます。それより前のバージョンでは、リポジトリは常にテンプレートごとにクローンされます。

デフォルトでは、Semaphore はテンプレートごとにリポジトリをクローンするため、各テンプレートは独自のコピーで動作します。多くのテンプレートが共有する大きなリポジトリでは、コピーがディスク容量を消費し、各タスクは自身のコピーのクローンまたはプルから開始されます。

すべてのテンプレートで単一チェックアウトにチェックを入れると、リポジトリは 1 回だけクローンされ、そのチェックアウトがプロジェクトのすべてのテンプレートで共有されます。このオプションは、クローンされることのないローカルフォルダー(/path/to/the/repo)では使用できません。

「すべてのテンプレートで単一チェックアウト」が有効なリポジトリフォーム

共有チェックアウトの仕組み:

  • タスクの開始前に、Semaphore はチェックアウトのロックを取得し、リポジトリで設定されたブランチをフェッチおよびプルしてから、ロックを解放します。チェックアウトの更新中、他のテンプレートのタスクはロックを待ちますが、タスク自体は並行して実行されます。
  • ブランチごとに独自のチェックアウトが作成されるため、ブランチが異なるリポジトリが作業ツリーを共有することはありません。
  • チェックアウトは共有されますが、Ansible のホームディレクトリ(requirements.yml からインストールされるロールとコレクション)はテンプレートごとに分かれています。

すべてのテンプレートが同じブランチの同じチェックアウトで動作するため、モノレポのテンプレートは独自のブランチを持つことができず、タスクがブランチやコミットを選択できるようにするブランチプロンプトを有効にすることもできません。テンプレートフォームはどちらも無効にしてその理由を表示し、API はそのようなテンプレートを拒否します。playbook がチェックアウトに書き込まないようにしてください。作業ツリーが変更されると次のプルが失敗し、Semaphore はチェックアウトを削除して再度クローンします。

既存のリポジトリの編集​

  1. Semaphore のリポジトリセクションに移動します。

  2. 変更したいリポジトリの横にある鉛筆アイコンをクリックすると、リポジトリの設定が表示されます。

リポジトリの削除​

削除しようとしているリポジトリが、どのタスクテンプレートでも使用されていないことを確認してください。 タスクテンプレートで使用されているリポジトリは削除できません:

  1. Semaphore のリポジトリセクションに移動します。

  2. 削除したいリポジトリのゴミ箱アイコンをクリックします。

  3. 本当にこのリポジトリを削除してよければ、確認ポップアップで「はい」をクリックします。

Requirements​

プロジェクトの初期化時に、Semaphore は次の場所と順序で requirements.yml を検索し、Ansible のロールとコレクションをインストールします。

ロール​

  • playbook_dir/roles/requirements.yml
  • playbook_dir/requirements.yml
  • repo_path/roles/requirements.yml
  • repo_path/requirements.yml

コレクション​

  • playbook_dir/collections/requirements.yml
  • playbook_dir/requirements.yml
  • repo_path/collections/requirements.yml
  • repo_path/requirements.yml

処理ロジック​

  • 各ファイルは独立して処理されます
  • ファイルが存在する場合、その種類 (ロールまたはコレクション) に応じて処理されます
  • いずれかのファイルの処理でエラーが発生した場合、インストール処理は停止し、エラーを返します
  • ルートディレクトリにある同じ requirements.yml ファイル (playbook_dir/requirements.yml と repo_path/requirements.yml) は、ロール用とコレクション用に 2 回処理されます

Semaphore は、エラーが発生した場合を除き、以前の場所が見つかったか、正常に処理されたかにかかわらず、これらすべての場所の処理を試みます。