jenkins config
安装
安装环境:jdk、Jenkins、git(自行百度)
jenkins 安装完成后,安装新手推荐插件即可,注册管理员帐号
进入插件管理,安装 NodeJS Plugin、Blue Ocean、Generic Webhook Trigger Plugin
安装完重启 jenkins,可以在 jenkins_url 后加restart进行重启
新增项目(流水线)
-
Manage Jenkins-Global Tool Configuration-新增 jdk 关联到服务器 jdk 的路径-新增 git 关联到服务器 git 的路径-NodeJS 选择版本,选定自动安装-保存并重启 jenkins
-
流水线不支持自动安装 nodejs,因此会出现 node 找不到的情况,可以先创建一个自由分格的 job,并选择 node 安装,最后在服务器配置 node 的全局变量,自动安装的 node 保存在 jenkins_home 的 tools,然后再创建流水线
-
进入/Dashboard/打开 Blue Ocean - 创建流水线,选择代码仓库(一般是 Git),填写仓库地址(推荐 http),创建凭证,创建完成,回到/Dashboard
-
项目-配置-分支源-add-Filter by name (with regular expression)-填写需要构建的分支正则表达式
-
git 项目在根目录新增 Jenkinsfile
pipeline { agent { node { label 'master' // 指定jenkins_space 注意Jenkinsfile的路径都应该用 / 分割 customWorkspace 'D:/Software1/huaiji/jenkins_space/roadManagementPC' } } // 配置triggers,用于git webhook自动触发构建 triggers { GenericTrigger ( genericVariables: [[key: 'ref', value: '$.ref']], // 提取请求参数 causeString: 'Triggered by $ref', printContributedVariables: true, // 打印提取的参数 printPostContent: true, silentResponse: false, token: 'dWEdB6KyOCwnPsaO', // webhook token 自己定义 regexpFilterText: '$ref', // 进行构建校验的值 regexpFilterExpression: '^refs/heads/release$' // 构建校验的正则,当校验通过,则触发构建 ) } // 流程 stages { stage('INIT') { steps { bat ''' // windows cmd 脚本 node -v ''' } } } } -
项目-分支-Build Now
-
在 git 仓库项目-settings-配置 webhook,路径格式为
http://jenkins_url/generic-webhook-trigger/invoke?token=Jenkinsfile配置的token选择 push 触发 webhook -
至此 jenkins 配置完成
Jenkins 角色权限配置
- 安装
Role-based Authorization Strategy插件 - Manage Jenkins-Manage and Assign Roles-Manage Roles-Role to add
- 分别创建
AdminG、AnonymousG、BuilderG、ViewerG-管理员、其他无权限用户、可以构建的(开发者)、只读,并勾选权限 - 返回-Assign Roles-User/group to add 添加成员,并分配角色
Jenkins 配置过程中遇到的问题以及我的解决方法
-
参数化构建
- 参数化构建的值都会被注入脚本环境变量,bat中使用%变量名%、node中挂在process.env上,其他环境以此类推,大同小异
- 值得注意的是,在stages-stage-steps-script中根据变量的值判断是否执行操作时,对boolean值的判断,应是字符串
'true'、'false',当时被卡住了一会 - 参数化构建,在通过triggers触发(例如git push)时,参数值均为默认值
-
安装包上传蒲公英
- 官方推荐的插件
Upload to pgyer似乎只适用于自由风格,并没有提供流水线语法,当然可以单独创建一个自由风格的job来做上传,但太麻烦 - 官方API2.0有提供了HTTP POST上传的文档,上面的插件估计也是基于这个实现的,因此采用curl发起上传请求,并成功上传
- 遗憾的是windows批处理无法处理多行文本,所以当更新说明是多行文本的时候,每次上传都只解析到第一行,最终我在流水线中跑一段
node脚本,用request发一段post请求,解决了多行文本的问题
- 官方推荐的插件
-
多用官方的流水线语法转换工具
-
结合
docker很香