1 つの UI から複数のネットワークでジョブを実行

プロジェクトランナーで、別のネットワークへのアクセス、実行能力の追加、ジョブに必要なツールの提供を行います。タスク履歴と結果は Semaphore に保持します。

1 台の実行ホストでは、すべてのジョブに対応できない

ジョブによって必要なネットワークアクセス、ツール、実行能力は異なります。すべてをアプリケーションサーバーで実行すると、同じ制約を共有することになります。

各ジョブに必要な環境を用意

各ジョブの実行場所を選び、ツールを準備し、Semaphore サーバーとは独立して実行能力を追加します。

対象システムに接続インベントリの近くにランナーを配置
ジョブに必要なツールを使用実行環境を準備
実行能力を追加ワークロードの増加に合わせてランナーを拡張

ランナーを設定し、ジョブを振り分け

各ジョブの実行方式を選択

ランナーはジョブを実行する場所を決めます。エグゼキューターは、ホスト環境を使うか、コンテナー内で開始するかを決めます。

ローカル

ランナーホストにインストールされたツールと依存関係を使い、ホスト上で直接実行します。

Docker

Pro では、ジョブをコンテナーで実行し、タスクテンプレートごとにエグゼキューターのイメージを選べます。

Kubernetes

Enterprise では、必要なイメージと依存関係を備えた Kubernetes Pod でジョブを実行できます。

ジョブに必要な実行設定を構築

テンプレートでランナーを選択

タグで準備済みジョブを振り分け、エグゼキューターのイメージを選びます。

タスクテンプレート

制御プレーンの可用性も維持

タスクの実行能力とアプリケーションの可用性を、デプロイの別々の部分として拡張します。

高可用性

インフラに合わせた実行

インベントリの近くで実行

対象が存在するリージョンやネットワークで自動化を実行します。ランナーは、プライベートサブネットへのアクセス、管理対象システムまでの距離の短縮、チーム専用の実行能力を提供できます。ネットワーク上の配置、ランナータグ、エグゼキューターは、それぞれ設定の異なる部分を担います。

ランナーから接続を開始

ランナーは Semaphore サーバーに接続し、ポーリングします。サーバーからランナーへの受信接続を開始する必要はありません。ランナーが Semaphore と、タスクに必要な対象やソースへ接続できるなら、NAT の背後やプライベートサブネットの拠点で役立ちます。

作業の対象範囲と振り分けを選択

グローバルランナーは複数のプロジェクトで利用でき、プロジェクトランナーは 1 つのプロジェクトに属します。対応するタグによって、テンプレートの要件とランナーの能力や場所を関連付けます。タグ要件のないタスクには既定ランナーの設定が適用されます。適切なランナーが利用できない場合、タスクは黙って別の場所で実行されるのではなく、待機したままになることがあります。

配置場所と実行の境界を分ける

ローカル実行は、ランナーホストのプロセスコンテキストで動作し、その権限を使います。対応する Docker と Kubernetes のエグゼキューターは、コンテナーまたは Pod の境界を設けますが、それぞれ設定とエディションの要件があります。実際の境界はマウント、ネットワーク、特権、イメージで決まります。ランナーという名称だけで分離が保証されるわけではありません。

実行能力を独立して拡張

追加のランナーにより、すべてのタスクを Web アプリケーションホストで実行せずに、実行能力や到達範囲を増やせます。同時タスク設定とポーリングは動作特性に影響します。高度な単発実行では、登録、割り当てフック、ジョブ終了後に停止するランナーを組み合わせることもできますが、そのライフサイクルを支えるデプロイ自動化が必要です。

切断されたネットワークで自動化を実行

閉じたネットワーク内で稼働する必要がある場合は、Enterprise のオフラインライセンスを使います。Semaphore とランナーをその環境内に置き、公開ネットワークへのアクセスなしで必要な Git リポジトリ、エグゼキューターのイメージ、ツールの依存関係を提供してください。

実行環境を意識して選択

ローカル実行はランナーホストのプロセス権限を使います。ジョブ専用のコンテナーや Pod が必要な場合は、タスクに合うイメージ、マウント、ネットワーク設定を備えた Docker または Kubernetes のエグゼキューターを使ってください。

ジョブに認証情報を提供

