ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Woodpecker 入门指南:从激活仓库到跑通你的第一条 Pipeline

Woodpecker 入门指南:从激活仓库到跑通你的第一条 Pipeline CI/CDDevOps【免费下载链接】woodpeckerWoodpecker is a simple, yet powerful CI/CD engine with great extensibility.项目地址https://gitcode.com/gh_mirrors/wo/woodpecker点击查看免费下载本篇指南以 Woodpecker一个简单但功能强大的开源 CI/CD 引擎的官方入门文档为核心带你走完激活仓库 → 编写工作流 → 本地验证 → 推送触发 → 插件复用的完整实战链路。读完本文你将掌握.woodpecker/工作流文件的编写规范、when条件过滤的用法、woodpecker-cli exec的本地调试方法以及插件与密钥secrets的配置技巧并了解到这些功能在 Woodpecker 源码中的实际落地方式。1. 激活仓库Repository Activation在 Woodpecker 中启用一个仓库很简单进入仓库列表页面点击New repository你会看到来自你的代码托管平台forge如 GitHub、GitLab、Gitea 等的仓库列表用一次点击即可完成激活。需要特别注意的是要在 Woodpecker 中启用某个仓库你必须拥有该仓库的Admin管理员权限。原因是 Woodpecker 需要在仓库上添加一个名为webhook网络钩子的东西——Woodpecker 依赖它来感知仓库中的各类动作例如 push推送、pull request合并请求、tag标签等事件从而触发对应的流水线。从源码层面看仓库被激活后每次 webhook 事件到达服务端都会走一遍完整的流水线创建流程server/pipeline/create.go中的Create()会先跳过带 skip 标记的提交再刷新 forge 令牌、持久化 pipeline 记录、从 forge 拉取配置configService.Fetch随后解析、校验并构建流水线条目最后把任务派发给调度器与 agent。也就是说点击激活只是第一步真正的执行链路从 webhook 到达才正式开始。2. 编写第一条工作流仓库激活后Woodpecker 会监听仓库的变更。一旦检测到变更它就会查找流水线配置。因此请在仓库中创建文件.woodpecker/my-first-workflow.yamlwhen: - 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。当仓库中只有一个.woodpecker.yaml时Woodpecker 会创建一个只含单个 workflow 的 pipeline而当配置文件放在.woodpecker/目录下时如本例每个.yaml/.yml文件都会成为一个独立命名的 workflow详见 多工作流文档。用when段做了事件过滤——只有当main分支上发生push事件时这个工作流才会被执行 when: - event: push branch: main ...这里when是全局工作流级条件当when块中的所有子条件都满足时工作流才会被纳入 pipeline否则整个工作流会被跳过。在源码中这一逻辑由 constraint/constraint.go 的Constraint.Match()实现——它依次比对事件Event、仓库Repo、分支Branch注意 tag 事件不参与分支过滤、引用Ref、实例Instance、平台Platform等条件任一子条件不满足即为 false而when列表则是只要其中一条为真就执行。定义了两个步骤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在 Woodpecker 的源码中steps的每个元素对应 types/container.go 里的Container结构体其中image、commands、pull、settings、environment、when、depends_on、failure等字段都被显式解析而整个工作流文件对应 types/workflow.go 的Workflow结构体包含when、workspace、clone、steps、services、labels、depends_on等顶层字段。由此可见工作流 顶层配置 一串步骤容器就是 Woodpecker 配置模型的核心骨架。步骤之间如何共享文件细心的读者会发现build步骤里写入的executable为什么能在a-test-step里被读取这是因为 Woodpecker 在工作流开始时克隆源码并且所有步骤挂载的是同一个共享卷workspace因此文件变更会跨步骤保留steps: - name: build image: debian commands: - echo test content myfile - name: a-test-step image: debian commands: - cat myfile这为第一步构建应用、第二步复用构建产物做测试提供了基础也是本入门示例能跑通的关键机制。需要留意的是文件只在同一个工作流的步骤之间共享不同工作流之间默认不共享任何数据如需传递产物要借助存储类插件例如 S3 插件。3. 本地运行工作流woodpecker-cli exec如果你安装了woodpecker-cli且本地具备受支持的后端backend可以在推送之前先在本地运行工作流以检查语法、命令输出与 metadata 条件是否正确woodpecker-cli exec .woodpecker/my-first-workflow.yaml本地执行非常适合在编辑文件时快速验证。在源码层面这条命令的实现位于 cli/exec/exec.go它会读取工作流文件execFile或扫描整个.woodpecker/目录下所有.yaml/.yml文件execDir自动检测后端默认按顺序尝试 kubernetes、docker、local也可以用--backend-engine docker或--backend-engine local显式指定让本地运行尽量贴近某个 agent 后端与服务器端一样走builder.PipelineBuilder.Build()流程包括环境变量替换、YAML 解析、lint 校验lint.FormatLintError会把解析/校验错误直接打印出来若全部工作流被when过滤掉会提示no workflows to execute (all filtered out)执行结束后若步骤失败命令会以非零退出码返回。更完整的本地执行选项例如--pipeline-event、--commit-branch、--env、--secrets、--secrets-file、--metadata-file等元数据与环境变量覆盖手段可以查阅 本地流水线执行。简单示例测试仅当 push 到 main 时执行这条when条件可以这样模拟woodpecker-cli exec \ --pipeline-event push \ --commit-branch main \ --commit-sha $(git rev-parse HEAD) \ --repo octocat/hello-world \ .woodpecker/my-first-workflow.yaml4. 推送文件触发你的第一条 Pipeline把配置文件推送到仓库后Woodpecker 就会自动执行你的第一条 pipeline。你可以在 Woodpecker UI 中进入仓库的Pipelines区块查看执行情况即本文开头第二张图所示。你大概已经注意到在你的步骤之前还有一个名为clone的步骤。它会在所有步骤之前执行把仓库克隆到一个名为workspace的目录中并且该目录在整个工作流的所有步骤里都可用。这正是前面步骤间文件共享的基础第一个步骤可以用源码构建应用第二个步骤拿到同一份 workspace 后就能直接使用前面构建出的二进制文件并加以测试。关于clone步骤有几点值得深入了解它是Woodpecker 自动配置的默认步骤无需你在 YAML 中声明你可以在工作流中显式定义clone:段来定制它例如覆盖depth、切换自定义克隆插件也可以通过skip_clone: true完全跳过克隆。在服务器端整个触发链路由server/pipeline/create.go的Create()驱动检测到跳过提交见下→ 刷新令牌 → 保存 pipeline → 从 forge 拉取配置 → 持久化配置 → 调用createPipelineItems解析/校验 → 过滤掉空 pipeline → 派发调度与启动。一个实用小技巧提交信息中包含[SKIP CI]或[CI SKIP]不区分大小写即可跳过单个提交的流水线例如git commit -m updated README [CI SKIP]。该逻辑在源码 constraint/skip.go 中由正则\[(?i:ci *skip|skip *ci)\]实现且只对push与 pull request 类事件生效。5. 用插件复用常见任务有些任务每个项目都会遇到——例如部署到 Kubernetes、发送 Slack 通知。这时你可以使用官方及社区维护的插件也可以自行创建插件。如果想把一个文件发布到 S3 bucket只需给 pipeline 添加一个 S3 插件步骤steps: # ... - name: upload image: woodpeckerci/plugin-s3 settings: bucket: my-bucket-name access_key: a50d28f4dd477bc184fbd10b376de753 secret_key: from_secret: aws_secret_key source: public/**/* target: /target/location插件的配置都放在settings段中。这些设置项在编译期会被转换成以PLUGIN_为前缀的大写环境变量注入插件容器——例如设置项url会变成PLUGIN_URL-会转换为_详见 创建插件。这一转换正是由源码 compiler/settings/params.go 的ParamsToEnv/sanitizeParamKey完成的。关于密钥secrets示例中secret_key使用了from_secret: aws_secret_key语法密钥本身需要在 Woodpecker UI 中预先定义。在编译阶段params.go 的injectSecret会识别形如{from_secret: name}的 map并向密钥服务查询真实值注入。密钥分为仓库级、组织级、全局级三个层次默认不会暴露给 pull_request 事件还可以通过插件过滤限制某个密钥只对特定插件可见详见 密钥文档。关于插件的两个要点补充插件本质上是 pipeline 中的一个步骤同样共享 workspace 卷但为安全起见插件被限制为只能执行作者预定义的功能——插件不能与commands或entrypoint同时使用否则会报错。这一点在源码中体现为 container.go 的IsPlugin()方法当容器没有commands、entrypoint且未显式设置environment时它才被判定为插件。步骤级when和文件顶部面向整个工作流的when一样每个步骤也可以有自己的when段用来精细控制该步骤在什么条件下执行例如只在pull_request事件、或只在main分支推送时执行 prettier 检查。步骤级与工作流级when共享同一套 constraint 实现支持event、branch、repo、ref、status、path、evaluate等多种过滤维度。6. 下一步深入工作流语法与插件生态到这里你已经具备编写并运行第一条 pipeline 的完整能力。接下来可以沿着两个方向深入工作流语法全面了解steps的串行/并行控制depends_on、services服务容器、workspace自定义、matrix矩阵构建、failure: ignore失败容忍、pull镜像拉取策略、labels标签调度等能力参考 工作流语法。插件生态了解插件的定位、隔离机制与查找途径参考 插件总览需要自研插件时可以按 创建插件 的指引把脚本打包成以 ENTRYPOINT 方式运行的 Docker 镜像即可。赞分享CI/CDDevOps【免费下载链接】woodpeckerWoodpecker is a simple, yet powerful CI/CD engine with great extensibility.项目地址https://gitcode.com/gh_mirrors/wo/woodpecker点击查看免费下载相关推荐Woodpecker 入门实战从激活仓库到跑通第一条 CI/CD 流水线Woodpecker 入门实战从激活仓库到跑通第一条 CI/CD 流水线 本文是 Woodpecker CI/CD 引擎的零基础入门指南以“创建你的第一条流CI/CDDevOpsDeepSeek-Reasonix宿主裁决机制详解子代理的完成声明如何被验证DeepSeek Reasonix宿主裁决机制详解子代理的完成声明如何被验证 DeepSeek Reasonix 是一款 DeepSeek 原生的终端 AICI/CDDevOpsWoodpecker CI/CD 入门指南从核心概念到第一条流水线Woodpecker CI/CD 入门指南从核心概念到第一条流水线 Woodpecker 是一个轻量、简单、快速且具备良好扩展性的开源 CI/CD 引擎适合CI/CDDevOps上一篇PyGWalker革命性的数据可视化探索工具入门指南下一篇PyKafkaPython开发者必备的Apache Kafka客户端完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表