Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Starlark-Powered Pipelines in Woodpecker CI

2025年09月11日に「Dev.to」が公開したITニュース「Starlark-Powered Pipelines in Woodpecker CI」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Woodpecker CIは、コードの自動テストやデプロイを行うオープンソースツールだ。従来はYAMLでパイプラインを設定したが、Python風のStarlark言語で記述できるようになった。Starlarkの設定は、WCCSがリアルタイムでYAMLに変換する。これにより、柔軟で論理的なCIパイプラインを構築できる。

出典: Starlark-Powered Pipelines in Woodpecker CI | Dev.to公開日:

ITニュース解説

システム開発では、ソフトウェアの品質を保ちながら効率的に開発を進めるために、継続的インテグレーション(CI)という自動化の仕組みが非常に重要になる。CIツールは、開発者がコードを変更するたびに、自動的にプログラムをビルドし、テストを実行して問題がないかを確認する。Woodpecker CIは、このようなCI/CD(継続的デリバリー)を実現するためのオープンソースのツールであり、軽量で使いやすい特徴を持っている。これは人気のCI/CDシステムであるDrone CIの代替としても利用され、その設計やパイプライン設定に多くの共通点があるため、Droneの既存のパイプライン設定をそのまま活用できる場合もある。

従来のWoodpecker CIのパイプライン設定は、YAMLという形式のファイルで記述されていた。YAMLは人間が読みやすく、設定ファイルを記述するのによく使われる形式だが、複雑な条件分岐や動的な処理を記述するのには限界があった。最近では、より高度なロジックをCIパイプラインに組み込みたいという要望が高まっており、プログラマブルなパイプラインが注目されている。そこでWoodpecker CIでは、Pythonに似た構文を持つ「Starlark」という設定言語を使って、CIパイプラインを定義できるようになり、設定の柔軟性が大きく向上した。

ここでは、Woodpecker CI、HTTPS通信を可能にするリバースプロキシのTraefik、そしてStarlark形式の設定をYAMLに変換するWCCS(Woodpecker CI Config Service)を組み合わせ、StarlarkでCIパイプラインを動かす具体的な方法を解説する。

まず、Woodpecker CIの基盤となるサーバーとエージェントのセットアップから始める。これらはDocker Composeというツールを使って容易に構築できる。Docker Composeは、複数のDockerコンテナ(仮想的な実行環境)をまとめて定義し、一度に起動・管理するためのものだ。docker-compose.ymlファイルには、woodpecker-serverサービスとwoodpecker-agentサービスの定義を記述する。woodpecker-serverはCI/CDプロセス全体を管理し、Webインターフェースを提供するWoodpecker CIの中心となる部分だ。一方、woodpecker-agentは、実際にコードのビルドやテストなどのコマンドを実行する作業担当者(ワーカー)の役割を果たす。エージェントがDockerコンテナ内でビルドを実行できるように、ホストのDockerエンジンと通信できる設定が必要となる。具体的には、ホストのDockerソケット(/var/run/docker.sock)をエージェントコンテナにマウントする設定を行う。

次に、セキュリティを高めるためにTraefikというリバースプロキシを設定し、Woodpecker CIへのアクセスをHTTPS化する。初期状態のWoodpecker CIはHTTPで動作するが、Traefikを導入することで、ウェブブラウザとサーバー間の通信を暗号化するHTTPSプロトコルを利用できるようになる。Traefikは、外部からのすべてのウェブアクセスを受け付け、それを適切な内部サービス(この場合はWoodpecker CIサーバー)に転送する役割を担う。これにより、SSL証明書(HTTPS通信に必要)の管理、ウェブアクセスをどのサービスに送るかのルーティング、複数のサーバーへの負荷分散といったネットワーク関連の複雑な処理を自動的に行ってくれる。Traefikの設定では、HTTPの標準ポート80とHTTPSの標準ポート443でリクエストを受け付けるようにし、Let's Encryptという無料のサービスを使ってSSL証明書を自動的に取得・更新する設定を行う。また、Woodpeckerサーバーのサービス定義には、TraefikがWoodpeckerサーバーを認識し、適切にHTTPSでルーティングするための設定情報(ラベル)を追加する。これにより、設定したドメイン名(例: your-ci-server)でアクセスすると、Traefikが安全なHTTPS接続でWoodpeckerサーバーに接続し、もしHTTPでアクセスされた場合でも自動的にHTTPSにリダイレクトされるようになる。

