Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🚀Github集成TravisCI:自动发布 #1

Open
levy9527 opened this issue Apr 5, 2019 · 0 comments
Open

🚀Github集成TravisCI:自动发布 #1

levy9527 opened this issue Apr 5, 2019 · 0 comments

Comments

@levy9527
Copy link
Owner

levy9527 commented Apr 5, 2019

前言

已经有阮一峰老师的持续集成服务 Travis CI 教程,为什么还要写这篇文章?

原因有二:

  1. 文章内容有些过时
  2. 文章覆盖度不够,有些实践细节没写出来

由于以上原因,纵然可以笔者很快在Github集成Travis CI并成功构建,但在发布时却踩了一些坑,折腾一波才终于发布成功。故写下此文,旨在补充更多的细节,帮助他人少走弯路。

正文

免费购买Travis CI应用

点击 https://github.com/marketplace/travis-ci,登录后免费购买(开源项目集成Travis CI不收费)。

选择关联仓库

选择个人或组织名下需要关联Travis CI的Github仓库。

已经设置过的,想进行修改,可以在Github的 Personal settings-> Applications 中进入。

image.png

编写CI文件

在项目根目录下新建 .travis.yml 文件

touch .travis.yml

发布到github pages

下面展示一个可以发布到gh-pages的例子,可以稍做修改,复制粘贴使用。

该示例包含了:

  • 指定node.js版本
  • 使用yarn进行安装依赖及构建
  • 对安装需要的依赖进行了缓存
  • 设置了两个不含敏感信息的环境变量
  • 设置了一个含有敏感信息的环境变量
  • 把构建生成的文件部署至github pages
