一、环境以及工具信息

  1. 3台服务器信息

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

  jenkins: 192.168.123.163、serverA:192.168.123.130、serverB :139.198.17.241三台机器都是ubuntu16.04系统

  所需jenkins插件工具:Publish Over SSH、Maven Integration plugin、git plugin、Git Parameter Plug-In

  ssh工具:sshd

  jenkins版本为2.17

二、搭建目标

实测搭建jenkins多环境、多分支demo 随笔 第1张

  1. 实现可选git分支以及拉取最新代码

  2. 实现选择不同环境发布jar部署到对应的机器上

三、构建

  1. 安装插件:Publish Over SSH、Maven Integration plugin、git plugin

  2. jenkins机器配置

    a. 安装jdk8

    b.配置maven路径,下载tar.gz,解压即可

  3. 配置系统管理-》全局工具配置

   只需要配置jdk和maven,其他都默认即可

  实测搭建jenkins多环境、多分支demo 随笔 第2张

 

  

    实测搭建jenkins多环境、多分支demo 随笔 第3张

  4. 配置系统管理-》系统设置

    实测搭建jenkins多环境、多分支demo 随笔 第4张

      passphrase/password:为你输入的密码

    实测搭建jenkins多环境、多分支demo 随笔 第5张

    241配置 ,key为你jenkins机器的本地私钥,passphrase/passwd值可以删掉,这里要注意:必须将本地私钥完整内容拷贝,包括----字

    实测搭建jenkins多环境、多分支demo 随笔 第6张

 

 

   5. 部署配置

    5.1 新建任务,由于我这里已经创建忽略此步骤

    实测搭建jenkins多环境、多分支demo 随笔 第7张

    5.2 选中general里的参数化构建过程,点击git parameter和选项参数,前者是配置不同git分支,后者是选中不同环境

    实测搭建jenkins多环境、多分支demo 随笔 第8张

    实测搭建jenkins多环境、多分支demo 随笔 第9张

 

 

     5.3 配置git

     注意将branch spec改为:$BRANCH,否则git只会找master分支

    实测搭建jenkins多环境、多分支demo 随笔 第10张

    5.4 构建触发器

    实测搭建jenkins多环境、多分支demo 随笔 第11张

    5.5 配置post steps

      此步骤实现文件上传、jar启动,执行shell脚本

      a. 选中send files or execute commands over ssh

      b. 配置server

      c. 选中server里的高级 选中lable

      d. 选中外层的高级 配置 参数化发布

      实测搭建jenkins多环境、多分支demo 随笔 第12张

 

      实测搭建jenkins多环境、多分支demo 随笔 第13张

 

      Source files:需要发送到远程服务器的文件,可以使用通配符和Jenkins变量(注意这里要写相对jenkins的workspace的工作目录而已,不支持绝对路径,target为项目的子目录)
      Remove prefix:删除目录前缀,填target表示不创建target目录
      Remote directory:文件发送到远程服务器的哪个目录下。这里跟你系统设置里的工作目录关联,会在对应的remote directory 目录下创建Kepler..目录。

      Exec command:文件发送到远程服务器后,在远程服务器上执行的命令

      最后在外层点击 高级选中parameterized publist,否则不会实现不了环境选中

       实测搭建jenkins多环境、多分支demo 随笔 第14张

     附上shell内容:masterKepler.sh

# jar包路径
JAR_PATH='/data/app/KeplerMockDevice'

#Jenkins中编译好的jar名称
jar_name=KeplerMockDevice-0.0.1-SNAPSHOT.jar

cd ${JAR_PATH}

#模糊查询指定jar服务的进程id
pid=`ps -ef|grep Mock|grep -v grep|awk '{print $2}'`
if [ -n "$pid" ]
then
echo '163 mock The pid: server' $pid ' will be killed....'
sudo kill -9 $pid
echo '163 mock The pid: server' $pid ' will be start'
nohup java -jar ${JAR_PATH}/${jar_name}  &
else
echo '163 mock The pid: server' $pid ' not exist , will be start'
nohup java -jar ${JAR_PATH}/${jar_name}  &
fi
echo '163 mock The pid: server' $pid ' started'

 

     6. 保存

    

四、发布

  选中项目下的git parameters,选中分支BRANCH,选中环境ENV发布。最后就可以享受成果了。

五、常见问题

  1.jenkins 彻底解决sudo sudo: no tty present and no askpass program specified

  方案:

    a. chmod 600 /etc/sudoers

    b.vim /etc/sudoers 改成下列值

    %root        ALL=(ALL)       NOPASSWD: ALL

    %sudo  ALL=(ALL) NOPASSWD: ALL

    c.添加jenkins Linux account到root 组中:

    usermod -a -G root jenkins

    运行id jenkins 查看jenkins Linux account是否已经属于root 组

    d.重启jenkins

  2. 配置ssh remotes hosts报Can't connect to server

    方案:  

  1. 本地机器秘钥生成不对
  2. 必须将本地私钥完整内容拷贝,包括----字符
  3. 生成秘钥时候的密码错误

  3.  There were errors checking the update sites: UnknownHostException: updates.jenkins.io

  方案:没有外网导致

 

  参考自:

  https://www.jianshu.com/p/6288703532cf

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