タスクには、テンプレートが参照する認証情報と設定が必要です。Key Store の環境変数とファイルソースは、値が実行に使われる前に Semaphore サーバー上で解決されます。

FAQ

グローバルランナーとプロジェクトランナーはどう違いますか?

グローバルランナーはインスタンス全体で使うために登録され、プロジェクトランナーは特定のプロジェクトに属します。グローバルな分散実行はすべてのプランで利用でき、プロジェクト単位の範囲と関連する振り分け機能は、料金表に示すとおり Pro と Enterprise に含まれます。運用の責任範囲と環境へのアクセスに応じて範囲を選んでください。プロジェクト専用のランナーを使えば実行場所を意識して指定できますが、実行プロセスが何にアクセスできるかは、そのランタイム設定で決まります。

Semaphore サーバーからランナーへの受信接続は必要ですか?

ランナーは Semaphore に接続し、処理をポーリングして通信を開始します。これにより、サーバーからランナーへの受信接続なしに、NAT の背後やプライベートネットワーク内に配置できます。それでもランナーは、Semaphore エンドポイント、タスクが使うリポジトリ、パッケージソース、外部サービス、対象へ接続する必要があります。それぞれの経路を確認してください。外向きポーリングによって、ほかのネットワーク要件がなくなるわけではありません。

適切なネットワークやツールを持つランナーに、タスクはどう振り分けられますか?

対応するランナータグ、テンプレートの要件、既定ランナーの設定を使い、適切な実行環境に作業を割り当てます。タグには意味のある能力や場所の名前を付け、可用性と能力を把握できるようにします。適切なランナーの準備ができていなければ、タスクは待機することがあります。同じ経路を本番変更に使う前に、影響のない操作で選択した経路をテストし、タスク詳細で実行ランナーを確認してください。

リモートランナーで実行すると、タスクごとに分離されますか?

それだけでは分離されません。ローカルエグゼキューターは、ランナーホストのプロセスコンテキストで、その環境が提供するアクセスを使って動作します。Docker や Kubernetes での実行では別の境界が生まれますが、マウント、特権、ネットワーク、イメージの内容は引き続き重要です。実行場所と実行方式は別々に判断してください。ランナーやコンテナーという名称を完全な安全性の保証と考えず、必要な依存関係を準備し、ホストへのアクセスを確認します。

ジョブごとに異なるツールチェーンのバージョンを使えますか?

選択した実行経路で、各ジョブが必要とするランタイムを準備します。対応するエグゼキューターイメージの設定を使えば、共有ホスト上のすべてのジョブを変更せずに、特定の Ansible、Terraform、Python などの依存関係を明示できます。該当するエグゼキューターの選択肢について、インストール済みのバージョンとエディションを確認してください。そのうえで、管理者の対話セッションだけでなく、実際の実行環境内でリポジトリアクセス、パッケージ、対象への接続をテストします。

ランナーを追加すると、Semaphore 自体が高可用になりますか?

ランナーの追加は、タスクの実行能力を増やしたり実行場所を変えたりするもので、アプリケーションの制御プレーンを高可用にするものではありません。アプリケーションの HA では、文書化された共有データベース、Redis、負荷分散アーキテクチャのもとで複数の Semaphore ノードを連携させます。両者は補完できますが、解決する問題は異なります。どこを拡張するか決める前に、ボトルネックが実行能力、ネットワークへの到達性、UI と API へのアクセスのどれかを判断してください。

必要なタグを持つランナーがオンラインでない場合、どうなりますか?

利用可能なランナーがテンプレートの振り分け要件に一致するまで、タスクは待機状態にとどまります。ランナーのタグ、有効フラグ、最近の接続状態を確認し、その後で実行能力を確認してください。タグは選択ルールであるため、タグのないランナーや異なるタグのランナーがそのジョブを自動的に引き受けることはありません。

タスクテンプレートごとに Docker イメージを選べますか?

はい。ランナーが Pro の Docker エグゼキューターまたは Enterprise の Kubernetes エグゼキューターを使う場合、テンプレートで既定のジョブイメージを上書きできます。ジョブごとに、自動化に必要なツールチェーンを使えます。必要なアプリケーションと依存関係をイメージに準備してください。この項目はローカルエグゼキューターの動作を変えません。テンプレートの実行設定を見る。