使用Travis CI
持续集成
1. 说明
github
可以和Travis CI
一起使用,这样可以达到持续集成的目的,可以理解为当有内容提交到仓库,就可以按规则触发持续集成命令,这个命令包含环境配置,编译,允许测试,结果生成等等。现在有一个契机学习它,就是我已经在github
上部署了是hexo
静态网站,有一个缺点就是,每次都需要在本地电脑的源码目录下,执行hexo clean && hexo g && hexo d
, 这样才能发布到pages
页面上,能不能把源码也上传到仓库?最好是私有仓库,然后我只要先这个仓库递交内容,后台通过Travis CI
自动编译发布hexo网站
, 这样可以不受电脑约束,只要能提交到这个源码参考,都可以自动部署。这里做一下笔记记录,也当是对Travis CI
的学习。
还有其他的一些持续集成平台https://hexo.io/zh-cn/docs/one-command-deployment
2023.3.12
切换到[[2023-03-11-迁移到Github-Action]]
明确需求
通过Travis CI
,当源码目录有文件提交时候,可以自动部署完整到github
/coding
上。
2. 使用
github
上使用
关于travis-ci
的使用,官方文档是https://docs.travis-ci.com/user/tutorial/
,使用之前可以大概看下,这个是最标准的使用教程。
在
github
上新建一个仓库,我这里先创建私有仓库,也可以直接在博客发布的参考新建一个分支,效果是一样的。我命名为
hexo-source
, 私有地址为https://github.com/lmwings/hexo-source
把本地的
hexo代码
上传到仓库# 先拉一份仓库内容 git clone https://github.com/lmwings/hexo-source.git # 把hexo源码都拷贝到 hexo-source这个目录下hexo-source, 然后提交 cd hexo-source git add . # '.'号表示添加该目录下所有待提交文件到追踪区 git commit -m "add hexo source code" git push
这个遇到一个问题,就是主题文件夹
matery
, 上传以后是灰色的,然后git clone
下来也是为空,原因是这个主题是来着其他git 仓库
,只要删除掉里面的.git/.gitignore
, 再重新add/commit/push
即可到
travis-ci
登录网址
https://travis-ci.com/
, 只允许使用github账号登录
这里先登录。
到
github
中产生personal access token
由于
travis-ci
需要操作github仓库
, 无论使用ssh
还是https
都需要告诉密码,这个不太合理,所以通过personal access token
方式来进行授权。(1)选择
setting—>Developer setting->Personal access token->Generate new token
,然后打开需要授权的功能即可,把握原则,授权应该满足最小原则,能少就少,使用我这里只有把仓库相关权限授权,即只勾选
repo
(2)点击
Generato token
后会生成Access Token
,注意, 这个需要马上复制拷贝出来,刷新了就没了,需要重新生成了。(3)生成了这个
Access Token
后,其实就是可以通过这个码来访问了。访问规则是
https://{Access_Token}@github.com/owner/repo.git
# 没设置之前可以通过这个clone,如果需要提交代码需要输入账号和密码。git和ssh都是,ssh可以使用公钥免密 git clone https://github.com/lmwings/hexo-source.git # 设置以后(其中数字就是我的access 伪造的,哈哈) git clone https://22269a5ff52a48193045f9c883c00d7a9fdd325@github.com/lmwings/lmwings.github.io.git
^b293ba
添加
Token
回到
travis-ci
,选择hexo-source
这个源代码仓库, 添加环境变量GIT_REPO_TOKEN
, 值就是刚才复制出来的Access Token
, 并记得设置DISplay Value in build log
不要勾选,勾选了就等于公开了token
, 最后点击ADD
就完成了设置。我们执行脚本时候,就可以使用
$GIT_REPO_TOKEN
来访问token
,设置
Cron Jobs
的分支为master
,因为我就单独放在主线上面。需要在代码中添加
.travis.yml
文件,具体内如如下,然后推送到参考.travis.yml
里面的字段以及简单教程可以参考
https://michael728.github.io/2019/06/16/cicd-hexo-blog-travis/
这个要注意格式是否正确,需要使用
yaml语法
, 可以通过在线检测工具看看是否格式有问题http://nodeca.github.io/js-yaml/
sudo: false language: node_js # 指定NodeJS的版本 node_js: - 12 # use nodejs v12 LTS cache: npm # 指定要构建的分支 branches: only: - master # build master branch only # 在安装项目环境阶段需要运行的命令,其中travis_env_init.sh是自己编写的 install: - source travis_env_init.sh # 在构建阶级需要允许的命令 script: - hexo clean - hexo generate # generate static files # 在构建成功后要允许的命令,构建事吧不会执行 after_success: - hexo deploy > /dev/null # 通过 hexo的 deploy 命令部署博客 # 设置通知项 notifications: email:true #deploy: # provider: pages # skip-cleanup: true # github-token: $GIT_REPO_TOKEN # keep-history: true # on: # branch: master # local-dir: public
这里有一个
travis_env_init.sh
主要是为了把复杂的命令都统一在一起。travis_env_init.sh
# travis_env_inti.sh # 全局安装 HEXO npm install -g hexo # 全局安装 HEXO 命令行工具 npm install -g hexo-cli # 安装 package.json中的依赖 npm install # 使用hexo d 需要用到 npm install hexo-deployer-git --save # 安装一些使用到的插件 npm i -S hexo-prism-plugin npm install hexo-generator-search --save npm i hexo-permalink-pyinyin --save npm i --save hexo-wordcount npm install hexo-filter-github-emojis --save npm install hexo-generator-feed --save # 为了不需要输入和公开密码,我们使用了token的方式,本身需要把_config.yml中修改为带token的地址 # 这里为了方便,使用了脚本来替换。 #sed -i "s~git@github.com:~https://s~git@github.com:~https://${GIT_REPO_TOKEN}@github.com/~" _config.yml sed -i "s/ github: https:\/\/github.com/ github: https:\/\/${GIT_REPO_TOKEN}@github.com/g" _config.yml
提交代码到仓库,理论上应该就会自动
ci
git add .travis.yml travis_env_init.sh git commit -m "add travis.yml" git push
可以到
travis-ci
查看具体的Job log
我这里是
https://travis-ci.com/lmwings/hexo-source
选择
Current
查看
coding
上使用
travis ci
是不能用coding
关联使用的,但是如果我们hexo
配置文件中deploy
中配置了coding
,也可以在上面那个基础上,顺便让travis ci
把编译好的代码上传到我们部署好的coding仓库中
。为了不输入和暴露密码,使用方式也采用 访问令牌 的方式。
到
coding
上生成访问令牌https://lmwings.coding.net/user/account/setting/tokens/new
, 选择project:depot
,然后点击c创建令牌即可。先本地验证下能不能使用访问令牌访问
按照官方教程
[https://open.coding.net/personal-access-token/#%E4%BD%BF%E7%94%A8%E8%AE%BF%E9%97%AE%E4%BB%A4%E7%89%8C](https://open.coding.net/personal-access-token/#使用访问令牌)
, 访问规则是git clone https://testuser:90ed7a169febb12d17e14aa5531827476f6b3a4e@test.coding.net/test/testRepo.git
这里有一个很坑的地方,就是用户名,我的一直是
lmwings
,但是不成功。后来仔细查看了下,发现是系统升级了,
coding
和腾讯开发者平台
合并了,所以登录用户名只允许使用邮箱或者手机号! 就是testuser
要写手机号
# 为了保密,下面手机号和密钥是伪造的,要替换成自己的!!! git clone https://13500000000:4400de0972000013fc6c000a5309a6@e.coding.net/lmwings/lmwings.git
把上面的
token
添加到travis ci
中和之前
github
的步骤一样,这里主要是添加一个环境变量,CODING_REPO_TOKEN
,值填写为刚才申请到的token
. 为了不把手机号也暴露出去,我这里把手机号也设置成环境变量.CODING_USER_NAME
,值填写自己的coding
账号的手机号修改
travis_env_init.sh
主要是添加替换
token
访问的脚本,这样travis ci
拉下来以后就可以不需要密码,进行hexo d
上传部署到coding
上了# 增加下面这句 sed -i "s/ coding: https:\/\/e.coding.net/ coding: https:\/\/${CODING_USER_NAME}:${CODING_REPO_TOKEN}@e.coding.net/g" _config.yml
提交到代码到仓库
git add travis_env_init.sh git status git commit -m "add travisci hexo deploy to coding" git push
到
travis ci
中查看日志https://travis-ci.com/lmwings/hexo-source
另外,如果
coding pages
设置了检测到更新就自动部署的话,也可以在静态网站
上看到自动部署了。
gitee
上使用
这个和coding
上一样,主要是为了推送而已,
但是缺点是,免费的gitee pages
服务,不支持自动检测更新,需要手动更新,所以这个只是提交一下代码而已。
到
gitee
私人令牌申请界面,申请令牌https://gitee.com/personal_access_tokens
本地验证下通过令牌是否能进行访问
访问规则和
github
是一样的git clone https://ae1cs94d1s6bf3ddds5f8f37328@gitee.com/lmwings/lmwings.git
把上面的
token
添加到travis ci
中设置环境变量
GITEE_REPO_TOKEN
修改
travis_env_init.sh
# 增加下面这句 sed -i "s/ gitee: https:\/\/gitee.com/ gitee: https:\/\/${GITEE_REPO_TOKEN}@gitee.com/g" _config.yml
提交到代码到仓库
测试验证,然后手动更新下
pages
(发现实际使用中,失败了。但是使用token方式是可以clone的,在travisci里面就不行。不继续研究了,反正这个还需要手动更新博客,太麻烦了)