一、目的
简单介绍下 CI/CD
概念:
持续集成 CI:是一种软件开发实践,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
持续部署 CD:是一种软件工程方法,意指在软件开发流程中,以自动化方式,频繁而且持续性的,将软件部署到生产环境中,快速交付产品。
以我网站的个人作品页为例,是使用 Vue 制作的单页面,修改完成后需要手动编译和部署。
通过 CI/CD
的方式,在项目每次提交
后进行自动构建和单元测试
。并在检测通过后,自动部署
到我的阿里云服务器中实现项目的快速发布。
还可以监听指定分支代码,每次提交后除了运行单元测试
,还可以对代码风格
进行检测,执行指定的脚本
和定时任务
。一切通过后,自动合并
到master分支、再自动部署到服务器进行发布。可以降低人为失误、简化流程,适合敏捷开发和快速迭代。
二、Travis 简介
Travis CI 是用 Ruby 开发的一个持续集成(CI - Continuous Integration)
服务的平台,它会同步你在 GitHub 上托管的项目,现在 CI
已成为了项目的“标配”。
接着来说它的搭档 持续部署(CD - Continuous Deployment)
。其中最为广为熟知的或许是用 JAVA
开发的 Jenkins
。虽然 Jenkins
可以独自担当 CI&CD
的重任,对某些或个人项目来说过重,没有必要整这一套,外加那 复古
的界面。。。
Travis CI 最初就创建了两个平台 travis-ci.com
和 travis-ci.org
,前者针对私有仓和付费组织
,而后者针对公有仓
。
但从2018年5月起,新用户和新项目(无论是私有仓的还是公共仓)都只能使用 travis-ci.com
。
三、Travis 注册
新用户
这里所指的新用户,是指未使用过
travis-ci.org
的用户。
可以直接在 travis-ci.com
进行注册使用。
老用户
这里所指的老用户,是指在
travis-ci.org
注册并使用过的用户。
官方宣称会在未来的几个月内,陆续将 travis-ci.org 仓库和账户信息迁移到 travis-ci.com。但显然这个进展比较缓慢,目前为止有近2年时间,至少我的账号并没有自动迁移(迁移目前处于测试阶段)。
操作方法:
- 使用同一个 Github 账号去注册 travis-ci.com,并在
账户中
进行激活
。 - 然后前往 travis-ci.org,在
账户
页面中选择左侧的Sign up for the beta
按钮,进行申请。 - 申请成功后会收到一封电子邮件。
- 可通过邮件中的按钮,直接进入 travis-ci.com 的
Migrate
页选择travis-ci.org
中的项目进行迁移。
注意事项:
* 之前项目的构建历史
将继续保留在travis-ci.org
中,并不会被一起迁移至travis-ci.com
。
* 已成功迁移的项目还会在travis-ci.org
中显示,但不能进行操作,需要设置的话会跳转到travis-ci.com
。
四、开始部署
为项目配置 Travis
1. 在项目根目录创建 .travis.yml
文件,并对其进行修改:
以下为 Node.js(Vue、React) 项目的配置示例,请根据自身项目属性进行调整。
# 设置编程语言 language: node_js # 指定 NodeJs 版本,也可直接设为 stable node_js: 10.14.1 # 缓存依赖 cache: directories: - node_modules # 设置需要监听的分支 branches: only: - master # 需要执行的脚本 script: - yarn build
2. 把该文件 push
上去。
3. 去 travis-ci.com
查看该项目的运行结果,通过测试会显示绿色状态。
至此,项目已成功被 Travis 监听。
创建 SSH 密钥对
注意事项:
*密钥对
可以在本地生成,也可以在部署服务器上生成。
* 由于我是在本地生成,所以从下文直到后续操作如果没有特别说明,命令皆为在本地终端
执行。
1. 在本地机器上使用 ssh-keygen 生成密钥对
# 方法一: # 生成默认密钥对(一路回车,全都为默认即可) ssh-keygen -t rsa # 方法二: # 不想默认生成,则可以使用以下命令生成一个新的密钥(回车) ssh-keygen -t rsa -C "yourname@mail.com" # 修改 rsa 文件名和存档位置(回车): Generating public/private rsa key pair. Enter file in which to save the key (/Users/<用户名>/.ssh/id_rsa): /Users/<用户名>/.ssh/id_rsa_<自定义名称>
2. 将公钥复制到部署服务器
ssh-copy-id -i .ssh/id_rsa.pub <部署服务器用户名>@<部署服务器地址> # 默认使用 22 端口,如需要指定端口号则使用以下命令 ssh-copy-id -i .ssh/id_rsa.pub <部署服务器用户名>@<部署服务器地址> -p <部署服务器ssh端口>
key
会被写到登录部署服务器的 ~/.ssh/authorized_key.
文件中,之后即可免密登录服务器
3. 测试一下 SSH 免密登陆
ssh <部署服务器用户名>@<部署服务器地址>
顺利的话本地终端直接进入了部署服务器,不需要每次再输入密码
使用 Rbenv 安装 Ruby
如果你在部署服务器
上生成的密钥对,则需要安装 Ruby。
MAC
用户可以忽略安装(系统自带 Ruby ),可直接从下文 安装 travis
开始操作。
注意事项:
*CentOS 7 及以下版本
不建议使用sudo yum install ruby
安装 Ruby,镜像源的本过于老旧,无法满足之后的续安装需求。
* 通过 yum 安装的后的对应版本为: gem v2.0.14.1、ruby v2.0.0p648 (2015-12-16) [x86_64-linux]。
*CentOS 8
用户,可通过ndf
安装,以下步骤可以省略,直接到安装 travis
步骤进行操作。
1. 安装 ruby-build 所需的依赖
sudo yum install git-core zlib zlib-devel gcc-c++ patch readline readline-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison curl sqlite-devel
2. 下载 rbenv-installer 脚本并执行
curl -sL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bash - # 成功安装后会看到以下提示: All done! Note that this installer doesn't yet configure your shell startup files: 1. You'll want to ensure that `~/.rbenv/bin' is added to PATH. 2. Run `rbenv init' to see instructions how to configure rbenv for your shell. 3. Launch a new terminal window to verify that the configuration is correct.
3. 设置路径
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc echo 'eval "$(rbenv init -)"' >> ~/.bashrc source ~/.bashrc
4. 安装指定版本
rbenv install 2.7.1
可以通过
rbenv install -l
命令列出所有可用的 Ruby 版本。
5. 将该版本设为默认使用版本
rbenv global 2.7.1
6. 查看 Ruby 版本,确认否安装成功
ruby -v
安装 travis
1. 先切换 gem 镜像源
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
Gem 是 Ruby 内的 Gems 包管理器。
2. 查看源是否切换成功
gem sources -l
确保只有 gems.ruby-china.com
3. 安装 travis
gem install travis
4. 登陆 Travis
travis login --com
登录 Github 账号密码,成功后会看到提示
Successfully logged in as zhonglimh!
为 Travis 配置免密登录
1. 进入项目根目录
cd path/you-project
2. 将 ssh 密钥写入 .travis.yml
travis encrypt-file ~/.ssh/id_rsa --add
出现提示输入
y
之后会重新格式化.travis.yml
文件。
3. 打开 .travis.yml
文件会看到多了以下内容
before_install: - openssl aes-256-cbc -K $encrypted_******_key -iv $encrypted_******_iv -in id_rsa.enc -out ~\/.ssh/id_rsa -d
需要将上面的
~\/.ssh/id_rsa
修改为~/.ssh/id_rsa
。
4. 把需要部署的脚本添加进去,最终示例如下
# 设置编程语言 language: node_js # 指定 NodeJs 版本,也可直接设为 stable node_js: 10.14.1 # 缓存依赖 cache: directories: - node_modules # 设置需要监听的分支 branches: only: - master # 需要执行的脚本 script: - yarn build before_install: - openssl aes-256-cbc -K $encrypted_******_key -iv $encrypted_******_iv -in id_rsa.enc -out ~/.ssh/id_rsa -d # 添加 SSH 信任列表 addons: ssh_known_hosts: <部署服务器IP> # 执行部署脚本() after_success: - rm -rf <部署服务器用户名>@<部署服务器地址>:/home/xxx/project-file/* - scp -o stricthostkeychecking=no -r ./dist/* <部署服务器用户名>@<部署服务器地址>:/home/xxx/project-directory
此时可以修改下项目“代码/内容“作为测试,与
.travis.yml
文件一起提交代码。
回到travis-ci.com
查看并等待项目运行结果,该条记录显示为绿色表面一切顺利。
然后打开网址,可以看到网站内容已经同步更新。
五、回顾部署流程
- Travis 监听指定分支的代码
- 每次提交后自动构建和测试
- 测试通过后利用 SSH 登陆到目标服务器
- 执行配置脚本将生产环境代码拷贝过去
- 自动部署结束
六、参考文档
What's the difference between travis-ci.org and travis-ci.com?
How to Install Ruby on CentOS 7
RubyGems 镜像 - Ruby China
使用 Travis CI 实现 GitHub + Server 自动部署
墨剑生 说:
写的非常好
October 27, 2021 5:46 pm
Pingback 引用通告: 使用GithubActions自动部署应用到自己的服务器(ECS) – 有爱前端
今日头条新闻 说:
文章还不错支持一下
May 18, 2020 9:25 pm