持续集成和部署⼯具GoCD安装和任务配置
采⽤敏捷开发以后,⾃动化集成和部署的必要性越来越⼤,每天可以节省⼤量的时间。对⽐之后,采⽤GoCD作为持续集成和部署的⼯具。
⼀、安装
GoCD分为两个部分:go-server 和 go-agent 需要分别进⾏安装。可以安装在同⼀台主机上,也可以安装在不同的主机上。服务端提供了统⼀的任务管理,相关的任务会分配给不同的代理服务器(go-agent)上来执⾏。相关的概念和部署在⽂档中都有体现,按步骤操作基本没什么问题。
⼆、配置
1、配置Java项⽬
背景:项⽬结构为maven项⽬,采⽤的技术为SpringBoot
⽬标:实现项⽬⾃动打包,⾃动重启
步骤:
(1)依次创建piplelines、stage、job 如下图:
(2)创建tasks
Task1:执⾏maven打包操作,GoCD已内置了mvn命令,但是代理服务器上需要安装maven客户端
Task2:将打包后的jar⽂件,复制到项⽬部署⽬录。
注意:⽂件夹权限,GoCD通过⾃⼰创建的go⽤户来执⾏命令,需要确保⽂件夹的操作权限 ,可⽤chmod +777 命令进⾏设置权限;另打包后的jar⽂件,在GoCD的沙箱中,直接从target/***.jar 复制即可
Task3:重启jar包,需要借助shell 命令来完成。
注意:sh⽂件需要编辑测试好以后,放在代理服务器的相应的⽬录下。
sh⽂件编写:
#!/bin/bash
#这⾥可替换为你⾃⼰的执⾏程序,其他代码⽆需更改
APP_NAME=/opt/server/msp/health-api/health-2.0.2.jar
#使⽤说明,⽤来提⽰输⼊参数
usage() {
echo "Usage: sh health_api.sh [start|stop|restart|status]"
exit 1
}
#检查程序是否在运⾏
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动⽅法
start(){
start(){
is_exist
if [ $? -eq 0 ]; then
echo "${APP_NAME} is already running. pid=${pid}"
else
echo "开始启动..."
nohup java -jar ${APP_NAME}  >/dev/null 2>&1 &
echo "启动结束"
fi
}
#停⽌⽅法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
#输出运⾏状态
status(){
is_exist
持续集成的概念if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
#重启
restart(){
stop
sleep 5
start
}
#根据输⼊参数,选择执⾏对应⽅法,不输⼊则执⾏使⽤说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;
;
esac
2、配置web(npm)项⽬
背景:项⽬为通过npm管理的web项⽬,需要借助npm进⾏编译,编译后为静态html、js、css⽂件      ⽬标:编译项⽬,并将编译后的⽂件复制到nginx服务器指向的⽬录内
步骤:由于GoCD并没有内置npm管理命令,所以,需要直接在代理服务器上⽤脚本来执⾏,
注意:代理服务器上需要配置好项⽬代码⽬录,svn环境,以便于脚本执⾏代码更新,并进⾏编译
(1)依次创建piplelines、stage、job ,同java项⽬
(2)执⾏shell命令,同java项⽬中的task3,需要提前在代理服务器上部署sh⽂件
npm项⽬shell脚本如下:
#!/bin/bash
#这⾥可替换为你⾃⼰的执⾏程序,其他代码⽆需更改
SOURCE_CODE_DIR=/opt/server/sourceDir
DEPLOY_DIR=/opt/server/msp/depDir
#更新代码
cd ${SOURCE_CODE_DIR}
svn cleanup --username yourSVNname --password yourSVNpassword
svn update --username yourSVNname --password yourSVNpassword
#编译
npm install
npm run build
#复制到部署⽬录
cp ./dist/{index.js,index.css} ${DEPLOY_DIR}
三、其它问题
问题1:服务器断电重启
问题描述:服务器断电重启后,go-server可以正常启动,go-agent启动⼀直报权限不⾜。使⽤sudo进⾏启动仍提⽰权限不⾜  sudo /etc/init.d/go-agent start
解决⽅法:根据错误提⽰:/etc/default/go-agent 执⾏权限问题。
使⽤sudo命令 cp go-agent⽂件 权限即变为 root root ,然后再⽤sudo 命令启动即正常。
问题2:在GoCD中使⽤ sudo命令执⾏脚本时,需要输⼊密码的问题
解决⽅法:
打开⽂件:sudo vi /etc/sudoers
添加代码:go ALL=(ALL) NOPASSWD:ALL
强制保存退出即可。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。