Woodpecker-CI 介绍
Table of Contents
欢迎来到 Woodpecker
Woodpecker 是一个 CI/CD 工具。它的设计目标是轻量级、简单易用和快速。在我们深入了解细节之前,让我们先看看一些基础知识。
你听说过 CI/CD 或 pipelines 吗?
如果您还没有,也不用担心。我们将指导您了解基础知识。CI/CD 代表持续集成和持续部署。它基本上就像一条传送带,将您的代码从开发环境运送到生产环境,并在此过程中进行各种检查、测试和例程。典型的流程可能包含以下步骤:
- 运行测试
- 构建你的应用程序
- 部署你的应用程序
你了解容器吗?
如果你已经在日常工作流程中使用容器,你一定会喜欢 Woodpecker。如果还没有,你会惊讶于开始使用容器是多么容易。
创建你的第一个 pipelines
1. 存储库激活
要在 Woodpecker 中激活你的仓库,请导航至仓库列表并点击 New repository 。你将看到来自你的 forge(GitHub、Gitlab 等)的仓库列表,只需单击即可激活。
要在 Woodpecker 中启用存储库,您必须拥有该存储库的 Admin 权限,以便 Woodpecker 可以添加称为 webhook 的东西(Woodpecker 需要它了解推送、拉取请求、标签等操作)。
2. 定义第一个工作流程
启用代码库后,Woodpecker 将监听代码库中的更改。检测到更改后,Woodpecker 将检查管道配置。因此,让我们在代码库中的 .woodpecker/my-first-workflow.yaml 处创建一个文件:
.woodpecker/my-first-workflow.yaml
when:
- event: push
branch: main
steps:
- name: build
image: debian
commands:
- echo "This is the build step"
- echo "binary-data-123" > executable
- name: a-test-step
image: golang:1.16
commands:
- echo "Testing ..."
- ./executable
那么我们在这里做了什么?
- 我们定义了您的第一个工作流文件 my-first-workflow.yaml 。
- 此工作流程将在 main 分支上发生推送事件时执行,因为我们使用 when 部分添加了一个过滤器:
+ when:
+ - event: push
+ branch: main
...
-
我们定义了两个步骤: build 和 a-test-step
步骤按照定义的顺序执行,因此将首先执行 build ,然后执行 a-test-step 。
在 build 步骤中,我们使用 debian 映像并构建一个名为 executable 的“二进制文件”。
在 a-test-step 中我们使用 golang:1.16 镜像并运行 executable 文件进行测试。
您可以使用您有权访问的 Docker Hub 等注册表中的任何映像:
steps:
- name: build
- image: debian
+ image: my-company/image-with-aws_cli
commands:
- aws help
3. 推送文件并触发第一个管道
如果您现在将此文件推送到您的存储库,Woodpecker 将执行您的第一个管道。
您可以通过导航到存储库的 Pipelines 部分来检查 Woodpecker UI 中的管道执行情况。

