首页 >区块链

TrueChain持续集成项目打包(Travis-CI)

2018-09-13 15:46 编辑: suiling 分类:区块链 来源:zouwei
最近在研究GitHub上开源的区块链项目TrueChain,借助这个项目,完整的了解并参与基于区块链从技术原理到工程代码实现整个项目过程,抱着学习的态度去做一些新的尝试。
持续化集成,延伸性很强,能各种不同类型不同的语言的项目实现自动化测试部署,这会带给我们很大的效率提升以及项目管理的安全,持续集成的方案有很多,例如jenkins、Travis-CI等等,此次使用的是Travis-CI持续集成方案,因为和GitHub结合的比较紧密,Travis-CI仅支持GitHub的项目,大部分的GitHub项目都选择了Travis-CI。

环境准备

  • Github公开项目(Travis对开源项目是免费,对私有项目是收费的)

  • Linux服务器(ECS云服务器,系统是CentOS 7.4)

  • 终端连接器(XShell)

自动化部署流程

  1. 本地修改代码,提交到指定分支

  2. Travis监听仓库改变

  3. Travis执行install和script任务(这里可以做一些安装测试构建任务的依赖和测试构建命令)

  4. 任务执行成功后,在Travis的 after_success 钩子里面用 ssh免密登陆 服务器

  5. 自动在服务器上执行配置的脚本

  6. 完成自动部署

Travis项目配置

持续集成的目的是,当我们进行需要进新项目发布的时候,想master分支进行push的时候,让Travis自动部署。

创建GitHub仓库,并完成项目的初始化,如果是已经有项目就可以直接开始部署,因之前有创建一个onela-dome项目,就以这个项目作为实例。

激活仓库

用Github账户登陆Travis-CI。Travis-CI会同步你的Github上面的所有仓库信息。

登陆之后会列出你的所有仓库:

默认都是没有激活的,点击激活按钮激活

SSH连接服务器

#新建用户,这里新建了一个www的账户useradd www#修改密码(应该不是必要,但是万一以后需要用密码登陆呢),按照提示设置密码。passwd www#为用户添加添加权限vim /etc/sudoers

找到#Allow root to run any commands anywhere这一段注释,在下面新增一行:

www    ALL=(ALL)   ALL# 使用root账户修改/etc/sudoers如果出现了 E45: 'readonly' option is set (add ! to override)错误:wq!           # 强制保存退出


[root@trend ~]# su www[www@trend root]$ cd ~[www@trend ~]$ ssh-keygen -t rsaGenerating public/private rsa key pair.Enter file in which to save the key (/home/www/.ssh/id_rsa): Created directory '/home/www/.ssh'.Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/www/.ssh/id_rsa.Your public key has been saved in /home/www/.ssh/id_rsa.pub.The key fingerprint is:f1:ed:a6:ce:c0:88:13:f2:b9:a8:07:0b:f2:68:06:a1 www@trendThe key's randomart image is:+--[ RSA 2048]----+|                 ||                 ||        .        ||.        o .     ||... .   S . .    ||E  o + o   .     ||+=  = . o   o    ||ooo. o   o o     ||+o. .    .+      |+-----------------+[www@trend ~]$

可以看到生成密钥对在用户家目录的.ssh文件夹(/home/www/.ssh)下面。

由于Linux权限的控制规则,文件的权限不是越大越好,所有需要设置合适的权限。这里需要把.ssh目录设置为700权限,给.sshm=目录下面的文件设置为600权限

