内网搭建属于你自己的 Woodpecker CI
第一次看到 Woodpecker 是在 Codeberg 中看到允许为项目配置这个名字的 CI,但因为 Codeberg 自带,感觉也没什么必要多此一举;
后来有一次 Codeberg 维护,自己备份的内网 Forgejo 只能提交代码也不能编译,就觉得还是有点用的。
刚好今天在搞 Cirrus CI,想起来这个事,突然想到可以用 CF Tunnel 把 NAS配置成 Woodpecker,于是有了这篇文章。
version: '3.8'
services:
# --- 第一个 Server: 连接 GitHub ---
woodpecker-server-github:
image: woodpeckerci/woodpecker-server:latest
container_name: woodpecker_server_github
ports:
- "8001:8000" # 映射到宿主机的 8001 端口
volumes:
- woodpecker-data-github:/var/lib/woodpecker/
environment:
- WOODPECKER_HOST=https://ci-github.yourdomain.com
- WOODPECKER_GITHUB=true # 启用 GitHub 驱动
- WOODPECKER_GITHUB_CLIENT=YOUR_GITHUB_CLIENT_ID
- WOODPECKER_GITHUB_SECRET=YOUR_GITHUB_CLIENT_SECRET
- WOODPECKER_AGENT_SECRET=a-very-long-secret-for-github # GitHub 实例的 Agent Secret
- WOODPECKER_ADMIN=your_github_username
# --- 第二个 Server: 连接 Codeberg ---
woodpecker-server-codeberg:
image: woodpeckerci/woodpecker-server:latest
container_name: woodpecker_server_codeberg
ports:
- "8002:8000" # 映射到宿主机的 8002 端口
volumes:
- woodpecker-data-codeberg:/var/lib/woodpecker/
environment:
- WOODPECKER_HOST=https://ci-codeberg.yourdomain.com
- WOODPECKER_GITEA=true # 启用 Gitea/Forgejo 驱动
- WOODPECKER_GITEA_URL=https://codeberg.org
- WOODPECKER_GITEA_CLIENT=YOUR_CODEBERG_CLIENT_ID
- WOODPECKER_GITEA_SECRET=YOUR_CODEBERG_CLIENT_SECRET
- WOODPECKER_AGENT_SECRET=a-very-long-secret-for-codeberg # Codeberg 实例的 Agent Secret
- WOODPECKER_ADMIN=your_codeberg_username
# --- 第三个 Server: 连接内网 Forgejo ---
woodpecker-server-forgejo:
image: woodpeckerci/woodpecker-server:latest
container_name: woodpecker_server_forgejo
ports:
- "8003:8000" # 映射到宿主机的 8003 端口
volumes:
- woodpecker-data-forgejo:/var/lib/woodpecker/
environment:
- WOODPECKER_HOST=http://your-internal-forgejo-ci.local # 内网地址
- WOODPECKER_GITEA=true # 同样使用 Gitea/Forgejo 驱动
- WOODPECKER_GITEA_URL=http://your-internal-forgejo.local # 内网 Forgejo 地址
- WOODPECKER_GITEA_CLIENT=YOUR_FORGEJO_CLIENT_ID
- WOODPECKER_GITEA_SECRET=YOUR_FORGEJO_CLIENT_SECRET
- WOODPECKER_AGENT_SECRET=a-very-long-secret-for-forgejo # Forgejo 实例的 Agent Secret
- WOODPECKER_ADMIN=your_forgejo_username
# --- 共享的 Agent (工人) ---
woodpecker-agent:
image: woodpeckerci/woodpecker-agent:latest
container_name: woodpecker_agent_shared
restart: always
depends_on:
- woodpecker-server-github
- woodpecker-server-codeberg
- woodpecker-server-forgejo
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
# 核心配置:同时连接到三个 Server
- WOODPECKER_SERVER=woodpecker-server-github:9000,woodpecker-server-codeberg:9000,woodpecker-server-forgejo:9000
# 核心配置:提供每个 Server 对应的 Secret,用逗号分隔
- WOODPECKER_AGENT_SECRET=a-very-long-secret-for-github,a-very-long-secret-for-codeberg,a-very-long-secret-for-forgejo
volumes:
woodpecker-data-github:
woodpecker-data-codeberg:
woodpecker-data-forgejo: