生成(加密过的)SSH key

1
2
3
ssh-keygen -t rsa -b 4096 -C 'build@travis-ci.com' -f ./deploy_rsa
travis encrypt-file --com deploy_rsa --add
ssh-copy-id -i deploy_rsa.pub 目标服务器用户名@目标服务器

然后你的.travis.yml中会出现:

1
2
3
before_install:
- openssl aes-256-cbc -K $encrypted_......_key -iv $encrypted_......_iv
-in deploy_rsa.enc -out deploy_rsa -d

同时 $encrypted……key$encrypted……iv 会出现在你的travis CI项目的环境变量中。

一般我会把这段移到deploy stage里面:

1
2
3
4
5
- stage: deploy
language: minimal
before_install:
- openssl aes-256-cbc -K $encrypted_......_key -iv $encrypted_......_iv
-in deploy_rsa.enc -out deploy_rsa -d

另外还需要在后面添加key文件权限的设置:

1
2
3
- eval "$(ssh-agent -s)"
- chmod 600 ./deploy_rsa
- ssh-add ./deploy_rsa

添加known_hosts

为了防止让ssh让你拿手选是否把你的目标服务器添加到known_hosts,造成CD不能继续,我们还要在.travis.yml头部添加(我一般加在services一项的后面):

1
2
addons:
ssh_known_hosts: 目标服务器

接着删掉我们不该上传的东西:

1
rm -f deploy_rsa deploy_rsa.pub

你也可以将这两个文件添加到.gitignore中,防止以后接手的人做出什么傻事(x。

然后将需要上传的东西添加到git里:

1
git add deploy_rsa.enc

添加实际需要运行的东西

.travis.yml的deploy stage中写:

1
2
3
4
5
6
7
8
9
10
- stage: deploy
language: minimal
before_install:
- openssl aes-256-cbc -K $encrypted_......_key -iv $encrypted_......_iv
-in deploy_rsa.enc -out deploy_rsa -d
- eval "$(ssh-agent -s)"
- chmod 600 ./deploy_rsa
- ssh-add ./deploy_rsa
script:
- ssh -i ./deploy_rsa 目标服务器用户名@目标服务器 部署时要执行的指令

个人习惯把要执行的指令写成一整个shell脚本,然后只需在ssh中调用这个脚本即可。

当然也可以一句句语句通过ssh执行,随你的需求和喜好而定了。

接着commit and push你的代码,and enjoy!