language: node_js
node_js:
- lts/*
env:
- API_SERVER=https://easy-mock.com/mock/5c1b3895fe5907404e654045/femessage-mock PUBLIC_PATH=http://levy.work/nuxt-element-dashboard/
# 默认是yarn, 如果有yarn.lock的话
install:
- yarn
# 默认是 yarn test
script:
- yarn build
cache: yarn
deploy:
  provider: pages
  skip-cleanup: true
  keep-history: true
  local-dir: dist
  on:
    branch: master
  github-token: $GITHUB_TOKEN

下面对文件进行说明。

language: node_js
node_js:
- lts/*
  • 第1行指定了构建环境为node.js
  • 第2、3行指定使用node.js最新的LTS版本
env:
- API_SERVER=xxx PUBLIC_PATH=xxx

上面是设置两个环境变量。

注意,一次构建中传多个环境变量,必须写在同一行,使用空格分开。

env:
- API_SERVER=xxx
- PUBLIC_PATH=xxx

如果写成上面的形式,则会变成两个构建,每一个构建中只有一个环境变量。

install:
- yarn
script:
- yarn build
cache: yarn

上面指定使用yarn进行安装依赖,安装好后执行 yarn build 命令; 为yarn的依赖加速安装,开启了缓存。

下面是最关键的部署配置。

deploy:
  provider: pages
  github-token: $GITHUB_TOKEN
  skip-cleanup: true
  keep-history: true
  local-dir: dist
  on:
    branch: master
  • 第2行指定部署到Github Pages,即仓库的 gh-pages 分支,请确保仓库的pages分支是 gh-pages , 相关操作可以看这里
  • 第3行指定保留构建后的文件
  • 第4行指定每次部署会新增一个提交记录再推送,而不是使用 git push --force
  • 第5行指定构建后要部署的目录
  • 第6、7行指定 master 分支有提交行为时,将触发构建后部署
  • 第8行是部署需要用到的github-token,其中$GITHUB_TOKEN是变量,它可以在Travis CI个人仓库的setting页里设置,相关操作可以看这里

发布到npm

再给出把node.js模块发布到npm的例子

主要是 deploy 这里有所不同

deploy:
  provider: npm
  email: <your_email>
  # api_key: travis encrypt NPM_TOKEN --add deploy.api_key --com
  on:
    branch: master
  skip-cleanup: true

api_key指的的npm的token,可以登录npm后,在个人中心生成

因为不能泄露,所以要通过travis ci的命令行工具进行加密,执行以下命令

travis encrypt NPM_TOKEN --add deploy.api_key --com

复杂例子

下面是一个复杂的例子,也是实际用到的配置,主要是

  • master分支才会触发构建
  • 执行script命令前先读取shell中的环境变量,并生成.env文件
  • 构建成功后
    • 把模块发布到npm
    • 把文档发布到gh-pages
branches:
  only:
    - master
language: node_js
node_js:
- lts/*
git:
  depth: 3
install:
- yarn --frozen-lockfile
before_script: echo OSS_KEY=$OSS_KEY\\nOSS_SECRET=$OSS_SECRET\\nOSS_BUCKET=$=OSS_BUCKET\\nOSS_REGION=$OSS_REGION > .env
script:
- yarn build
cache: yarn
deploy:
- provider: pages
  local-dir: docs
  github-token: $GITHUB_TOKEN
  skip-cleanup: true
  keep-history: true
- provider: npm
  email: levy9527@qq.com
  api_key: $NPM_TOKEN
  skip-cleanup: true

FAQ

通过环境变量设置GITHUB_TOKEN

首先为Travis CI新建一个token


点击生成新token

设置权限

image.png
复制生成的token。(记得先不要刷新或离开当前页面,否则token就看不见了,只能重新生成)

登录Travis CI, 进入要集成的项目设置页。

image.png

添加环境变量GITHUB_TOKEN

注意,这里的环境变量是通过bash设置、并在.yml里读取的,所以变量名是大写加下划线形式,这是bash的最佳实践,千万别写成github-token

image.png

GitHub Pages

查看gh-pages分支的部署情况

进入仓库 Settings -> Options

image.png

往下翻看,可以看到效果
image.png
因为笔者自定义了域名,所以地址不是默认的 https://xxx.github.io/xxx

发布 Github Pages 失败

小机率下,你可能会遇到下列错误

/home/travis/.rvm/gems/ruby-2.4.5/gems/dpl-pages-1.10.12/lib/dpl/provider/pages.rb:141:in `mkdir': File exists @ dir_s_mkdir - /tmp/d20190920-7113-ieifmd/work (Errno::EEXIST)

发布到 Github Pages 时如果没有 gh-pages 分支,有可能会失败

解决方案是:手动创建 gh-pages 分支。

使用travis命令行工具加密

加密要用到travis命令行工具,如果是在travis ci web界面设置环境变量,则可直接跳过。

下面给出mac环境下操作需要注意的点

1.安装命令:

brew install travis

否则很可能会出现问题

2.确保在 https://travis-ci.org/ sign in with github

3.然后在项目根目录里,执行命令

travis login —auto

4.修改git设置

vi .git/config

确保

[travis]
  slug = 是你在travis关联的仓库

5.添加加密环境变量

travis encrypt github-token=xxx --add deploy.github-token --com

因为笔者登录的travis ci域名是 https://travis-ci.com,所以要带参数 --com , 默认是 https://travis-ci.org

@levy9527 levy9527 changed the title Github集成Travis CI :octocat: Github集成Travis CI Apr 14, 2019
@levy9527 levy9527 changed the title :octocat: Github集成Travis CI Github集成Travis CI Apr 14, 2019
@levy9527 levy9527 changed the title Github集成Travis CI 🚀Github集成Travis CI Apr 21, 2019
@levy9527 levy9527 changed the title 🚀Github集成Travis CI 🚀 Github集成Travis CI Apr 21, 2019
@levy9527 levy9527 changed the title 🚀 Github集成Travis CI 🚀Github集成Travis CI Apr 21, 2019
@levy9527 levy9527 changed the title 🚀Github集成Travis CI 🚀Github集成Travis CI——自动发布 May 8, 2019
@levy9527 levy9527 changed the title 🚀Github集成Travis CI——自动发布 🚀Github集成Travis CI:自动发布 May 30, 2019
@levy9527 levy9527 changed the title 🚀Github集成Travis CI:自动发布 🚀Github集成TravisCI:自动发布 Jun 12, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant