travis ci 自动部署

最近搞了travis ci的自动部署,小有心得,记录一下。

因为需要发布到自己的服务器中,所以travis ci内置的一票适用于aws等提供商的快捷方法就不适用了,只得采用目前还在实验性质script deploy

先上一段.travis.yml配置:

language: go
go:
- '1.11'
sudo: required               # 管理员权限,用于安装sshpass
script:
- go test -v ./...           # 工程测试
- go build -o testProject .  # 工程构建打包
before_install:
- openssl aes-256-cbc -K $encrypted_58e6f98fc3db_key -iv $encrypted_58e6f98fc3db_iv
  -in deploy.sh.enc -out deploy.sh -d  # 解密已加密的文件,加密的方法后文详述
before_deploy:
- sudo apt-get install sshpass  # 安装sshpass
deploy:
- provider: script       # 选择实验性质的script deploy
  script: bash deploy.sh # 需要在发布阶段执行的脚本
  skip_cleanup: true     # 重要, travis ci默认会在发布阶段清理git管理的文件范围外的所有文件,不写此行会导致脚本找不到编译后的结果
  on:
    branch: master       # 当master分支有push事件的时候执行deploy流程

一、脱敏(官方文档)

因为连接到服务器一般会涉及敏感信息,所以必须进行脱敏,travis cli内置了encrypt-file方法。
整体流程为:

  1. 加密文件;
  2. 将加密后的文件上传到Github
  3. travis ci运行的时候解密。

命令则为:
4. gem install travis 安装travis命令行工具,需要ruby(ubuntu18、WSL需使用ruby-dev)
5. travis login --com 登录travis
6. travis encrypt-file deploy.sh --com --add 加密文件, deploy.sh为被加密文件,--com对应登录的--com--add可加密后自动将解密的命令添加到.travis.yml文件中。

二、发布

只需将travis ci生成的release上传到自定义的服务器即可,下面是我使用的脚本deploy.sh:

# 通过sshpass免除scp命令输入密码的过程,通过StrictHostKeyChecking=no免除scp命令信任主机的过程
sshpass -p your_server_password scp -P 22 -o StrictHostKeyChecking=no build.release root@your_server_address:/your/project/module/
# 同上
sshpass -p your_server_password ssh -tt -p 22 -o StrictHostKeyChecking=no root@server 2>&1 << eeooff
cd /your/project/module/
pkill build.release
nohup ./build.release &
exit
eeooff

还有一种发布的方式是通过ssh-keygen生成id_rsaid_rsa.public,将私钥复制到项目中加密,需要注意的是travis encrypt-file命令的限制,多个文件只能通过压缩后再加密,发布前解密再解压的方式来解决,即:

  1. tar cvf example.tar foo bar && travis encrypt-file example.tar --com --add
  2. .travis.ymlbefore_install中添加- tar xvf example.tar

你可能感兴趣的:(common)