持续集成和部署工具GoCD安装和任务配置

        采用敏捷开发以后,自动化集成和部署的必要性越来越大,每天可以节省大量的时间。对比之后,采用GoCD作为持续集成和部署的工具。

一、安装

        GoCD分为两个部分:go-server 和 go-agent 需要分别进行安装。可以安装在同一台主机上,也可以安装在不同的主机上。服务端提供了统一的任务管理,相关的任务会分配给不同的代理服务器(go-agent)上来执行。相关的概念和部署在文档中都有体现,按步骤操作基本没什么问题。

        官网地址:https://www.gocd.org/

        参考中文文档: https://gocd.org.cn/#/

二、配置

        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(){
  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

         强制保存退出即可。

发布了36 篇原创文章 · 获赞 9 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/gudufeiyang/article/details/82981888