前言
在这一篇中, 完成的是一个自动化部署的脚本。
Atlassian Bamboo 是一款持续集成构建服务器软件(Build Server)
软件地址: https://www.atlassian.com/software/bamboo
我是在10年前就开始使用Bamboo了, 版本一直没有升级。
Bamboo本身集成的代码管控和Ant的功能, 通过配置就可以完成。
这里还是结合上一篇的脚本, 纳入到Bamboo中, 其实只是让Bamboo调用一下脚本。 或许使用Jenkins更合适 ^^
实现方式
首先说明一下,Bamboo是安装在另一台Linux的服务器, 和项目部署的服务器不在同一台。
所以要使用SSH登录到项目部署的服务器执行脚本。
在bamboo的机器中编写一个脚本实现SSH登录并执行脚本,然后在Bamboo的配置中使用Script的方式进行Build
关键问题
要实现SSH自动登录的话, 最便捷就是使用 Expect 了。
Expect是一个用来处理交互的命令。借助Expect,我们可以将交互过程写在一个脚本上,使之自动化完成。形象的说,ssh登录,ftp登录等都符合交互的定义。
我使用的bamboo脚本只能运行bash, 对于expect的运行不支持, 不知道新版是否直接可以。这样的话, 就需要做一次转化了, 通过.sh 调用 .exp
结论就是要写两个脚本, 一个 .sh; 一个.exp
脚本参考
autodeploy.sh
#!/bin/bash
cd /deploy/autodeploy/scripts
./autodeploy.exp
autodeploy.exp
#!/usr/bin/expect
set timeout -1
spawn ssh -t -t -o StrictHostKeyChecking=no root@yourIP
expect "*password:"
send "your password\r"
send "cd /usr/local/deploy\r"
send "./deploy.sh\r"
expect "*End Deploy Successful!"
send "exit 1\r"
说明:
1. -o StrictHostKeyChecking=no
如果不加的话, 每次ssh连接(或rsync)时就会有提示:The authenticity of host *** can’t be established ,需要输出一个“yes”的交互。
2. ssh -t -t
不加 -t -t 选项的话,当远程登录主机时出现Pseudo-terminal will not be allocated because stdin is not a terminal. 错误
3. 最后两句必须加上, 否则一直在ssh的登录窗口, bamboo 会一直处于运行状态。