zoukankan      html  css  js  c++  java
  • Jenkins+gitlab自动构建环境搭建

      最近在学习持续集成,自己试着采用maven+gitlab+Jenkins搭建了一套环境,还是遇到了几个问题,在此帖中记录一下。

      安装java、maven、git的过程不做赘述。

      注:所有的组件我都是用的Windows和Linux环境安装的,没有使用docker镜像,如果使用docker的话,安装过程可以省略。

    1、安装maven私服nexus

      详情见:https://www.cnblogs.com/effortn/p/13328613.html

    2、安装Jenkins

      因为Jenkins是需要jdk环境的,所以需要先安装jdk(略)。

      我这里是Windows环境,下载安装的Jenkins服务,最新版本的官网下载地址:http://mirrors.jenkins.io/windows/latest,一路下一步就可以。最后是在服务里管理。

      还有一种比较简单的安装方式,下载war包:http://mirrors.jenkins.io/war-stable/latest/jenkins.war,之后可以使用java -jar jenkins.war启动。

      Jenkins启动后默认端口是8080,需要其他端口运行的话,war包可以在后面直接跟命令  --httpPort=8081,服务需要在安装目录的jenkins.xml里<arguments>标签里最后跟上  --httpPort=8081。

      安装参见官网:https://www.jenkins.io/doc/book/installing/

    3、安装gitlab

      gitlab必须在Linux环境,我是使用的虚拟机vmvare,安装的Centos7,同时作为部署服务的伪服务器。安装就是添加镜像使用yum安装,不推荐官网镜像,对于网络不好的童鞋太不友好(深受其害)。

      这边推荐一篇安装博客:https://www.cnblogs.com/ddz-linux/p/10698907.html

    4、新建gitlab项目

      新建gitlab项目,拉到本地,编写,上传。这里不过多描述。

      我这里是做了一个spring boot的web项目,只有一个返回"Hello world"的地址,用来测试。

    5、配置Jenkins插件

      在配置Jenkins项目之前,先要安装一些Jenkins插件(在系统管理里的插件管理中进行安装)。

      这里直接列出需要用到的插件:Git(用来拉取代码),Gitlab(触发gitlab的钩子请求),Publish Over SSH(部署项目),如果是部署war包到容器中,还需要Deploy to container。

      插件安装后,在系统管理的全局工具配置里,进行工具的配置,主要是配置JDK、Git、maven相关的属性,这边不要安装,都是选择本地安装好的工具(如果本地没有安装,先进行安装)。

      配置完成后,就可以开始配置项目了。

    6、配置Jenkins项目

      新建任务,创建一个自由风格的软件项目,我这边取名HelloWorld,具体配置如下:

            

      其中Git需要添加认证,把用户和密码录入。构建触发,选择Build when a change is pushed to GitLab(通过gitlab代码提交后调用钩子方法实现项目的重新构建)。点击高级,生成密钥。

      保存后Jenkins的配置就完成了。项目是放在Linux的/root/app/目录下,同目录还有需要执行的脚步exec.sh,如下:

    #!/bin/bash
    #最后一个执行的脚本放到的位置是/app
    
    Project_name=$1
    Port_no=$2
    
    
    echo $Project_name
    echo $Port_no
    
    
    . /etc/profile
    
    
    # 进入到项目
    cd /root/app
    
    
    # 找到原进程,kill
    pid=$(ps -ef | grep java| grep $Project_name|awk -F '[ ]+' '{print $2}')
    if [ -z $pid ];then
      echo "this process is not exit"
    else
      kill -9 $pid
    fi
    
    #启动jar
    nohup java -jar $Project_name.jar --server.port=$Port_no -server -Xmx1000m -Xms1000m -Xmn700m -XX:+UseParallelGC >/var/log/$Project_name.log &
    
    echo "starting service..."
    sleep 20
    
    
    #根据重启后是否有当前应用判断启动是否成功
    pid=$(ps -ef | grep java| grep $Project_name|awk -F '[ ]+' '{print $2}')
    #echo $pid
    if [ -z $pid ];then
      echo "启动失败"
      exit 1
    else
      echo $Project_name :  $pid  "SUCCESS"
    fi

    7、gitlab项目配置

      gitlab上主要配置钩子方法。

      先需要在管理中心,Admin Area > Network中,配置Outbound requests,两个选项都允许,再在下面的输入框中输入本地IP对应的hostname 。 

           

      之后配置项目的webhook(下面的都是测试):

           

      最后就可以愉快的提交代码了。自动构建部署。

    8、中间遇到的坑:

      1) webhook无法访问本地网络:需要先配置network。

      2) gitlab访问502:一般gitlab启动需要1-2分钟,等待一会儿就可以了。

      3) Jenkins部署后控制台输出不中断,导致项目构建不稳定(其实已经部署好了):使用nohup,将控制台的输出输入到/dev/null(正式环境下都有专门的日志文件)。

      4) jar包名称的版本问题:打包时可以不带版本号,也可以使用*号代替,我是用*号代替。

  • 相关阅读:
    Fragment使用具体解释
    2014百度之星第一题Energy Conversion
    HDU 2602 Bone Collector 0/1背包
    Angular 2 + 折腾记 :(7) 初步了解表单:模板驱动及数据驱动及脱坑要点
    《开源框架那点事儿25》:对框架模板引擎实现方式的改造实录
    ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse
    sql改写or 改成union不等价数据变多
    在GDAL中添加GDALRasterizeGeometriesBuf函数
    多时相地图瓦片简单设想
    记录一次使用VS2015编译错误的原因查找(boost+gdal)
  • 原文地址:https://www.cnblogs.com/effortn/p/13354592.html
Copyright © 2011-2022 走看看