使用TravisCI持续集成


使用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/,使用之前可以大概看下,这个是最标准的使用教程。

  1. github上新建一个仓库,我这里先创建私有仓库,也可以直接在博客发布的参考新建一个分支,效果是一样的。

    我命名为hexo-source, 私有地址为https://github.com/lmwings/hexo-source

  2. 把本地的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即可

  3. travis-ci登录

    网址https://travis-ci.com/, 只允许使用github账号登录

    这里先登录。

  4. 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

  5. 添加Token

    回到travis-ci,选择hexo-source这个源代码仓库, 添加环境变量GIT_REPO_TOKEN, 值就是刚才复制出来的Access Token, 并记得设置DISplay Value in build log不要勾选,勾选了就等于公开了token, 最后点击ADD就完成了设置。

    我们执行脚本时候,就可以使用$GIT_REPO_TOKEN来访问token,

    设置Cron Jobs的分支为master,因为我就单独放在主线上面。

  6. 需要在代码中添加.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
  7. 提交代码到仓库,理论上应该就会自动ci

    git add .travis.yml travis_env_init.sh
    git commit -m "add travis.yml"
    git push
  8. 可以到travis-ci查看具体的Job log

    我这里是https://travis-ci.com/lmwings/hexo-source

    选择 Current查看

coding上使用

travis ci是不能用coding关联使用的,但是如果我们hexo配置文件中deploy中配置了coding,也可以在上面那个基础上,顺便让travis ci把编译好的代码上传到我们部署好的coding仓库中。为了不输入和暴露密码,使用方式也采用 访问令牌 的方式。

  1. coding上生成访问令牌

    https://lmwings.coding.net/user/account/setting/tokens/new, 选择 project:depot,然后点击c创建令牌即可。

  2. 先本地验证下能不能使用访问令牌访问

    按照官方教程[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
  3. 把上面的token添加到travis ci

    和之前github的步骤一样,这里主要是添加一个环境变量,CODING_REPO_TOKEN,值填写为刚才申请到的token. 为了不把手机号也暴露出去,我这里把手机号也设置成环境变量.CODING_USER_NAME,值填写自己的coding账号的手机号

  4. 修改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
  5. 提交到代码到仓库

    git add travis_env_init.sh
    git status
    git commit -m "add travisci hexo deploy to coding"
    git push
  6. travis ci中查看日志

    https://travis-ci.com/lmwings/hexo-source

    另外,如果coding pages设置了检测到更新就自动部署的话,也可以在静态网站上看到自动部署了。

gitee上使用

这个和coding上一样,主要是为了推送而已,

但是缺点是,免费的gitee pages服务,不支持自动检测更新,需要手动更新,所以这个只是提交一下代码而已。

  1. gitee私人令牌申请界面,申请令牌

    https://gitee.com/personal_access_tokens

  2. 本地验证下通过令牌是否能进行访问

    访问规则和github是一样的

     git clone https://ae1cs94d1s6bf3ddds5f8f37328@gitee.com/lmwings/lmwings.git
  3. 把上面的token添加到travis ci

    设置环境变量GITEE_REPO_TOKEN

  4. 修改travis_env_init.sh

    # 增加下面这句
    sed -i "s/    gitee: https:\/\/gitee.com/    gitee: https:\/\/${GITEE_REPO_TOKEN}@gitee.com/g" _config.yml
  5. 提交到代码到仓库

  6. 测试验证,然后手动更新下pages

    发现实际使用中,失败了。但是使用token方式是可以clone的,在travisci里面就不行。不继续研究了,反正这个还需要手动更新博客,太麻烦了


文章作者: Wang Kang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Wang Kang !
评论
 上一篇
hexo常用命令 hexo常用命令
hexo常用命令1. 初始化 hexo init 【新建一个网站,如果没有设置文件夹,会在当前目录下创建】 2. 新建文章 hexo new post 文章名 注意:1.如果标题有空格,注意添加引号"文章名". 2. 会在s
2020-02-06
下一篇 
添加自己的域名解析 添加自己的域名解析
添加解析自己的域名1. 准备先申请一个域名,我选择在阿里云平台上注册,这里为了使用,就选了最便宜的top域名。 这些教程都很清晰,按部就班做就好,我申请到的域名为lmwings.top。 但是现在还不能直接访问,怎么样才能把域名和我们的网站
2020-02-05
  目录