jenkins前端自动化部署

808 阅读3分钟

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
  • 分别创建AdminGAnonymousGBuilderGViewerG-管理员、其他无权限用户、可以构建的(开发者)、只读,并勾选权限
  • 返回-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很香