前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Electron 应用的流水线设计

Electron 应用的流水线设计

作者头像
LinuxSuRen
发布2019-04-19 16:12:14
8340
发布2019-04-19 16:12:14
举报
文章被收录于专栏:Jenkins

面向读者:需要了解 Jenkins 流水线的基本语法。

Electron 是由 Github 开发,用 HTML,CSS 和 JavaScript 来构建跨平台桌面应用程序的一个开源库。

本文将介绍 Electron 桌面应用的流水线的设计。

但是如何介绍呢?倒是个大问题。笔者尝试直接贴代码,在代码注释中讲解。这是一次尝试,希望得到你的反馈。

完整代码

代码语言:javascript
复制
pipeline {// 我们决定每一个阶段指定 agent,所以,// 流水线的 agent 设置为 none,这样不会占用 agentagent none// 指定整条流水线的环境变量environment {  APP_VERSION = ""  APP_NAME = "electron-webpack-quick-start"}
stages {  stage("生成版本号"){    agent {label "linux" }    steps{      script{          APP_VERSION = generateVersion("1.0.0")          echo "version is ${APP_VERSION}"    }}  }  stage('并行构建') {    // 快速失败,只要其中一个平台构建失败,    // 整次构建算失败    failFast true    // parallel 闭包内的阶段将并行执行    parallel {      stage('Windows平台下构建') {        agent {label "windows && nodejs" }        steps {          echo "${APP_VERSION}"        }      }      stage('Linux平台下构建') {        agent {label  "linux && nodejs" }        // 不同平台可能存在不同的环境变量        // environment 支持阶段级的环境变量        environment{            SUFFIX = "tar.xz"            APP_PLATFORM = "linux"            ARTIFACT_PATH = "dist/${APP_NAME}-${APP_PLATFORM}-${APP_VERSION}.${SUFFIX}"        }        steps {          script{            // Jenkins nodejs 插件提供的 nodejs 包装器            // 包装器内可以执行 npm 命令。            // nodejs10.15.2 是在 Jenkins 的全局工具配置中添加的 NodeJS 安装器            nodejs(nodeJSInstallationName: 'nodejs10.15.2') {              // 执行具体的构建命令              sh "npm install yarn"              sh "yarn version --new-version ${APP_VERSION}"              sh "yarn install"              sh "yarn dist --linux deb ${SUFFIX}"              // 上传制品              uploadArtifact("${APP_NAME}", "${APP_VERSION}", "${ARTIFACT_PATH}")        }}} // 将括号合并是为了让代码看起来紧凑,提升阅读体验。下同。      }      stage('Mac平台下构建') {        agent {label "mac && nodejs" }        stages {          stage('mac 下阶段1') {            steps { echo "staging 1" }          }          stage('mac 下阶段2') {            steps { echo "staging 2" }          }        }  } } }   stage("其它阶段,读者可根据情况自行添加"){    agent {label "linux"}    steps{        echo "发布"    } } }post {  always { cleanWs() } } // 清理工作空间}
def generateVersion(def ver){  def gitCommitId = env.GIT_COMMIT.take(7)  return "${ver}-${gitCommitId}.${env.BUILD_NUMBER}"}
def uploadArtifact(def appName, def appVersion, def artifactPath){  echo "根据参数将制品上传到制品库中,待测试"}

代码补充说明

因为 Electron 是跨平台的,我们需要将构建过程分别放到 Windows、Linux、Mac 各平台下执行。所以,不同平台的构建任务需要执行在不同的 agent 上。我们通过在 stage内定义 agent 实现。如在“Mac平台下构建”的阶段中, agent{label"mac && nodejs"} 指定了只有 label 同时包括了 mac 和 nodejs 的 agent 才能执行构建。

多平台的构建应该是并行的,以提升流水线的效率。我们通过 parallel 指令实现。

另外,默认 Electron 应用使用的三段式版本号设计,即 Major.Minor.Patch。但是笔者认为三段式的版本号信息还不够追踪应用与构建之间的关系。笔者希望版本号能反应出构建号和源代码的 commit id。函数 generateVersion 用于生成此类版本号。生成的版本号,看起来类似这样: 1.0.0-f7b06d0.28

完整源码地址:https://github.com/zacker330/electronjs-pipeline-demo

小结

上例中,Electron 应用的流水线设计思路,不只是针对 Electron 应用,所有的跨平台应用的流水线都可以参考此思路进行设计。设计思路大概如下:

  1. 多平台构建并行化。本文只有操作系统的类型这个维度进行了说明。现实中,还需要考虑其它维度,如系统位数(32位、64位)、各操作系统下的各版本。
  2. 各平台下的构建只做一次编译打包。并将制品上传到制品库,以方便后续步骤或阶段使用。
  3. 全局变量与平台相关变量进行分离。

最后,希望能给读者带来一些启发。

参考:

  • 持续交付的八大原则:https://blog.csdn.net/tony1130/article/details/6673741
  • Jenkins nodejs 插件:https://plugins.jenkins.io/nodejs
  • Electron 版本管理:https://electronjs.org/docs/tutorial/electron-versioning#semver

审校

  • LinuxSuRen(https://github.com/LinuxSuRen)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Jenkins 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 完整代码
  • 代码补充说明
  • 小结
  • 参考:
  • 审校
相关产品与服务
制品库
CODING 制品库(CODING Artifact Repositories,CODING-AR)用以管理源代码编译后的构建产物,支持 Docker、Maven、Helm、Npm 包等常见制品库类型,制品库可以跟源代码协同进行版本化控制,可以与本地各构建工具和云上的持续集成,持续部署无缝结合,并支持漏洞扫描等特性。为研发团队提供优质高效的构建物管理服务,把控构建物质量。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档