Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

唠叨一段

公司小什么都要节约一点,所有测试服务器都在公司局域网里,代码托管在Gitee当中,自从用了微服务(用SpringBoot拆解业务流程),开发与测试阶段部署jar太麻烦了,多早以前就听说过Jenkins,经过不停的踩坑终于完成了初步的Gitee+jenkins+花生壳(内网穿透)+nginx实现自动持续部署。里面还涉及到一些高级功能只能后面边使用边补充

我在里面用到了nginx,对于不需要的朋友,直接忽略对应步骤即可,直接将tomcat的监听端口改为80

注册与配置花生壳

  1. 注册/登录花生壳

  2. 购买域名

  3. 购买内网穿透

  4. 设置花生壳

    • 开启花生壳

      Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第1张图片

    • 增加内网穿透映射

      Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第2张图片

      我映射的80端口是被NGINX监听的(因为Jenkins等其他web应用也需要通过该域名被外网访问)

    • 测试。输入花生壳的域名,看能否访问到自己的web服务器网页

      Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第3张图片

      nginx配置:

      #user  nobody;
      worker_processes  1;
      ​
      #error_log  logs/error.log;
      #error_log  logs/error.log  notice;
      #error_log  logs/error.log  info;
      ​
      #pid        logs/nginx.pid;
      ​
      events {
          worker_connections  1024;
      }
      ​
      http {
          include       /etc/nginx/mime.types;
          default_type  application/octet-stream;
      ​
      #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
      #                  '$status $body_bytes_sent "$http_referer" '
      #                  '"$http_user_agent" "$http_x_forwarded_for"';
      ​
      access_log  /home/app/proc/nginx/logs/access.log;
      ​
      sendfile        on;
      #tcp_nopush     on;
      ​
      #keepalive_timeout  0;
      keepalive_timeout  65;
      ​
      #gzip  on;
      ​
      server {
          listen       80;
          server_name  localhost;
      ​
          #charset koi8-r;
      ​
          #access_log  logs/host.access.log  main;
      ​
          location / {
              root   html;
              index  index.html index.htm;
          }
      ​
          #error_page  404              /404.html;
      ​
          # redirect server error pages to the static page /50x.html
          #
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   html;
          }
      ​
          # proxy the PHP scripts to Apache listening on 127.0.0.1:80
          #
          location /jenkins{
              proxy_pass   http://192.168.2.23:8080; 
          }
      }
      }

    到此为止花生壳的配置结束了

安装与配置Jenkins

安装Jenkins

  • 在官网去下载war包

    https://jenkins.io/download/,选择Long-term Support->Generic Java package

    我下载的http://mirrors.jenkins.io/war-stable/latest/jenkins.war

  • 部署到tomcat中,tomcat会自动解压war并在webapps目录下生成jenkins文件夹

    注意:linux操作系统限制了非root用户不能监听1024一下端口号,所以如果tomcat要启动在80端口,必须用root用户启动,否则要修改花生壳的映射(指向内网的非80端口)

安装Git

登陆root用户,执行

yum -y install git

安装完git后,复制出/usr/bin/git,后面设置会用到

配置Jenkins

初始化Jenkins

因为我自己已经在nginx上配置了Jenkins的代理,所以直接用如下地址访问:

http://xxx.xxx.ecip.vip/jenkins

刚开始会出来一个提示页面,告诉你Jenkins还在准备中,过1分钟左右可以自己刷新页面,便会出来如下界面

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第4张图片

圈出来的部分是下面要输入的密码保存位置

去LINUX主机上获取密码

cat /root/.jenkins/secrets/initialAdminPassword

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第5张图片

输入密码,点击下一步

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第6张图片

然后过几分钟会提示你安装插件,选择按照推荐的安装。

补充:可能会有朋友遇到这个页面出不来,提示连接失败,可以直接跳过,后面直接去“插件管理”里面选择对应插件进行安装。网上也有说去插件中心修改https为http,我试了一下不知道为什么不行,就选择了前面的本办法。

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第7张图片

在不断的安装进行中

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第8张图片

只安装这点插件还不够,等会还要补充安装别的插件。

 

这一步完成之后,会提示创建用户,如果是生产环境,建议创建一个用户给予相应的权限。我自己继续使用的admin用户。最终进入主页

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第9张图片

补充别的插件

选择路径:“系统管理”-》“插件管理”

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第10张图片

安装Deploy to container\Gitee\Publish Over SSH\Maven Integration插件

注:可以选择完所有插件后,在点击安装(install without restart)

系统设置

选择路径:“系统管理”-》“系统设置”

设置Gitee

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第11张图片

设置参考https://gitee.com/oschina/Gitee-Jenkins-Plugin#%E6%8F%92%E4%BB%B6%E5%AE%89%E8%A3%85中的“插件配置-添加码云链接配置”章节

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第12张图片

设置完后,一定要测试一下是否链接成功

设置PUSH SSH OVER

设置界面

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第13张图片

Passphrase:生成ssh公钥私钥时的密码,如果使用ssh-keygen没有输入,该值不用填。按照本操作文档弄,就是不用填值

Path to key:私钥路径,此配置如果设置了,就可以不用设置下面Key了。在下面的ssh-keygen执行完后,会输入私钥的路径,复制并粘贴进来

Key:私钥内容,此配置如果设置了,就可以不用设置上面的Path to key了

设置ssh免登陆

使用root用户登录,配置hosts

ac0f198fdefe6cbe91b5b9528f141b02ebe.jpg

