Semaphore とは
Semaphore UI は、すでに手元にある自動化処理を実行するための、セルフホスト型の Web インターフェイスと REST API です。Ansible のプレイブック、Terraform の構成、シェルスクリプトを保持する Git リポジトリを指定し、どの認証情報とホストを使うかを伝えれば、チームがその自動化を実行し、必要なシークレットを保管し、すべての実行履歴を残すための唯一の場所になります。
タスクは個別に実行することも、Workflows(Pro)で単一のパイプラインにまとめることもできます。ビルド、テスト、デプロイ、インフラの自動化をつなげられます。
Semaphore は Ansible、Terraform、あるいはあなたのスクリプトを置き換えるものではありません。それらを、誰かのノート PC ではなくサーバー上で実行します。
解決する課題
自動化はたいていワークステーションから始まります。ひとりのエンジニアがプレイブック、インベントリ、SSH キー、そして適切なバージョンの Ansible を持っています。それは、2 人目が同じものを実行する必要が出てくるまで、あるいは先週の火曜日にホストで何が変わったのかを誰かが尋ねるまでは機能します。
Semaphore は実行を共有サーバーへ移し、欠けていた部分を補います。
| 欠けていた部分 | Semaphore が提供するもの |
|---|---|
| 全員がツールをインストールする必要がある | 1 台のサーバー(またはランナー)が備えていればよく、利用者にはブラウザーだけあれば十分です。 |
| 認証情報がノート PC 間でコピーされる | 暗号化された キーストア が、シークレットを利用者ではなく実行に渡します。 |
| 誰が何を実行したかの記録がない | すべての タスク が出力、終了ステータス、ユーザー、時刻を保持します。 |
| プレイブックを 1 つ実行するために root 権限を配るべきではない | ロール が、誰が実行、編集、あるいは閲覧のみできるかを決めます。 |
| 誰かが思い出したときにだけ実行される | スケジュール、Webhook、API 呼び出しが実行を開始します。 |
対象となる利用者
- インフラおよびプラットフォームチーム — すでに Ansible や Terraform を使っており、本番用の認証情報を配らずに同僚に実行してもらいたい場合。
- CI/CD パイプラインを構築するチーム — ワークフローでビルド、テスト、デプロイのタスクをつなぎ、スケジュール実行やオンデマンドの運用ジョブも実行したい場合。
- CI/CD プラットフォームを持つチーム — 再起動、デプロイ、証明書更新といった運用上の実行をビルドシステムから切り離し、パイプラインの YAML を読まない人にも見えるようにしたい場合。
Semaphore はセルフホスト型です。SaaS 版はありません。自分のインフラ上でバイナリやコンテナーを動かすため、シークレットがそこから出ることはありません。
何を実行できるか
それぞれの タスクテンプレート がアプリケーションを 1 つ選択します。
- Ansible — インベントリ、Vault パスワード、
ansible-playbookの全オプションを伴うプレイブック。 - Terraform、OpenTofu、Terragrunt — ワークスペースと、バックエンドが保持する state を用いた plan と apply。
- Shell、PowerShell、Python — 上記に当てはまらないあらゆる処理。
タスクはサーバー自身の上で実行するか、管理対象システムの近くに配置した ランナー 上で実行します。
Workflows(Pro)では、ビジュアルエディターを使ってタスクテンプレートをパイプラインに接続できます。各ステップで異なるアプリケーションを実行できます。たとえば、シェルスクリプトでソースコードをビルドしてテストし、Terraform でインフラを構築してから、Ansible でデプロイできます。承認ステップ、時間を指定した一時停止、成功時や失敗時に実行する分岐も追加できます。Semaphore は条件が満たされると、後続のタスクを自動的に開始します。
使うべきでない場合
適用範囲の境界を知っておくと、後で時間を節約できます。
- Ansible や Terraform の置き換え。 Semaphore は独自の実行エンジンを持ちません。プレイブックがシェルから動かないなら、Semaphore からも動きません。
- CMDB としての利用。 インベントリ は実行に必要なインベントリであって、資産 全体についての信頼できる情報源ではありません。ダイナミックインベントリを使って、実際の情報源から生成してください。
- 組織のシークレットマネージャーとしての利用。 シークレットは保存時に暗号化され、人が読み戻すためではなくタスクが使うために設計されています。すでに HashiCorp Vault や他のストアを運用しているなら、シークレットをコピーするのではなく 連携 してください。
- 一切のダウンタイムが許されない単一ノードサービスの運用。 複数のノードをアクティブにするには 高可用性 が必要で、これは Enterprise の機能であり、PostgreSQL または MySQL に加えて Redis を必要とします。