Woodpecker CI:Jenkinsがリソースを消費しすぎると感じた時に
もしあなたが低スペックなVPS(例:2 vCPU、2GB RAM)を運用しているなら、Jenkinsをインストールすることは悪夢に近いかもしれません。JavaベースのJenkinsは、起動直後から少なくとも1GBのRAMを占有します。Dockerイメージのビルドや静的ウェブサイトのデプロイといった小規模なプロジェクトには、Woodpecker CIがよりスマートな代替案となります。私は2年以上、個人プロジェクトでFedora Serverを運用してきましたが、Woodpecker CIこそがDevOpsプロセスを最適化するための最後のピースだと感じています。
Woodpeckerは、完全なオープンソース時代のDrone CIの長所を継承しています。Go言語で記述されており、コンテナとして非常にスムーズに動作し、Giteaとの連携も非常に高速です。
実例比較:なぜWoodpeckerを選ぶのか?
設定に取り掛かる前に、一般的なツールとの違いを実際の数値で見てみましょう:
- Jenkins: 多機能ですが重いです。安定動作には最低2GBのRAMが必要です。Groovy Pipelineの設定は初心者にはやや複雑です。
- GitLab CI: 素晴らしいですが、巨大なGitLab本体が付属します。セルフホストする場合、システム全体で少なくとも4GB〜8GBのRAMが必要です。
- GitHub Actions: 便利ですが、完全にクラウドに依存します。内部コードのセキュリティのためにオンプレミスで展開したい場合には不向きです。
- Woodpecker CI: YAML(GitHub Actionsに類似)を使用します。Woodpecker Serverのメモリ消費量はわずか100MB〜200MB程度です。これは低スペックサーバーにとって理想的な数値です。
注意すべきメリットとデメリット
メリット:
- ほぼ瞬時に起動します。
- 完全なオープンソース(Apache 2.0)であり、有料機能による制限の心配がありません。
.woodpecker.ymlファイルによるパイプライン設定は非常に直感的です。- Gitea、Forgejo、GitHub、GitLabを良好にサポートしています。
デメリット:
- プラグインの数はJenkinsより少ないです。しかし、一般的なビルド/デプロイのニーズの95%はカバーできています。
- 日本語のドキュメントやコミュニティはまだそれほど多くありません。
Fedora ServerとWoodpeckerを組み合わせる強み
Fedora Serverは常に最新のカーネルを採用し、Podmanが標準搭載されています。Dockerの代わりに、Fedora上のPodmanはSELinuxを通じてより優れたセキュリティメカニズムを提供します。このプラットフォームでWoodpeckerを展開することで、複雑な調整をすることなく、最新のコンテナビルドの安定性を享受できます。
ステップ 1:GiteaでOAuthアプリケーションを設定する
Woodpeckerがリポジトリにアクセスできるように、Giteaでセキュリティブリッジを作成する必要があります:
- Giteaにアクセスし、Settings -> Applicationsに移動します。
- Manage OAuth2 Applicationsセクションで、アプリケーション名を
Woodpecker CIに設定します。 - Redirect URI:サーバーのアドレスを
https://ci.yourdomain.com/authorizeの形式で入力します。 - Create Application をクリックした後、Client ID と Client Secret をメモ帳などにコピーしておきます。これらはサーバー設定ステップで必要になります。
ステップ 2:FedoraでPodman環境を準備する
Fedora Serverには既にPodmanがインストールされていますが、podman-compose を追加し、Agentがシステムと通信できるようにソケットを有効化する必要があります。
sudo dnf update -y
sudo dnf install podman podman-compose -y
# Woodpecker Agentがビルドコンテナを作成できるようにソケットを有効化
sudo systemctl enable --now podman.socket
ls -al /run/podman/podman.sock コマンドでソケットの状態を確認します。ソケットファイルが表示されれば成功です。
ステップ 3:Podman Composeを使用してWoodpeckerをデプロイする
管理を容易にするため、ServerとAgentを1つのファイルにまとめます。作業ディレクトリを作成しましょう:
mkdir ~/woodpecker && cd ~/woodpecker
nano docker-compose.yml
ファイルに以下の設定内容を貼り付けます。環境変数は、先ほど作成したOAuth情報に合わせて変更してください:
version: '3'
services:
woodpecker-server:
image: woodpeckerci/woodpecker-server:latest
volumes:
- ./woodpecker-data:/var/lib/woodpecker/
environment:
- WOODPECKER_GITEA=true
- WOODPECKER_GITEA_URL=https://git.yourdomain.com
- WOODPECKER_GITEA_CLIENT=YOUR_CLIENT_ID
- WOODPECKER_GITEA_SECRET=YOUR_CLIENT_SECRET
- WOODPECKER_SERVER_ADDR=:8000
- WOODPECKER_AGENT_SECRET=あなたの安全なランダム文字列
ports:
- 8000:8000
restart: always
woodpecker-agent:
image: woodpeckerci/woodpecker-agent:latest
command: agent
volumes:
- /run/podman/podman.sock:/var/run/docker.sock
environment:
- WOODPECKER_SERVER=woodpecker-server:9000
- WOODPECKER_AGENT_SECRET=あなたの安全なランダム文字列
- WOODPECKER_BACKEND=docker
restart: always
depends_on:
- woodpecker-server
SELinuxに関するヒント: Fedoraはソケットへのアクセス権限に非常に厳格です。Permission Deniedエラーが発生した場合は、以下のコマンドを実行してコンテナによるcgroup管理を許可してください:
sudo setsebool -P container_manage_cgroup on
podman-compose up -d コマンドでシステムを起動します。
ステップ 4:プロジェクトのパイプラインを有効化する
ブラウザを開き、サーバーのポート8000にアクセスします。Giteaアカウントでログインしてください。コントロールパネルに既存のリポジトリがすべて表示されます。
対象のリポジトリで Enable をクリックするだけです。WoodpeckerはGitea側にWebhookを自動的に設定します。これ以降、コードをプッシュするたびにビルドプロセスが自動的に開始されます。
ステップ 5:サンプルパイプライン定義ファイルの作成
機能をテストするために、Node.jsプロジェクトのルートディレクトリに .woodpecker.yml ファイルを作成します:
pipeline:
test:
image: node:18-alpine
commands:
- npm install
- npm test
build-image:
image: plugins/docker
settings:
repo: registry.yourdomain.com/my-app
registry: registry.yourdomain.com
username:
from_secret: docker_user
password:
from_secret: docker_pass
when:
event: push
branch: main
このファイルを main ブランチにプッシュすると、Woodpecker Agentは自動的にNode.jsイメージをプルしてテストを実行します。問題がなければ、ビルドを続行し、イメージをレジストリにプッシュします。
実際の運用経験
FedoraでWoodpeckerをしばらく使用してみて、3つの重要なポイントをまとめました:
- ディスク容量の解放: ビルドコンテナは不要なイメージを残しがちです。メモリ不足を避けるために、毎週
podman image prune -fを実行するcronjobを設定することをお勧めします。 - シークレットの保護: YAMLファイルにパスワードを直接記述しないでください。WoodpeckerのWebインターフェースにあるリポジトリ設定の Secrets 機能を使用しましょう。
- キャッシュによるビルドの高速化: 大規模なプロジェクトでは、キャッシュプラグインを使用して
node_modulesやvendorディレクトリを保存してください。これにより、ビルド時間を5分から1分未満に短縮できる場合があります。
Woodpecker CIとFedora Serverの組み合わせは、運用コストをほぼゼロに抑えながら、非常にプロフェッショナルなDevOps環境を提供してくれます。設定がうまくいくことを願っています!