你可能已经注意到,在你的步骤之前还有一个名为 clone 的步骤。此步骤会将你的仓库克隆到一个名为 workspace 文件夹中,该文件夹在所有步骤中均可访问。
例如,这允许第一步使用您的源代码构建您的应用程序,并且由于第二步将接收相同的工作区,它可以使用先前构建的二进制文件并对其进行测试。
4. 使用插件执行可重复使用的任务
工作流语法
只写了基本的
Skip Commits 跳过提交
Woodpecker 允许通过在提交信息中添加 [SKIP CI] 或 [CI SKIP] 来跳过单个提交。注意,不区分大小写。
Steps 步骤
工作流程的每个步骤都在指定的容器内执行命令。
定义的步骤默认按顺序执行,如果它们需要并行运行,则可以使用 depends_on 。
使用 git 将关联的提交签出到工作区,该工作区作为工作目录安装到工作流程的每个步骤。
文件更改是增量的
Woodpecker 在工作流程开始时克隆源代码
由于同一卷安装到所有步骤,因此文件更改将持续到各个步骤
例如以下配置中myfile 是可以在两个步骤间传递的
steps:
- name: build
image: debian
commands:
- echo "test content" > myfile
- name: a-test-step
image: debian
commands:
- cat myfile
image
Woodpecker 拉取定义的图像并将其用作执行工作流步骤命令、插件和服务容器的环境。
当使用 local 后端时, image 条目用于指定用于运行命令的 shell,例如 Bash 或 Fish。
Woodpecker 支持来自任何 Docker 注册表的任何有效 Docker 镜像:
后端说明
后端 backends ,一共有4种.
简要说明 local 后端
本地后端在本地系统上执行管道,没有任何隔离。
本地后端没有提供Services见此链接获取更多信息
由于命令直接在与代理相同的上下文中运行(相同的用户,相同的文件系统),因此可以使用恶意管道来访问代理配置,尤其是 WOODPECKER_AGENT_SECRET 变量。
建议仅在代码和管道可信任的私有设置中使用此后端。不应在任何人都可以提交代码或添加新仓库的公共实例中使用它。代理不应以特权用户 (root) 身份运行。
本地后端将使用 $TMPDIR 中的随机目录来存储克隆的代码并执行命令。
为了使用这个后端,你需要下载(或构建) agent ,配置并在主机上运行它。
在local后端中,在$PATH中必须有 plugin-git 二进制文件,默认clone步骤才能正常工作
在步骤上的特定配置
shell
image 入口点用于指定用于运行命令的 shell,例如 bash 或 fish
steps:
- name: build
image: bash
commands: [...]
简要说明 Docker 后端
这是 Woodpecker 使用的原始后端。docker 后端在代理上启动的单独容器内执行每个步骤。
Woodpecker 支持 Docker 凭证 ,以便安全地存储镜像仓库凭证。请安装相应的凭证助手,并在通过 WOODPECKER_DOCKER_CONFIG 传递的 Docker 配置文件中进行配置。
要将您的凭证助手添加到 Woodpecker 服务器容器,您可以使用以下代码来构建自定义图像:
在步骤上的特定配置
默认情况下,docker 后端启动步骤容器时不使用 –user 标志。这意味着步骤容器将使用容器的默认用户。要更改此行为,您可以将 user 后端选项设置为首选用户/组:
steps:
- name: example
image: alpine
commands:
- whoami
backend_options:
docker:
user: 65534:65534
语法与 docker run –user 标志相同。
安装 woodpecker-ci server
sudo pacman -S woodpecker-server
其余系统见 https://woodpecker-ci.org/docs/next/administration/installation/packages
配置
Woodpecker 没有自己的用户注册机制。用户由你的 Forge 提供(使用 OAuth2)。默认情况下,注册机制处于关闭状态( WOODPECKER_OPEN=false )。如果注册机制处于开放状态,则任何拥有账户的用户都可以通过配置的 Forge 登录 Woodpecker。
关联gitea
在/etc/woodpecker/server.env中添加配置即可
WOODPECKER_GITEA=true
WOODPECKER_GITEA_URL=
WOODPECKER_GITEA_CLIENT=
WOODPECKER_GITEA_SECRET=
安装 woodpecker-ci agent
sudo pacman -S woodpecker-agent
配置
agent可以通过命令行或环境变量进行配置。您至少需要以下信息:
WOODPECKER_SERVER=localhost:9000
WOODPECKER_AGENT_SECRET="your-shared-secret-goes-here"
agents 启动时,它会使用 WOODPECKER_AGENT_SECRET 中的令牌连接到服务器。服务器会识别代理,如果之前未连接,则会将代理注册到其数据库中。
具体注册步骤见 https://woodpecker-ci.org/docs/next/administration/configuration/agent
安装 plugin-git
yay -S plugin-git
界面展示
agents 管理页面 展示

队列展示

API swagger展示

仓库展示(由于隐私问题,所以只展示了测试仓库)

pipeline展示

steps展示

run in docker 配置展示

run in local 配置展示

gitea icon 展示
