Electron 應用的流水線設計

面向讀者:須要瞭解 Jenkins 流水線的基本語法。 Electron 是由 Github 開發,用 HTML,CSS 和 JavaScript 來構建跨平臺桌面應用程序的一個開源庫。 本文將介紹 Electron 桌面應用的流水線的設計。 可是如何介紹呢?卻是個大問題。筆者嘗試直接貼代碼,在代碼註釋中講解。這是一次嘗試,但願獲得你的反饋。node

完整代碼linux

pipeline {
// 咱們決定每個階段指定 agent,因此,
// 流水線的 agent 設置爲 none,這樣不會佔用 agent
agent 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 "根據參數將製品上傳到製品庫中,待測試"
}

複製代碼

代碼補充說明webpack

由於 Electron 是跨平臺的,咱們須要將構建過程分別放到 Windows、Linux、Mac 各平臺下執行。因此,不一樣平臺的構建任務須要執行在不一樣的 agent 上。咱們經過在 stage內定義 agent 實現。如在「Mac平臺下構建」的階段中(www.alauda.cn), agent{label"mac && nodejs"} 指定了只有 label 同時包括了 mac 和 nodejs 的 agent 才能執行構建。 多平臺的構建應該是並行的,以提高流水線的效率。咱們經過 parallel 指令實現。 另外,默認 Electron 應用使用的三段式版本號設計,即 Major.Minor.Patch。可是筆者認爲三段式的版本號信息還不夠追蹤應用與構建之間的關係。筆者但願版本號能反應出構建號和源代碼的 commit id。函數 generateVersion 用於生成此類版本號。生成的版本號,看起來相似這樣: 1.0.0-f7b06d0.28。 完整源碼地址:github.com/zacker330/e…git

小結github

上例中,Electron 應用的流水線設計思路,不僅是針對 Electron 應用,全部的跨平臺應用的流水線均可以參考此思路進行設計。設計思路大概以下: 多平臺構建並行化。本文只有操做系統的類型這個維度進行了說明。現實中,還須要考慮其它維度,如系統位數(32位、64位)、各操做系統下的各版本。 各平臺下的構建只作一次編譯打包。並將製品上傳到製品庫,以方便後續步驟或階段使用。 全局變量與平臺相關變量進行分離。 最後,但願能給讀者帶來一些啓發。web

相關文章
相關標籤/搜索