travis-ci自动部署
这是一个有关如何在Travis CI上设置Electron应用程序的教程,以便通过简单的请求即可将新版本部署到Github Releases 。
样板
我创建了一个 样板代表具有所有必需的配置,可以将简约的应用程序部署到Github版本。 如果您在本教程中迷路了,可以举个例子。 此外,如果您还没有电子应用程序,而只是想以它为例,请随意。
电子生成器
我们需要一个软件包来处理将应用程序打包为可执行文件并部署到Github版本。 Electron Builder是一个很棒的npm软件包,可在所有三个操作系统上处理电子应用程序的构建,签名,公证和部署。 使用纱线( Electron Builder推荐 )添加:
yarn add electron- builder --dev
Electron Builder使用应用程序的package.json
文件进行大多数配置。
{"name" : "{APP_NAME}" ,
"version" : "{VERSION_NUMBER}" ,
"description" : "A minimal Electron application that deploys on CI servers" ,
"main" : "main.js" ,
"scripts" : {
"start" : "electron ." ,
"release" : "electron-builder" ,
"test" : "echo success"
},
"repository" : "https://github.com/{USER_NAME}/{REPO_NAME}" ,
"keywords" : [
"electron" ,
"ci" ,
"travis" ,
"tutorial" ,
"demo"
],
"author" : "{USER_NAME}" ,
"build" : {
"appId" : "{APP_ID}" ,
"publish" : "github" ,
"dmg" : {
"contents" : [
{
"x" : 110 ,
"y" : 150
},
{
"x" : 240 ,
"y" : 150 ,
"type" : "link" ,
"path" : "/Applications"
}
]
},
"appImage" : {
"license" : "LICENSE"
},
"nsis" : {
"createDesktopShortcut" : "always" ,
"license" : "LICENSE"
}
},
"devDependencies" : {
"electron" : "^4.0.1" ,
"electron-builder" : "^21.2.0"
}
}
用您自己的值替换所有配置变量。 配置变量均为{BRACKETS}中的大写字母。
您应该在目录的根目录中有一个名为LICENSE的许可证文件,并且在您的构建文件夹( build/license_en.txt
)中有一个名为license_en.txt
的副本。 Electron Builder将这些许可证用作安装程序的许可协议。
appId的良好做法是反向域名。 例如,我们的是io.qvault.app 。
您可以根据需要将测试脚本设置为实际运行测试,以上只是在屏幕上打印“成功”。 我们将配置Travis在CI服务器上运行这些测试。
此时,您应该可以运行
yarnrelease --publish never
它将在本地构建您的应用并将其打包到dist目录中。 但是,这只会为您的本地操作系统构建程序包。
特拉维斯CI
导航至https://travis-ci.org/并使用您的Github帐户进行注册。 登录后,您应该能够选择要连接到Travis的存储库。
将此代码复制到存储库根目录下的.travis.yml中:
language : node_js
node_js :
- '11.6.0'
# Always run two parallel builds: one on mac and one on linux
# the linux build will use wine to be able to build windows and
# linux apps
matrix :
include :
- os: osx
osx_image : xcode10.2
language : node_js
node_js : "11.6.0"
env :
- ELECTRON_CACHE=$HOME/.cache/electron
- ELECTRON_BUILDER_CACHE=$HOME/.cache/electron-builder
- os: linux
dist : trusty
sudo : required
services : docker
language : generic
notifications :
email : false
# cache some files for faster builds
cache :
yarn : true
directories :
- node_modules
- $HOME/.cache/electron
- $HOME/.cache/electron-builder
# add git lfs for large file support
before_install :
- |
if [ "$TRAVIS_OS_NAME" == "osx" ]; then
mkdir -p /tmp/git-lfs && curl -L https://github.com/github/git-lfs/releases/download/v2.3.1/git-lfs-$([ "$TRAVIS_OS_NAME" == "linux" ] && echo "linux" || echo "darwin")-amd64-2.3.1.tar.gz | tar -xz -C /tmp/git-lfs --strip-components 1
export PATH="/tmp/git-lfs:$PATH"
fi
before_script :
- git lfs pull
# on PRs and merges to master and prod run tests and build the app
script :
- |
if [ "$TRAVIS_OS_NAME" == "linux" ]; then
docker run --rm \
-v ${PWD}:/project \
-v ~/.cache/electron:/root/.cache/electron \
-v ~/.cache/electron-builder:/root/.cache/electron-builder \
electronuserland/builder:wine \
/bin/bash -c "yarn --link-duplicates --pure-lockfile && yarn test"
else
yarn test
fi
# only deploy to github on a merge to the prod branch
deploy :
provider : script
script : bash deploy.travis.sh
skip_cleanup : true
on :
branch : prod
before_cache :
- rm -rf $HOME/.cache/electron-builder/wine
# only run this script on pull requests and merges into
# the 'master' and 'prod' branches
branches :
only :
- master
- prod
上面文件中的注释应该解释每个步骤的作用,但是基本思想是对每个请求请求进行纱线测试 ,以验证请求是否不会破坏应用程序。 然后,一旦代码合并到prod分支中,我们将触发以下部署脚本来构建并将我们的代码推送到Github Releases:
将此文件复制到deploy.travis.sh
#! /bin/bash
if [ " $TRAVIS_OS_NAME " == osx ]; then
# deploy on mac
yarn release
else
# deploy on windows and linux
docker run --rm -e GH_TOKEN -v " ${PWD} " :/project -v ~/.cache/electron:/root/.cache/electron -v ~/.cache/electron-builder:/root/.cache/electron-builder electronuserland/builder:wine /bin/bash -c "yarn --link-duplicates --pure-lockfile && yarn release --linux AppImage --win"
fi
为了使您的.travis.yml脚本具有将代码上传到Github Releases的权限,那么您将需要设置一个包含API令牌的环境变量。
在Github中,导航到您的个人设置/开发人员设置/生成新令牌。 然后转到Travis中的存储库设置,您可以添加环境变量。 变量名是GH_TOKEN
,令牌是您在Github上创建的令牌。 确保在Travis上将变量保留为私有(默认值),以免其在日志中显示令牌。
做完了!
现在,所有对master和prod的拉取请求都应运行测试,并且所有合并到prod分支中的代码都应触发新版本。 发布的资产和可下载的安装程序将发布到“ 发布”选项卡下的Github存储库中。
该版本将是草稿,因此在每次部署后,您都需要手动进入并将其从草稿转换为已发布的版本,只需单击一个按钮即可。
困惑?
如果您迷路了,请随时回顾工作示例存储库 ,并确保查看Travis中记录的错误。 如果您有疑问,可以在以下的不和谐服务器上找到我: https : //discord.gg/EEkFwbv
另外,如果您正在寻找更高级的选项,请查看Qvault代码 。 它使用此方法以及对代码签名,自动更新和公证的支持。
莱恩·瓦格纳(Lane Wagner) @wagslane在推特上
先前发布在https://qvault.io/2019/08/08/automatic-cross-platform-deployments-with-electron-on-a-ci-server-travis/
travis-ci自动部署