基于 Docker 构建轻量级 CI 系统:Gitea 与 Woodpecker CI 集成
WoodpeckerCI 是一个由社区维护的 DroneCI 分支,使用 Apache License 2.0 许可证发布。社区版进一步扩展了 pipeline 的功能特性、支持对文件路径设置 pipeline 执行条件,并且可以与 Gitea 实现紧密集成。不同的是,DroneCI 的配置文件是 .drone.yml
,WoodpeckerCI 重命名为了 .woodpecker.yml
。好在 WoodpeckerCI 也兼容 DroneCI 的配置文件,迁移起来并不会太麻烦。
下面,我们以 try.gitea.io
服务器为例,实现 Gitea 与 WoodpeckerCI 的系统集成。
系统结构
- Gitea : VCS,代码仓库。
- Server : 中心服务器,负责任务调度。
- Agent : 边缘节点,执行 Pipeline 的具体任务。
用户将代码推送到 Gitea 时触发 Webhook,调动 WoodpeckerCI 从 Gitea 拉取最新的代码并根据 .woodpecker.yml
描述文件执行 CI 流水线。
网络结构
由于 CI 任务的特殊性,工作繁忙时会占用较多的系统资源,因此为了提高系统整体可靠性,不建议将 Gitea、WoodpeckerCI Server 和 Agent 安装在同一台服务器上。
- 在本地局域网搭建时应该确保以上服务可以通过域名、IP 互相访问。例如:
gitea.example.com -> 192.168.3.10
ci.example.com -> 192.168.3.20
agent.example.com -> 192.168.3.30
- 如需使用
docker compose
在本地开发环境搭建整套系统,可以阅读参考官方手册: - https://woodpecker-ci.org/docs/administration/setup
- 如需使用
准备工作
在 Gitea 上创建 OAuth2 应用程序
在本例中,WoodpeckerCI 基于 OAuth2 认证授权访问您的 Gitea API。您可以创建一个专用于 CI 的账号,并将该账号添加为代码仓库协作者或者组织管理员。
首先,登录一个您要用于集成 WoodpeckerCI 的 Gitea 账号,进入 设置 - 应用,创建一个 Gitea OAuth2 应用程序。
- 应用名称 : 您可以任取一个名字,此案例中我们填写 WoodpeckerCI
- 重定向 URL : 授权回调 URL,例如
https://<host>/authorize
修改 Gitea 服务器的 Webhook 白名单
出于安全考虑,Gitea 默认禁止触发外部主机的 Webhook。您可以将外部主机添加到 webhook.ALLOWED_HOST_LIST
白名单来解除这一限制。请参考文档 Webhook 了解具体方法。
修改配置时,打开 conf/app.ini
,添加 ALLOWED_HOST_LIST = *
到 [webhook]
栏目中,并重启 Gitea 服务器。例如:
[webhook]
ALLOWED_HOST_LIST = *
创建共享密钥
共享密钥用于 WoodpeckerCI Server 和 Agent 之间的通信认证。记录下您创建的共享密钥,稍后在安装 WoodpeckerCI Server 和 Agent 时将使用此密钥填充环境变量 WOODPECKER_AGENT_SECRET
。
您可以使用 OpenSSL 生成随机的长度为 32 位的十六进制共享密钥:
$ openssl rand -hex 32
c5704bc389f1e3d47f1c4751d1295c86
使用 Docker 安装 WoodpeckerCI 服务器和 Agent
WoodpeckerCI 服务器是一个轻量级的 Docker 容器,使用 SQLite 作为默认数据库,支持通过环境变量动态设定运行参数。有关配置参数的完整列表,请参阅 WoodpeckerCI 服务器配置文档。
环境变量
- WOODPECKER_OPEN : 默认
false
。是否开放注册。 - WOODPECKER_HOST : 默认空。设置服务器访问地址,例如
http://ci.example.com
。 - WOODPECKER_GITEA : 默认
false
。启用 Gitea 驱动。 - WOODPECKER_GITEA_UR : 默认
https://try.gitea.io
。配置 Gitea 服务器地址。 - OODPECKER_GITEA_CLIENT : 默认空。配置 Gitea OAuth 客户端 ID
- WOODPECKER_GITEA_SECRE : 默认空。配置 Gitea OAuth 客户端密钥
- WOODPECKER_GITEA_SKIP_VERIFY : 默认
false
。不验证 SSL 证书有效性。 - WOODPECKER_SERVER : 默认空。WoodpeckerCI 主服务器地址。
- WOODPECKER_AGENT_SECRET : 默认空。WoodpeckerCI 服务器之间的共享密钥。可以使用命令
openssl rand -hex 32
生成。
启动服务器
为了便于修改容器参数,我们创建一个 docker-compose.yml
模板来配置 WoodpeckerCI 服务器容器。
根据下面的 Docker Compose 模板,使用命令 docker compose up -d
启动 WoodpeckerCI 服务器。
# docker-compose.yml
version: '3'
services:
woodpecker-server:
image: woodpeckerci/woodpecker-server:latest
ports:
- 8000:8000
volumes:
- woodpecker-server-data:/var/lib/woodpecker/
environment:
- WOODPECKER_OPEN=true
- WOODPECKER_HOST=${WOODPECKER_HOST}
- WOODPECKER_GITEA=true
- WOODPECKER_GITEA_URL=${WOODPECKER_GITEA_URL}
- WOODPECKER_GITEA_CLIENT=${WOODPECKER_GITEA_CLIENT}
- WOODPECKER_GITEA_SECRET=${WOODPECKER_GITEA_SECRET}
- WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET}
woodpecker-agent:
image: woodpeckerci/woodpecker-agent:latest
command: agent
restart: always
depends_on:
- woodpecker-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WOODPECKER_SERVER=woodpecker-server:9000
- WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET}
volumes:
woodpecker-server-data:
初始化 WoodpeckerCI
登录 WoodpeckerCI 网页面板,http://<host>:8000
,点击 login
跳转到 Gitea 授权页面,点击应用授权。
注意:如果出现 Unregistered Redirect URI,表示您设置的重定向 URI与 WoodpeckerCI 不匹配,请重新检查。
CI 实操:创建 .woodpecker.yml 验证 Pipeline
WoodpeckerCI 基于 Docker 实现了对各种编程语言和包管理工具的流水线支持。这部分在官方的使用说明中有完整详细的介绍:
这里我们以 Golang + Node.js 的项目为例,在 Gitea 仓库根目录创建一个 .woodpecker.yml
作为我们自定义的流水线。示范:
# .woodpecker.yml
pipeline:
backend:
image: golang
commands:
- go build
- go test
frontend:
image: node
commands:
- npm install
- npm run test
- npm run build
在 WoodpeckerCI 面板上激活仓库后提交代码到 Gitea 仓库,随即触发 Pipeline 任务。
回到 Gitea 可以看到构建完成后显示的消息:
ci/woodpecker/push/woodpecker Build is passing
基于 Docker 构建轻量级 CI 系统:Gitea 与 Woodpecker CI 集成的更多相关文章
- DevOps实践之一:基于Docker构建企业Jenkins CI平台
基于Docker构建企业Jenkins CI平台 一.什么是CI 持续集成(Continuous integration)是一种软件开发实践,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来 ...
- 视频私有云实战:基于Docker构建点播私有云平台
私有云是为一个客户单独使用而构建的,因而提供对数据.安全性和服务质量的最有效控制.前置条件是客户拥有基础设施,并可以使用基础设施在其上部署应用程序.其核心属性是专有的资源.本篇文章将会结合网易云信的实 ...
- Docker从入门到掉坑(二):基于Docker构建SpringBoot微服务
本篇为Docker从入门到掉坑第二篇:基于Docker构建SpringBoot微服务,没有看过上一篇的最好读过 Docker 从入门到掉坑 之后,阅读本篇. 在之前的文章里面介绍了如何基于docker ...
- 【docker构建】基于docker构建wordpress博客网站平台
WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站.也可以把 WordPress当作一个内容管理系统(CMS)来使用. WordPre ...
- 基于MRS-ClickHouse构建用户画像系统方案介绍
业务场景 用户画像是对用户信息的标签化.用户画像系统通过对收集的各维度数据,进行深度的分析和挖掘,给不同的用户打上不同的标签,从而刻画出客户的全貌.通过用户画像系统,可以对各个用户进行精准定位,从而将 ...
- Win10系统下基于Docker构建Appium容器连接Android模拟器Genymotion完成移动端Python自动化测试
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_196 Python自动化,大概也许或者是今年最具热度的话题之一了.七月流火,招聘市场上对于Python自动化的追捧热度仍未消减,那 ...
- 基于docker搭建Jenkins+Gitlab+Harbor+Rancher架构实现CI/CD操作
一.各个组件的功能描述: Docker 是一个开源的应用容器引擎. Jenkis 是一个开源自动化服务器. (1).负责监控gitlab代码.gitlab中配置文件的变动: (2).负责执行镜像文件的 ...
- 基于docker构建jenkins和svn服务(转)
码农们很定都知道svn的重要性,机器坏掉丢代码的惨痛教训想必很多人都有. jenkins可能很多人都不了解.这是一个持续集成的工具,在敏捷开发领域很流行:跟svn结合可以实现定期build.check ...
- 基于 Docker 构建企业 Jenkins CI平台
持续集成(Continuous Integration,CI):代码合并.构建.部署.测试都在一起,不断地执行这个过程,并对结果反馈. 持续部署(Continuous Deployment,CD):部 ...
随机推荐
- Excelize 发布 2.3.0 版本, Go 语言 Excel 文档基础库
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准.可以使用它来读取.写入由 Microsoft Exc ...
- 【LOJ#3197】【eJOI2019】T形覆盖 - (图论、简单推导)
题面 题解 (题目中说的四种摆放方式实际上是分别旋转0°,90°,180°,270°后的图形) 题目中关于摆放方式的描述听起来很臭,我们把它转换一下,每个拼版先覆盖"上下左右中"五 ...
- grep使用常用操作十五条
grep的全部使用语法参照grep --help,日常工作常用的语法如下:构造数据如下:test001.txt与test002.txt 一.在单个文件中查询指定字符串 grep abc test01/ ...
- QtCreator像C# region一样折叠代码
C# #region "comment" [code] #endregion 就可以在VS中实现代码折叠了 QtCreator #pragma region "comme ...
- 一 策略模式 来自CBF4LIFE 的设计模式
刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题,嘿,还别说,真是解决了大问题,搞到后是周瑜陪了夫人又折兵呀,那咱们先看看这个场景是什么样子的. 先说这个场景中 ...
- 第九十篇:Vue 具名插槽
好家伙 1.什么是具名插槽? 来简单理解一下, 具有自己名字的插槽,就是具名插槽 我们来尝试使用一下具名插槽: 在Article.vue组件中: <template> <div cl ...
- KingbaseES 转义字符
在SQL标准中字符串是用单引号括起来的,在KingbaseES中遵守了该标准,如果在字符串中需要使用到单引号,就需要对其进行转义. 方式一:使用E和反斜杠进行转义 方式二:直接用一个单引号来转义 在K ...
- C++ 由快排学习到的的随机数等知识
起: 力扣的912题 数组排序 ,想着先用快速排序来写写,在实际用c++编写的时候,有一些之前没注意到的细节问题造成了一些麻烦. 912. 排序数组 - 力扣(LeetCode) 快排思想 每次以数组 ...
- 深度学习库 SynapseML for .NET 发布0.1 版本
2021年11月 微软开源一款简单的.多语言的.大规模并行的机器学习库 SynapseML(以前称为 MMLSpark),以帮助开发人员简化机器学习管道的创建.具体参见[1]微软深度学习库 Synap ...
- 助力培养高质量AI人才,璞公英乐学平台在日本深受好评!
璞公英乐学平台(原名"璞睿魔数")自进入日本市场以来,受到日本用户的广泛好评.近日,日本AI门户网站AIsmiley在发刊的杂志<AI人才育成指南>中对璞公英乐学平台做 ...