唠叨一段
公司小什么都要节约一点,所有测试服务器都在公司局域网里,代码托管在Gitee当中,自从用了微服务(用SpringBoot拆解业务流程),开发与测试阶段部署jar太麻烦了,多早以前就听说过Jenkins,经过不停的踩坑终于完成了初步的Gitee+jenkins+花生壳(内网穿透)+nginx实现自动持续部署。里面还涉及到一些高级功能只能后面边使用边补充
我在里面用到了nginx,对于不需要的朋友,直接忽略对应步骤即可,直接将tomcat的监听端口改为80
注册与配置花生壳
-
注册/登录花生壳
-
购买域名
-
购买内网穿透
-
设置花生壳
-
开启花生壳

-
增加内网穿透映射

我映射的80端口是被NGINX监听的(因为Jenkins等其他web应用也需要通过该域名被外网访问)
-
测试。输入花生壳的域名,看能否访问到自己的web服务器网页

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
-
部署到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分钟左右可以自己刷新页面,便会出来如下界面

圈出来的部分是下面要输入的密码保存位置
去LINUX主机上获取密码
cat /root/.jenkins/secrets/initialAdminPassword

输入密码,点击下一步

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

在不断的安装进行中

只安装这点插件还不够,等会还要补充安装别的插件。
这一步完成之后,会提示创建用户,如果是生产环境,建议创建一个用户给予相应的权限。我自己继续使用的admin用户。最终进入主页

补充别的插件
选择路径:“系统管理”-》“插件管理”

安装Deploy to container\Gitee\Publish Over SSH\Maven Integration插件
注:可以选择完所有插件后,在点击安装(install without restart)
系统设置
选择路径:“系统管理”-》“系统设置”
设置Gitee

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

设置完后,一定要测试一下是否链接成功
设置PUSH SSH OVER
设置界面

Passphrase:生成ssh公钥私钥时的密码,如果使用ssh-keygen没有输入,该值不用填。按照本操作文档弄,就是不用填值
Path to key:私钥路径,此配置如果设置了,就可以不用设置下面Key了。在下面的ssh-keygen执行完后,会输入私钥的路径,复制并粘贴进来
Key:私钥内容,此配置如果设置了,就可以不用设置上面的Path to key了
设置ssh免登陆
使用root用户登录,配置hosts

使用app(自己的非root)用户,配置ssh免登陆
ssh-keygen,交互的时候直接三次回车

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

添加SSH Server

Name:自己随便取,可读性强即可
Hostname:要接收构建后jar包的服务器ip或者域名
Username:远程主机用户名
Remote Directory:直接设置根目录,如果这样设置,要注意用户(app)的访问权限。如果这里设置了根目录,后面设置的发送目录时就可以直接输入全路径,避免造成误配。这一点很重要,我在测试时候,就踩了这个坑。
弄完之后,点击测试一下
全局工具设置
设置MAVEN
配置文件

设置maven主目录

去掉“自动安装”复选框

设置JDK
设置JDK主目录

设置GIT
设置Git文件目录

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


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

源码管理配置
前往某个任务(如'Gitee Test')的 Configure -> Source Code Management 选项卡
-
点击 Git
-
输入你的仓库地址,例如
git@your.gitee.server:gitee_group/gitee_project.git-
点击 Advanced 按钮, Name 字段中输入
origin, Refspec 字段输入 +refs/heads/:refs/remotes/origin/ +refs/pull//MERGE:refs/pull//MERGE
-
-
Branch Specifier 选项,根据实际情况输入,我自己输入的*/master
-
其他是选择的默认值

添加证书

最终设置完如图:

设置构建目标

测试构建
此刻的构建只是从Gitee上拉取代码并进行打包,还不具备push代码触发构建的能力
进入到任务界面,点击“立即构建”

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

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

打包完会输出如下日志

触发设置
-
生成Gitee WebHook 密码

-
在Gitee中设置WebHook密码

-
其他全部默认值
-
测试触发是否成功
在Gitee中点击

观察Jenkins是否触发新的构建

可以看到确实触发了新的构建
构建动作设置
其中包含Pre steps/Post steps,两者的作用类似于动态代理的invoke方法的前后执行的动作,或者Spring拦截器中的preHandle和afterHandle。
Pre steps:构建前执行的步骤,比如可以执行别的shell操作完成很多复杂的动作
Post steps:构建后执行的步骤
还有一个Post-build Actions
只是为了实现构建后进行文件传送和部署,设置Post steps/Post-build Actions都可以,我自己使用的Post-build Actions


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项目是否被触发构建
查看构建日志

查看进程是否启动起来了

验证应用是否正常

发现错别字了吧,笑一笑也不错
OK,全部通过。。。
补充:
-
为了能在Jenkins控制台观察到启动日志,可以修改restart,将
java -jar $APP_HOME/$JAR_NAME> $APP_HOME/app.log
改为
java -jar $APP_HOME/$JAR_NAME
效果如下:

图片最下面的圈圈,表示还在等待接收新的输入流做显示
-
为了不让Jenkins等待应用服务器的输出,则可以修改restart.sh,将
java -jar $APP_HOME/$JAR_NAME> $APP_HOME/app.log
改为
nohup java -jar $APP_HOME/$JAR_NAME> $APP_HOME/app.log &
到底使用哪种方式,看自己喜好吧。
其他
忘记密码
-
找回admin密码
使用jenkins启动用户登录主机,执行如下命令:
cd
cd .jenkins/secrets
cat initialAdminPassword
里面的内容便是admin的密码
-
取消密码登录
使用jenkins启动用户登录主机,执行如下命令:
cd
cd .jenkins
vi config.xml
修改<useSecurity>true</useSecurity>为<useSecurity>false</useSecurity>
使用<!-- -->注释掉下面的内容:
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy"> <denyAnonymousReadAccess>true</denyAnonymousReadAccess> </authorizationStrategy> <securityRealm class="hudson.security.HudsonPrivateSecurityRealm"> <disableSignup>true</disableSignup> <enableCaptcha>false</enableCaptcha> </securityRealm>




所有评论(0)