使用app(自己的非root)用户,配置ssh免登陆

ssh-keygen,交互的时候直接三次回车

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第14张图片

ssh-copy-id,输入对应用的密码

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第15张图片

添加SSH Server

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第16张图片

Name:自己随便取,可读性强即可

Hostname:要接收构建后jar包的服务器ip或者域名

Username:远程主机用户名

Remote Directory:直接设置根目录,如果这样设置,要注意用户(app)的访问权限。如果这里设置了根目录,后面设置的发送目录时就可以直接输入全路径,避免造成误配。这一点很重要,我在测试时候,就踩了这个坑

弄完之后,点击测试一下

全局工具设置

设置MAVEN

配置文件

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第17张图片

设置maven主目录

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第18张图片

去掉“自动安装”复选框

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第19张图片

设置JDK

设置JDK主目录

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第20张图片

设置GIT

设置Git文件目录

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第21张图片

新建并构建任务

新建任务

前往 Jenkins -> New Item , name 输入 'Gitee Test',选择 Freestyle project 保存即可创建构建项目

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第22张图片

 

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第23张图片

 

任务全局配置

Gitee链接设置

任务全局配置中需要选择前一步中的码云链接。前往某个任务(如'Gitee Test')的 Configure -> General,Gitee connection 中选择前面所配置的码云联机,如图:

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第24张图片

源码管理配置

前往某个任务(如'Gitee Test')的 Configure -> Source Code Management 选项卡

  1. 点击 Git

  2. 输入你的仓库地址,例如 [email protected]:gitee_group/gitee_project.git

    • 点击 Advanced 按钮, Name 字段中输入 originRefspec 字段输入 +refs/heads/:refs/remotes/origin/ +refs/pull//MERGE:refs/pull//MERGE

  3. Branch Specifier 选项,根据实际情况输入,我自己输入的*/master

  4. 其他是选择的默认值

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第25张图片

添加证书

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第26张图片

最终设置完如图:

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第27张图片

设置构建目标

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第28张图片

测试构建

此刻的构建只是从Gitee上拉取代码并进行打包,还不具备push代码触发构建的能力

进入到任务界面,点击“立即构建”

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第29张图片

点击进度条,进入详情页面,点击“Console Output”,可以查看打包的日志输出

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第30张图片

第一次构建,会下载很多包,过程比较漫长

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第31张图片

打包完会输出如下日志

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第32张图片

触发设置

  1. 生成Gitee WebHook 密码

    Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第33张图片

  2. 在Gitee中设置WebHook密码

    Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第34张图片

  3. 其他全部默认值

  4. 测试触发是否成功

    在Gitee中点击

    Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第35张图片

    观察Jenkins是否触发新的构建

    Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第36张图片

    可以看到确实触发了新的构建

构建动作设置

其中包含Pre steps/Post steps,两者的作用类似于动态代理的invoke方法的前后执行的动作,或者Spring拦截器中的preHandle和afterHandle。

Pre steps:构建前执行的步骤,比如可以执行别的shell操作完成很多复杂的动作

Post steps:构建后执行的步骤

还有一个Post-build Actions

只是为了实现构建后进行文件传送和部署,设置Post steps/Post-build Actions都可以,我自己使用的Post-build Actions

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第37张图片

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第38张图片

restart.sh脚本内容,该脚本是选择发送过来的jar包列表中最近被修改的作为启动项

#!/bin/sh
#设置环境变量
export JAVA_HOME=/home/app/proc/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
#设置程序主目录
APP_HOME=/home/app/app/hello
#进入程序主目录
cd $APP_HOME
#找出最近被修改的jar包
JAR_NAME=`ls -lot *.jar|head -n 1|awk '{print $8}'`
#启动项目
java -jar $APP_HOME/$JAR_NAME> $APP_HOME/app.log

测试一下

在Gitee的WebHook中点击测试

观察Jenkins中的HelloWorld项目是否被触发构建

查看构建日志

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第39张图片

查看进程是否启动起来了

6d11af0400e64ca7cc9163c53bb27c7e9e0.jpg

验证应用是否正常

Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第40张图片

发现错别字了吧,笑一笑也不错

OK,全部通过。。。

补充:

  1. 为了能在Jenkins控制台观察到启动日志,可以修改restart,将

    java -jar $APP_HOME/$JAR_NAME> $APP_HOME/app.log

    改为

    java -jar $APP_HOME/$JAR_NAME

    效果如下:

    Jenkins+花生壳+nginx实现内网穿透的Springboot项目持续部署_第41张图片

    图片最下面的圈圈,表示还在等待接收新的输入流做显示

  2. 为了不让Jenkins等待应用服务器的输出,则可以修改restart.sh,将

    java -jar $APP_HOME/$JAR_NAME> $APP_HOME/app.log

    改为

    nohup java -jar $APP_HOME/$JAR_NAME> $APP_HOME/app.log &

到底使用哪种方式,看自己喜好吧。

其他

忘记密码

  1. 找回admin密码

    使用jenkins启动用户登录主机,执行如下命令:

    cd

    cd .jenkins/secrets

    cat initialAdminPassword

    里面的内容便是admin的密码

  2. 取消密码登录

    使用jenkins启动用户登录主机,执行如下命令:

    cd

    cd .jenkins

    vi config.xml

    修改truefalse

    使用注释掉下面的内容:

    
        true
      
      
        true
        false
      

转载于:https://my.oschina.net/u/3049601/blog/3016361

你可能感兴趣的:(运维,java,javascript,ViewUI)