travis-ci 持续集成构建产物部署到远程主机的记录
一转眼都2022年了,这工具一直在改造,之前我维护的hexo博客自动部署到主机的配置文件现在又不能用了。
没办法,工具在升级,我也得继续好好学习啊。
今天就来研究研究现在最新的 travis-ci (https://app.travis-ci.com) 是怎么配置实现将构建的产物部署到指定的远程主机上。
首先是要保证 travis 的持续集成构建步骤,开启 travis 的自动构建很简单,只要在项目中加入 .travis.yml
这个文件即可。基本配置参考:
1 | language: node_js |
以上配置文件 .travis.yml
会将生成的文件自动提交到 gh_pages
分支。
其中比较重要的deploy参数就是 provider: pages
,详细的文档可以看这里(没有中文版还得自个翻译)。
hexo 默认生成的静态文件是在 public
目录下的,所以这里 local_dir
有指定上传目录。
安装 travis ci 客户端
1.进入root用户(非root用户的时候)
1 | sudo su |
2.安装rvm
1 | curl -L get.rvm.io | bash -s stable |
如果遇到提示由于public key认证失败,则根据指示运行另一条命令如下,成功后再执行安装。
1 | curl -sSL https://rvm.io/pkuczynski.asc | sudo gpg --import - |
然后根据安装完成的提示,生效配置文件:
1 | source /etc/profile.d/rvm.sh |
添加用户组(root 和 ubuntu):
1 | usermod -aG rvm root |
3.查看可用ruby版本
1 | rvm list known |
4.使用rvm安装ruby
1 | rvm install ruby-2.7.2 |
5.安装travis ci
1 | gem install travis |
6.检查是否安装成功
1 | # 退出root用户 |
远程服务器免密登录
在本地机器上使用
ssh-keygen
产生公钥私钥对ssh-keygen
用
ssh-copy-id
将公钥复制到远程机器中1
ssh-copy-id -i ~/.ssh/id_rsa.pub ubuntu@ip.ip.ip.ip
Ps. ssh-copy-id 会自动将key写到远程机器的 ~/ .ssh/authorized_key
文件中
- 提示成功,测试连接
1
ssh ubuntu@ip.ip.ip.ip
配置 travis ci
进入项目目录,登录 travis 用户
1
2# github token 在设置中生成:https://github.com/settings/tokens
travis login --pro --github-token=xxxxx成功时提示:
Successfully logged in as xxx
加密 travis 私钥
1
2# 在项目根目录下,加密 travis 私钥,--add 会自动将解密命令添加到 .travis.yml
travis encrypt-file ~/.ssh/id_rsa_aws --add --pro
Ps.如果 .travis.yml
出现~/.ssh/id_rsa就将反斜杠去掉
- 继续完善
.travis.yml
文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# ...省略之前的配置
addons:
ssh_known_hosts:
- $IP
before_install:
- openssl aes-256-cbc -K $encrypted_edf35525f8fd_key -iv $encrypted_edf35525f8fd_iv
-in id_rsa_aws.enc -out ~/.ssh/id_rsa_aws -d
- chmod 600 ~/.ssh/id_rsa_aws
- echo -e "Host $IP\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
# 执行部署脚本,将编译后的项目同步到服务器的webapps下
# 注意 rsync 需要指定密钥地址
after_success:
- chmod 600 ~/.ssh/id_rsa_aws
- rsync -e "ssh -i ~/.ssh/id_rsa_aws" -az --delete ./public/* root@$IP:/usr/share/nginx/html/blog
最后提交代码。看 travis 控制台中是否构建成功。
注意,github 现在不支持用户名密码的方式 commit 了,需要使用 github token提交代码。方法如下:
1 | git remote set-url origin https://github_token_xxx@github.com/virola/blog.git |
补充说明
travis 安装、登录要和 ssh-keygen
生成免密登录密钥对的机器在同一个机器上,才能保证加密解密的正确性。