openeuler/embedded-ci Jenkins流水线配置:从代码克隆到任务执行全流程
openeuler/embedded-ci Jenkins流水线配置:从代码克隆到任务执行全流程
【免费下载链接】embedded-ciembedded-ci is CI/CD repo for openEuler Embedded项目地址: https://gitcode.com/openeuler/embedded-ci
前往项目官网免费下载:https://ar.openeuler.org/ar/
openEuler/embedded-ci 是 openEuler 嵌入式系统的 CI/CD 仓库,通过 Jenkins 流水线实现从代码克隆到任务执行的全流程自动化,有效提升开发效率和代码质量。本文将详细介绍其 Jenkins 流水线的配置方法,帮助新手快速掌握从代码克隆到任务执行的完整流程。
一、项目架构概览
openEuler/embedded-ci 主要包含三个核心模块:CRON(定时任务模块)、CI(持续集成模块)和 GATE(PR 门禁模块)。三者通过调用 oebuild 与基础设施交互,并在 openEuler Embedded Docker 中运行,由 Jenkins 编排流水线工作流。
核心模块功能
- CRON:定时生成 sstate-cache artifacts,利用 BitBake 的共享状态缓存机制加速构建。
- CI:执行每日构建,将成功的构建产物上传到远程服务器,构建失败时自动提交 issue 报告。
- GATE:验证开发者提交的拉取请求,完成后将测试结果反馈到 PR 评论区。
二、环境准备
1. 克隆仓库
首先需要克隆 openEuler/embedded-ci 仓库到本地,仓库地址为:https://gitcode.com/openeuler/embedded-ci
git clone https://gitcode.com/openeuler/embedded-ci.git --depth=12. 配置文件说明
项目的配置文件主要位于 conf 目录下,包括:
- ci.yaml:CI 模块的构建配置文件。
- cron.yaml:CRON 模块的定时任务配置文件。
- plugins.yaml:插件相关配置。
三、Jenkins 流水线配置详解
1. 通用结构
Jenkins 流水线配置主要包含 agent、environment 和 stages 等部分。agent 指定执行节点,environment 设置环境变量,stages 定义具体的构建阶段。
2. CRON 模块流水线配置
CRON 模块通过 Jenkins 流水线定时生成 sstate-cache,其配置示例如下:
pipeline { agent { node "k8s-x86-rtos-openeuler-test" } environment { PATH = "/home/jenkins/.local/bin:${env.PATH}" } stages { stage('clone openeuler-ci') { steps { dir('/home/jenkins/agent'){ script { if(fileExists('openeuler-ci') == false) { sh 'git clone https://gitee.com/alichinese/openeuler-ci.git -v /home/jenkins/agent/openeuler-ci --depth=1' } } } } } stage('run cron') { steps { dir('/home/jenkins/agent/openeuler-ci'){ script{ if(fileExists('/home/jenkins/ccache/openeuler_embedded/gate/openeuler_master') == false) { sh 'mkdir -p /home/jenkins/ccache/openeuler_embedded/gate/openeuler_master' } sh """ python3 main.py cron -s /home/jenkins/ccache/openeuler_embedded """ } } } } } }3. CI 模块流水线配置
CI 模块负责每日构建,其流水线配置如下,包含克隆代码、运行 CI 任务等阶段:
pipeline { agent { node "k8s-x86-rtos-openeuler-test" } environment { PATH = "/home/jenkins/.local/bin:${env.PATH}" } stages { stage('clone openeuler-ci') { steps { dir('/home/jenkins/agent'){ script { if(fileExists('openeuler-ci') == false) { sh 'git clone https://gitee.com/alichinese/openeuler-ci.git -v /home/jenkins/agent/openeuler-ci --depth=1' } } } } } stage('run ci') { steps { dir('/home/jenkins/agent/openeuler-ci'){ script{ if(fileExists('/home/jenkins/ccache/openeuler_embedded/gate/openeuler_master') == false) { sh 'mkdir -p /home/jenkins/ccache/openeuler_embedded/gate/openeuler_master' } withCredentials([ file(credentialsId: 'xxx', variable: 'PUBLISH_KEY'), string(credentialsId: 'xxxt', variable: 'GITEETOKEN')]) { sh """python3 main.py ci \ -s /home/jenkins/ccache/openeuler_embedded \ -e /repo/openeuler/dailybuild/openEuler-Mainline/openEuler-Mainline/embedded_img \ -i "xxx" \ -u root \ -k $PUBLISH_KEY \ -dm \ -o openeuler \ -p yocto-meta-openeuler \ -gt $GITEETOKEN \ -sf """ } } } } } } }4. GATE 模块流水线配置
GATE 模块用于 PR 验证,其流水线配置如下,会根据 PR 相关参数执行验证任务:
pipeline { agent { node "k8s-x86-rtos-openeuler-test" } environment { PATH = "/home/jenkins/.local/bin:${env.PATH}" } stages { stage('clone openeuler-ci') { steps { dir('/home/jenkins/agent'){ script { if(fileExists('openeuler-ci') == false) { sh 'git clone https://gitee.com/alichinese/openeuler-ci.git -v /home/jenkins/agent/openeuler-ci --depth=1' } } } } } stage('run gate') { steps { dir('/home/jenkins/agent/openeuler-ci'){ script{ withCredentials([ string(credentialsId: 'xxx', variable: 'GITEETOKEN'), usernamePassword(credentialsId: 'xxx', usernameVariable: 'JUSER',passwordVariable: 'JPASSWD')]){ sh """ python3 main.py gate \ -s /home/jenkins/ccache/openeuler_embedded \ -pr $giteePullRequestid \ -o $giteeTargetNamespace \ -p $giteeRepoName \ -b $giteeTargetBranch \ -gt $GITEETOKEN \ -juser $JUSER \ -jpwd $JPASSWD \ -dm """ } } } } } } }四、关键参数说明
在 Jenkins 流水线配置中,有一些关键参数需要了解:
- sstate-cache 路径:CRON、CI 和 GATE 模块共享的缓存路径,用于存储和复用构建缓存,提升构建效率。
- credentialsId:Jenkins 中配置的凭证 ID,用于获取访问远程服务器或代码仓库的权限。
- PR 相关参数:如 $giteePullRequestid、$giteeTargetNamespace 等,用于标识 PR 信息,需在 Jenkins 的 Generic Webhook Trigger 中配置变量映射。
五、总结
通过本文的介绍,我们了解了 openEuler/embedded-ci 项目的 Jenkins 流水线配置,包括项目架构、环境准备、各模块流水线配置及关键参数说明。掌握这些内容,有助于新手快速搭建和使用该 CI/CD 系统,实现从代码克隆到任务执行的全流程自动化,提高开发效率和代码质量。
项目的核心功能实现主要集中在 app 目录下,如 app/gate/ 目录包含 GATE 模块的相关代码,app/plugins/ 目录包含各类插件实现。更多详细内容可参考项目中的代码和配置文件。
【免费下载链接】embedded-ciembedded-ci is CI/CD repo for openEuler Embedded项目地址: https://gitcode.com/openeuler/embedded-ci
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考