Woodpecker CIが開発者のリポジトリにアクセスし、コードの変更を監視するためには、GitHubのようなコードホスティングサービスとの連携が必要だ。この連携には、GitHubのOAuthアプリケーションを登録する。これは、Woodpecker CIがユーザーの許可を得て、そのユーザーのリポジトリにアクセスするための認証メカニズムである。GitHubの開発者設定で新しいOAuthアプリケーションを作成し、認証が成功した後にWoodpecker CIに戻るためのURL(コールバックURL)をhttps://<your-ci-server>/authorizeに設定する。GitHubから発行されるクライアントIDとシークレット(秘密鍵)をWoodpeckerサーバーの環境変数に設定することで、WoodpeckerのWeb UIからGitHubアカウントを使ってログインできるようになる。ログイン後、WoodpeckerのUIからビルドしたいリポジトリを「有効化」すると、Woodpeckerは自動的にGitHubリポジトリに必要なWebhook(GitHubでのイベント、例えばコードのプッシュやプルリクエストの作成などをWoodpeckerに通知する仕組み)を設定してくれる。

これで基本的な環境が整ったので、まずは従来のYAML形式でCIを動かしてみる。GitHubリポジトリのルートディレクトリに.woodpecker.ymlという名前のファイルを作成し、ビルドのステップを記述する。例えば、「Hello from CI」というメッセージを出力する簡単なステップを設定する。このファイルを新しいブランチにコミットし、メインブランチに対してプルリクエストを作成すると、Woodpecker CIは自動的にこの設定ファイルを読み込み、CIプロセスを開始する。WoodpeckerのUIで、ビルドの進行状況やログをリアルタイムで確認できる。

YAML形式でのパイプライン実行ができるようになったら、次にStarlarkによる柔軟なパイプライン定義を導入する。そのために利用するのがWCCS(Woodpecker CI Config Service)だ。WCCSは、Starlark形式で記述されたパイプライン定義を、Woodpecker CIが解釈できる標準的なYAML形式に動的に変換する軽量なウェブサービスである。WCCSもDockerコンテナとしてデプロイできるため、docker-compose.ymlファイルにそのサービス定義を追加する。

WCCSがWoodpeckerサーバーからのリクエストを受け付ける前に、そのリクエストが信頼できるWoodpeckerサーバーから送信されたものであることを確認する必要がある。Woodpeckerサーバーは、WCCSに設定情報を送信する際に、そのリクエストにデジタル署名を行う。この署名が正当なものであるかをWCCSが検証するために、Woodpeckerサーバーが起動時に生成する公開鍵が必要となる。この公開鍵は、https://<your-ci-server>/api/signature/public-keyというURLから取得できる。取得した公開鍵をファイルに保存し、WCCSコンテナにマウントして環境変数WCCS_SERVER_PUBLIC_KEYでそのファイルのパスを指定することで、WCCSはWoodpeckerサーバーからのリクエストの正当性を確認できるようになる。

WCCSの準備が整ったら、WoodpeckerサーバーとWCCSを接続する。Woodpeckerサーバーの環境変数WOODPECKER_CONFIG_SERVICE_ENDPOINTにWCCSのエンドポイントURL、例えばhttp://wccs:8080/ciconfigを設定する。これにより、Woodpecker CIでビルドがトリガーされるたびに、Woodpeckerは署名されたJSON形式のペイロードをWCCSに送信する。WCCSはその情報を基にStarlarkファイルをYAMLに変換し、Woodpeckerに返送する。最後に、WoodpeckerのWeb UIで対象のリポジトリ設定を開き、パイプライン設定ファイルのパスをデフォルトの.woodpecker.ymlから.woodpecker.starに変更する。

これでStarlarkパイプラインを使う準備が整った。新しいブランチを作成し、リポジトリのルートに.woodpecker.starファイルを作成する。このファイルには、Pythonに似たStarlark構文でパイプラインのステップを定義する。例えば、main(ctx)関数を定義し、その中でnamestepsimagecommandswhenといったキーを持つ辞書のリストを返す形式でビルド処理を記述する。この定義は、以前YAMLで記述した内容とほぼ同じ意味を持つが、Starlarkの柔軟性により、より複雑な条件分岐やループ処理といったロジックをパイプラインに組み込むことが可能になる。このStarlarkファイルをコミットしてプルリクエストを作成すると、WoodpeckerはWCCSにビルドリクエストを送信し、WCCSがStarlarkをYAMLに変換した上でCIを実行する。ビルドの進行状況はWoodpeckerのUIでリアルタイムに確認できる。

このように、Woodpecker CIとWCCS、そしてTraefikを組み合わせることで、堅牢で安全、かつ非常に柔軟なCI/CDパイプラインを構築できる。Traefikはセキュリティとネットワークの複雑な管理を担い、WCCSはStarlarkというプログラマブルな言語を使うことで、動的でロジックに基づいた複雑なCIパイプラインを可能にする。この構成により、開発者はより高度な自動化を実現し、開発プロセスを効率化できる。

関連コンテンツ

関連IT用語