AI

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 ActionsWoodpecker CIDrone CI
GitHub Actions互換性✅(高互換)
Gitea連携✅(内蔵)
マルチクラウドランナー限定的
Dockerビルド
ARM64サポート
Enterprise版✅(有料)
GitHub Stars45k+(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

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。