OSS CI/CDパイプライン比較:Gitea Actions vs Woodpecker CI vs Drone CI でGitHub Actionsを自社ホスト
オープンソースラボ編集部 ・ 2026年6月14日
OSS CI/CDパイプライン比較:Gitea Actions vs Woodpecker CI vs Drone CI でGitHub Actionsを自社ホスト
GitHub Actions(月$0.008/分〜)・CircleCI(月$30〜)の代替として、Gitea Actions(Giteaに内蔵のCI/CD・GitHub Actions互換)・Woodpecker CI(軽量マルチパイプラインCI)・Drone CI(Docker-nativeなCI)はOSSのCI/CDツールです。
セルフホストCI/CDのメリット
- コスト削減: プライベートリポジトリのCI実行コストがゼロに(GitHub Actionsは月2,000分まで無料)
- 高速なビルド: 専用ハードウェアでGitHub Actionsのshared runnerより高速
- プライバシー: ソースコードが外部サービスのサーバーに渡らない
- カスタムランナー: GPUランナー・ARM64・特殊なビルド環境を自由に構築
主要ツールの概要
Gitea + Gitea Actions
2022年に公開されたGo製のGit自己ホストプラットフォームです(Giteaは2016年〜、GitHubスター45k+)。GitHub Actionsのワークフロー構文と高い互換性を持つCI/CDエンジンで、多くのGitHub Actions Marketplaceのアクションがそのまま動作します。Giteaリポジトリを自社サーバーに置いて、GitHub Actionsのワークフローファイル(.github/workflows/*.yml)をほぼそのまま流用できます。
# GiteaをDockerで起動(SQLite・開発用)
docker run -d --name gitea -p 3000:3000 -p 2222:22 -v gitea_data:/data gitea/gitea:latest
# WebUI: http://localhost:3000
# 初回アクセス時にセットアップウィザードが起動
# Gitea Actionsランナーを追加
# 1. Gitea管理画面でRunner登録トークンを取得
# 2. gitea-act-runnerをインストール
docker run -d --name gitea-runner -v /var/run/docker.sock:/var/run/docker.sock -e GITEA_INSTANCE_URL=http://gitea:3000 -e GITEA_RUNNER_REGISTRATION_TOKEN=your-token gitea/act_runner:latest
# .github/workflows/deploy.yml
# GitHub ActionsのワークフローがGitea Actionsでほぼそのまま動作
name: Deploy to Production
on:
push:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest # Gitea ActionsのDockerランナー
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
- name: Build
run: npm run build
deploy:
needs: test
runs-on: ubuntu-latest
environment: production
steps:
- uses: actions/checkout@v4
- name: Deploy via SSH
run: |
eval $(ssh-agent -s)
ssh-add <(echo "$SSH_KEY")
ssh -o StrictHostKeyChecking=no $DEPLOY_USER@$DEPLOY_HOST "cd /app && git pull && npm install && npm run build && pm2 restart all"
env:
SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }}
DEPLOY_USER: ${{ vars.DEPLOY_USER }}
DEPLOY_HOST: ${{ vars.DEPLOY_HOST }}
Woodpecker CI
2021年にDrone CIからフォークされたGo製の軽量マルチパイプラインCI/CDです。GitHubスター4k+。YAMLで定義した複数パイプラインを並列実行でき、Gitea・GitHub・GitLab・Bitbucketと連携できます。各ステップはDockerコンテナで実行されるため環境の一貫性が保たれます。シンプルな設定で学習コストが低いのが特徴です。
# .woodpecker.yml - Woodpecker CIのパイプライン定義
# マルチパイプライン(並列実行)
when:
branch: main
pipeline:
# テスト
test:
image: node:20-alpine
commands:
- npm ci
- npm test
- npm run lint
# Dockerイメージをビルド・プッシュ
build-image:
image: plugins/docker
settings:
repo: yourregistry.com/my-app
tags:
- latest
- ${CI_COMMIT_SHA:0:8}
username:
from_secret: REGISTRY_USER
password:
from_secret: REGISTRY_PASSWORD
when:
event: push
branch: main
# Kubernetesにデプロイ
deploy:
image: bitnami/kubectl:latest
commands:
- kubectl set image deployment/my-app my-app=yourregistry.com/my-app:${CI_COMMIT_SHA:0:8}
- kubectl rollout status deployment/my-app
secrets:
- KUBECONFIG
when:
event: push
branch: main
depends_on:
- test
- build-image
# Slackにデプロイ通知
notify:
image: plugins/slack
settings:
webhook:
from_secret: SLACK_WEBHOOK_URL
channel: deployments
template: "Deployment to production succeeded: *${CI_REPO_NAME}* (${CI_COMMIT_SHA:0:8})"
when:
status: success
event: push
branch: main
depends_on:
- deploy
# Woodpecker CIをDockerで起動
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
woodpecker-server:
image: woodpeckerci/woodpecker-server:latest
ports:
- "8000:8000"
- "9000:9000" # gRPC(エージェント接続用)
environment:
WOODPECKER_OPEN: "false" # ユーザー登録を制限
WOODPECKER_HOST: https://ci.yourcompany.com
WOODPECKER_GITEA: "true"
WOODPECKER_GITEA_URL: https://git.yourcompany.com
WOODPECKER_GITEA_CLIENT: your-oauth-client-id
WOODPECKER_GITEA_SECRET: your-oauth-secret
WOODPECKER_AGENT_SECRET: your-agent-secret-min-32-chars
volumes:
- woodpecker_data:/var/lib/woodpecker
woodpecker-agent:
image: woodpeckerci/woodpecker-agent:latest
environment:
WOODPECKER_SERVER: woodpecker-server:9000
WOODPECKER_AGENT_SECRET: your-agent-secret-min-32-chars
WOODPECKER_BACKEND: docker
WOODPECKER_MAX_PROCS: "4" # 並列ジョブ数
volumes:
- /var/run/docker.sock:/var/run/docker.sock
volumes:
woodpecker_data:
EOF
docker compose up -d
機能比較表
| 比較項目 | Gitea Actions | Woodpecker CI | Drone CI |
|---|---|---|---|
| GitHub Actions互換性 | ✅(高互換) | ❌ | ❌ |
| Gitea連携 | ✅(内蔵) | ✅ | ✅ |
| マルチクラウドランナー | 限定的 | ✅ | ✅ |
| Dockerビルド | ✅ | ✅ | ✅ |
| ARM64サポート | ✅ | ✅ | ✅ |
| Enterprise版 | ❌ | ❌ | ✅(有料) |
| GitHub Stars | 45k+(Gitea) | 4k+ | 32k+ |
CI/CDの自動デプロイ先としてはDevOpsカテゴリ/categories/devopsのKubernetes・Docker Swarmへの自動デプロイが一般的です。デプロイ成功・失敗の通知にはCommunicationカテゴリ/categories/communicationのSlack Webhookと組み合わせてください。
FAQ
Q. GitHub Actionsのワークフローをそのままセルフホストに移行できますか?
A. Gitea Actionsであれば多くの場合可能です。GitHub Actions MarketplaceのAction(actions/checkout・actions/setup-node等)は大部分がGitea Actionsでも動作します。ただし以下は確認が必要です: ①GitHub固有の環境変数(GITHUB_TOKEN → GITEA_TOKEN等)の書き換え②GitHub Packages・GitHub Pagesとの連携③environment(環境)保護ルールの設定差異。完全移行が難しい場合はGitHub ActionsのSelf-hosted Runnerをセルフホストサーバーに設置する方法もあります(GitHub.comのリポジトリ+自社ランナーの組み合わせ)。
Q. Woodpecker CIでDockerイメージをビルドしてプライベートレジストリにプッシュするには?
A. plugins/dockerイメージを使います(上記の設定例を参照)。Woodpeckerの管理画面でシークレット(REGISTRY_USER・REGISTRY_PASSWORD)を設定し、ワークフローのsettingsセクションでfrom_secretを参照します。Harbor(OSSのコンテナレジストリ)を自社ホストしている場合は、その接続情報をシークレットに設定してください。
Q. セルフホストCI/CDのランナーをGitHub Actionsのrunnerと共用できますか?
A. GitHub ActionsのSelf-hosted Runnerは、セルフホストのGitHubリポジトリに対してのみ接続します(GitHub Enterpriseも含む)。GiteaやGitLabのリポジトリには接続できません。ただし同一ハードウェアでGitHub ActionsのSelf-hosted RunnerとWoodpecker/Drone Agentの両方を動かすことは技術的には可能です(別プロセスとして実行)。
Q. Gitea+Woodpecker CIの構成でMonorepo(複数プロジェクトが1リポジトリ)は処理できますか?
A. はい。Woodpecker CIは.woodpecker/ディレクトリ内に複数のパイプラインファイルを置けます。各ファイルにwhen.pathで変更があったファイルパスを指定してフィルタリングできます。
# .woodpecker/frontend.yml
when:
path:
- "frontend/**" # frontendディレクトリが変更された時だけ実行
# .woodpecker/backend.yml
when:
path:
- "backend/**" # backendディレクトリが変更された時だけ実行
まとめ
| ユースケース | 推奨ツール |
|---|---|
| GitHub Actions移行・互換性重視 | Gitea + Gitea Actions |
| 軽量・マルチパイプライン・Gitea連携 | Woodpecker CI |
| Docker-native・Kubernetes連携 | Drone CI |