[www@trend ~]$ chmod 700 ~/.ssh/[www@trend ~]$ chmod 600 ~/.ssh/*[www@trend ~]$ ls -altotal 24drwx------  3 www www 4096 Sep  7 13:55 .drwxr-xr-x. 5 root   root   4096 Sep  7 11:45 ..-rw-r--r--  1 www www 18 Dec  7  2016 .bash_logout-rw-r--r--  1 www www 193 Dec  7  2016 .bash_profile-rw-r--r--  1 www www 231 Dec  7  2016 .bashrcdrwx------  2 www www 4096 Sep  7 13:55 .ssh[www@trend ~]$ ls ~/.ssh/ -altotal 16drwx------ 2 www  www 4096 Sep  7 13:55 .drwx------ 3 www www 4096 Sep  7 13:55 ..-rw------- 1 www www 1675 Sep  7 13:55 id_rsa-rw------- 1 www www 394 Sep  7 13:55 id_rsa.pub[www@trend ~]$

将生成的公钥添加为受信列表(重点)

[www@trend ~]$ cd .ssh/[www@trend .ssh]$ lsid_rsa  id_rsa.pub# 公钥内容输出到authorized_keys[www@trend .ssh]$ cat id_rsa.pub >> authorized_keys[www@trend .ssh]$ cat authorized_keysssh-rsa AAAAB3NzaC1yc****************************************************************  www@trend

新增config文件

Host test
HostName 99.99.99.99(你的服务器ip)
#登陆的用户名
User www
IdentitiesOnly yes
#登陆使用的密钥
IdentityFile ~/.ssh/id_rsa

测试SSH登陆

# 测试ssh test
[www@trend .ssh]$ ssh test
Last login: Sun Sep  9 18:51:57 2018

Welcome to Alibaba Cloud Elastic Compute Service !

如果出现错误Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

请参考如下做法

# 修改sshd_config配置文件
vim /etc/ssh/sshd_config
# 修改如下内容

RSAAuthentication yes 
PubkeyAuthentication yes # 这两项为打开公钥模式 
AuthorizedKeysFile .ssh/authorized_keys # 配置公钥记录文件 
PasswordAuthentication yes # 打开密码验证模式

# 保存文件,然后重启ssh
/bin/systemctl restart sshd.service

在Linux服务器安装Travis客户端工具

安装Travis可以手动安装,依赖包是个麻烦事,所以这里使用使用了gem来装。gem是ruby的管理工具,所以服务器必须安装ruby,安装ruby的方式使用版本管理工具rvm,入门自动收集服务器的依赖功能很好用,缺少的依赖会自动安装。

1.先安装rvm
2.利用rvm安装ruby
3.使用gem工具安装Travis

RVM安装

RVM 是一个命令行工具,可以提供一个便捷的多版本 Ruby 环境的管理和切换。

rvm.io/

这里所有的命令都是再用户权限下操作的,任何命令最好都不要用 sudo.

$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3$ curl -sSL https://get.rvm.io | bash -s stable$ source ~/.bashrc$ source ~/.bash_profile# 安装完成之后检查是否安装成功$ rvm versionrvm 1.29.4 (latest) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin [https://rvm.io]

安装ruby

#使用rvm安装ruby,安装等待时间较长,下载速度不是很快
$ rvm install ruby
# 查看ruby
$ ruby --version
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]

【可选】修改gem镜像源,如果服务器能翻墙下载直接使用官方源(忽略这一步)

# 查询gem 镜像源地址
$ gem sources -l
*** CURRENT SOURCES ***

https://rubygems.org/
# 查看gem版本
$ gem -v
2.7.7
# 更换gem镜像源
$ gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/

安装travis命令行工具

# 安装travis$ gem install travis# 执行travistravis# 提示 Shell completion not installed. Would you like to install it now? |y|# 输入y,安装外壳

添加加密的私钥至代码仓库

获取到了github代码之后,在项目文件目录登录travis,然后创建travis加密证书,id_rsa.enc这个证书是经过travis加密了的,因为是私钥暴露到github公网之上,就必须经过加密处理才能保证安全。

# 首先用GitHub账户登陆travis
travis login
We need your GitHub login to identify you.
This information will not be sent to Travis CI, only to api.github.com.
The password will not be displayed.

Try running with --github-token or --auto if you don't want to enter your password anyway.

Username:
Password for *********@qq.com:***********
Successfully logged in as zouwei!
# 登录成功,解密私钥,--add参数会把加密的私钥解密命令插入到.travis.yml,Travis解密时要用到的
$ travis encrypt-file ~/.ssh/id_rsa --add
encrypting /home/www/.ssh/id_rsa for zouwei/onela-demo
storing result as id_rsa.enc
# 由于我之前生成过,所有这里提示是否覆盖
DANGER ZONE: Override existing id_rsa.enc? |no| yes
storing secure env variables for decryption

Make sure to add id_rsa.enc to the git repository.
Make sure not to add /home/www/.ssh/id_rsa to the git repository.
Commit all changes to your .travis.yml.
# 可以看到已经生成了加密后的私钥id_rsa.enc
$ ls -al
# 报文中出现出现私钥文件
……
-rw-rw-r--   1 www www  1680 Sep  9 17:11 id_rsa.enc
……
-rw-rw-r--   1 www www   201 Sep  9 17:11 .travis.yml
#.travis.yml中也自动添加了解密命令
$cat .travis.yml
# 需要在travis.yml添加before_install之后的配置
language: node_js
node_js:
- '8'
branchs:
  only:
  - master
before_install:
  # 下面的encrypted_****,执行创建命令之后再服务器会自动成文件名,生成好的配置需要更新到项目里面去
  openssl aes-256-cbc -K $encrypted_****_key -iv $encrypted_****_iv
  -in id_rsa.enc -out ~/.ssh/id_rsa -d
-in 参数指定待解密的文件,位于仓库的根目录(Travis执行任务时会先把代码拉到Travis自己的服务器上,并进入仓库更目录)
-out 参数指定解密后的密钥存放在Travis服务器的~/.ssh/id_rsa,如果你的后面需要的话可以取这个路径,我看到网上有的SSH登陆方式用到了这个文件

配置after_success钩子

前面的所有工作实都是准备工作,在.travis.yml中添加一些配置,主要是after_success钩子配置。修改之后的配置如下:

# .travis.yml
language: node_js  # 项目语言,travis能适配大部分语言
node_js:
- 8.11.3    # 版本
branchs:
  only:
  - master
script:
  - npm run test # 执行脚本,TrueChain项目使用的是 make getrue
addons:
  ssh_known_hosts:
  - 114.55.249.***  #服务器IP地址,我这里做了隐藏处理,替换成你自己服务器的IP
before_install:
- openssl aes-256-cbc -K $encrypted_0690d495720c_key -iv $encrypted_0690d495720c_iv
  -in id_rsa.enc -out ~/.ssh/id_rsa -d
after_success:
- chmod 600 ~/.ssh/id_rsa   #Linux文件权限问题
- ssh www@114.55.249.*** -o StrictHostKeyChecking=no '~/update.sh sso'   #使用ssh连接服务器

注意:使用ssh命令连接一定要设置StrictHostKeyChecking=no,否则第一次连接时依然会要求你确认。后面引号的内容就是登陆你的Linux服务器之后,在你的服务器执行的命令,你也可以写成一个脚本。只要登陆上服务器之后,就随你操作了。

  • 可能有坑

# /home/www,www这个账户的权限必须控制,就算设置了StrictHostKeyChecking=no# 仍然需要密码登录,是由于权限配置问题造成的,[www@trend ~]$ chmod 700 ~/.ssh/[www@trend ~]$ chmod 600 ~/.ssh/*# 然后重启ssh[www@trend ~]$ /bin/systemctl restart  sshd.service# 在www执行ssh重启必须输入root密码才能重启

写在最后

将加密的密钥文件和修改后的.travis.yml文件提交到master分支,访问Travis查看自动构建过程。过程任何一个小细节可能都会导致采坑,确实需要linux基本功的,这是个学习的过程,希望我与你一起,相互学习,一起成长。

linux服务配置遇到无数坑,研究了几周时间(对linux不是很熟),仅仅是最后一步调试travis服务一直是错误、错误、错误,一路的艰辛。
成功了,也就成长了,继续努力加油

服务器日志跟踪,完成代码更新发布&重启
搜索CocoaChina微信公众号:CocoaChina
微信扫一扫
订阅每日移动开发及APP推广热点资讯
公众号:
CocoaChina
我要投稿   收藏文章
上一篇:造假、洗钱、代笔……艺术圈的暗黑潜规则,区块链能破吗?
我来说两句
发表评论
您还没有登录!请登录注册
所有评论(0

综合评论

相关帖子

sina weixin mail 回到顶部