1. 背景

作为后台开发,每次咱们开发完或许修改一个bug后都要手动兼并,打包或许衔接服务器履行打包布置指令,每次手动操作,极大的影响了咱们的开发功率,那么有没有一款东西能让咱们只需要推送/兼并代码到远端就能完成服务主动打包,发布,布置,告诉呢。因而,今日介绍的jenkins和gitlab就来了。

2. jenkins介绍

这儿简介和安装就省掉了,各位能够自行百度/谷歌学习下,它在咱们的主动布置计划里做的重要人物就是打包,发布,布置,告诉

3. gitlab介绍

做为“程序猿”的咱们,相信这款东西也不会陌生,代码管理开源项目

4. 主动布置流程

4.1 流程图

Jenkins + gitlab 自动部署

4.2 各部分详解

  1. 开发推送/兼并代码到咱们的布置分支
  2. 代码推送到布置分支后,触发咱们的推送事情,然后调用jenkins的布置使命
  3. jenkins收到布置告诉后,调用企业微信的webhook发送音讯,“XX项目开始布置”
  4. jenkins经过git插件拉取gitlab对应分支的代码
  5. maven打包
  6. 第五步maven打包完成后,如果是布置在宿主机服务器,则经过ssh推送jar包到对应的服务器上,并履行重启指令
  7. 最后发送企业微信告诉布置完成,耗时多少。

4.3 实际操作

  1. 好了,各部分的现已大致介绍完成了,下面咱们经过一个小的demo来完成咱们的实际操作

  2. 推送代码到长途分支这块咱们就不用说了

  3. gitlab的推送事情介绍

    Jenkins + gitlab 自动部署

    1. 咱们挑选对应项目的webhooks装备
      1. jenkins的使命地址,这个和jenkins的使指令牌后续介绍
      2. jenkins使指令牌
      3. 触发事情,能够看到有多种事情,这儿咱们挑选的是推送事情,而且咱们装备的是develop分支的推送事情

4.4 jenkins对应job布置

  1. 新建使命

    Jenkins + gitlab 自动部署

  2. 填入使命称号,这儿咱们挑选一个自由风格的使命

    Jenkins + gitlab 自动部署

  3. 装备咱们项目的gitlab地址

    Jenkins + gitlab 自动部署

  4. 装备长途触发地址

    1. 挑选构建触发器,并把该url填入咱们的gitlab的webhooks事情的url中

      Jenkins + gitlab 自动部署

    2. 点击高级,生成授权码, 并把授权码填入gitlab的webhooks令牌中

    Jenkins + gitlab 自动部署

  5. 装备maven构建打包

    Jenkins + gitlab 自动部署

  6. 装备ssh发包

    Jenkins + gitlab 自动部署

  7. 装备企业微信告诉

Jenkins + gitlab 自动部署

4.5 推送示例展现

Jenkins + gitlab 自动部署
能够看到,咱们单个使用主动布置800+次了,开发只需要推送代码到远端,就会主动开始主动布置。

Jenkins + gitlab 自动部署

企业微信机器人告诉,当然,如果不需要插件模板也能够经过其他能够发送http请求的来自界说发送告诉内容。

5. 总结

今日咱们介绍了整个jenkins+gitlab的主动布置流程,用了最简单的比如来阐明,如果要布置多个服务器,咱们也能够在构建的时候添加多个服务器,这儿是串行布置的,如果需要并行布置的话咱们也能够经过pipeline的parallel ssh_publishers指令履行并行布置;如果你用的是docker或许k8s布置项目的话,咱们也能够把发包的过程换成打包后构建镜像然后推送到harbor中,经过履行长途shell脚本布置docker,履行kuboard的ci/cd api来切换线上标签。

6. 附

  1. 各个jenkins过程所用到的插件
    1. git及jdk装备, manage jenkins -> global tool configuration
      Jenkins + gitlab 自动部署
    2. Maven 装备
      1. 新建maven,填入服务器上maven地址或许安装maven
        Jenkins + gitlab 自动部署
    3. 其他插件
      1. manage jenkins -> Manager Plugin
        1. 企业微信告诉插件 Qy Wechat Notification
        2. ssh推送插件 Publish Over SSH