Jenkins是什么?
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。
CI/CD是什么?
CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。借用网络图片对CI加以理解。
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a6ec3fdcc.png" />
CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。下图反应的是CI/CD 的大概工作模式。
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a6f001677.png" />
Jenkins安装及配置
前置要求
操作系统为可以Linux或Windows,JDK 1.8或以上。安装
到官网下载 https://jenkins.io/download/ ,这里下载的war包文件,
执行以下命令启动jenkins:
java -Dfile.encoding=GBK -jar jenkins.war —httpPort=8080进入Jenkins初始化页面,第一次启动时间可能有点长,耐心等待。进入成功后会看到如下画面,按提示路径打开密码文件,输入密码:
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a734c2714.png" />
解锁后又是一长段时间等待,此后可能出现如下图所示界面:
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a73e4c064.png" />表示无法下载Jenkins插件,可能是因为防火墙导致,而Jenkins插件的安装非常重要,建议翻墙。如无法翻墙,则选择Skip Plugin Installations跳过插件安装。进入以下页面,设置登陆用户
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a7464192f.png" />设置成功后即进入Jenkins主界面:
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a74c410bd.png" />常用配置
在正式创建部署项目前,需要配置常用构建工具如Ant, Maven , JDK等 。点击“系统管理”=》“全局工具配置”,进入配置界面:
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a7756835e.png" />
- JDK配置
配置构建项目需要JDK,在Linux系统下安装好JDK后,在Jenkins的配置相关的安装路径:
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a779d2ea5.png" /> - Maven配置
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a787caeb7.png" /> - Ant配置
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a78ecb195.png" />
- 常用插件
点击“系统管理”=》“插件管理”,进入插件配置界面:
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a7943ba46.png" />
以下是建议安装列表(黑色选中的为可选插件):
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a79abe902.png" />
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a79ee84e5.png" />
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a7a3f3637.png" />
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a7a8be55c.png" /> - Publish Over FTP插件配置
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a7b1145af.png" /> - Publish over SSH插件配置
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a7b826bb4.png" />
配置SSH,如使用ssh key 可在Passphrase使用私钥。如使用密码请删除Passphrase的密码,点击高级
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a7c0ed1b3.png" />
点击Test configuration测试, Success表示成功 - 项目构建
- Ant 项目构建
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a7c5cc0f6.png" />
填写描述
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a7e526664.png" />
源码管理输和SVN地址,账号和密码:
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a7ea14e34.png" />
构建环境选择“Invoke Ant”
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a7eedaa9d.png" />
设置ant构建文件
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a7f32e43f.png" />
构建后选择“Send build artifacts over FTP”
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a7ff8f204.png" />
文件复制参数设置如下:
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a804a75a7.png" />
项目保存后,点“立即构建”开始项目的构建:
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a80b4393c.png" />
项目构建完成,可以在目标的FTP目录找到构建后的文件:
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a8105dfb5.png" />
项目使用
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a82b84ca3.png" />源码配置
选择SVN
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a83121a8e.png" />
URL为项目路径 Credentials为用户身份,添加
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a868d30f8.png" />
常用类型1.username with password(用户名密码)2.SSH username with private key(ssh公私钥)
选择1输入用户名 密码添加即可 选择2在Private Key输入私钥
如需在控制台输出里显示代码更新 Quiet check-out取消勾选即可选择Git
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a86fd75b5.png" />
URL项目库,Credentials用户名密码 Branch为分支名例如master,qa项目打包编译
![img](http://showdoc.gzlplink.com/Public/Uploads/2020-08-12/5f33a874c79c5.png" />
jenkins通过ssh启动服务失败
查看tomcat启动日志发现报错:war包拒绝访问
因jenkins配置的ssh对应的windows账号不是administrator会出现没权限问题
方案1.更改jenkins的ssh用户为administrator
方案2.给需要权限的文件夹或文件授权
1 | windows命令给用户授权 |
自动部署脚本
windows自动部署war包脚本
1 | for /f "tokens=5" %%e in ('netstat -aon ^| findstr ":9021"') do (set f=%%e) |
因windows启动tomcat会被jenkins杀掉,所以要把tomcat做成服务
windows自动部署jar包脚本
1 | for /f "tokens=5" %%i in ('netstat -aon ^| findstr ":8081"') do (set j=%%i) |
linux自动部署war包脚本
jenkins配置
1 | sh /home/tomcat/upload/omall.sh |
omall.sh脚本如下
1 | #Java Env |
linux自动部署jar包脚本
jenkins配置
1 | cd /home/tomcat/app/admin-core |
admin-core.sh脚本如下
1 | #Java Env |
k8s自动部署后端脚本
执行shell
1 | cd admin-core |
gitlab配置
build.sh
1 | #!/bin/bash |
start.sh
1 | #!/bin/bash |
Dockerfile_prod
1 | FROM registry-vpc.cn-beijing.aliyuncs.com/lepeng/centos:latest |
k8s自动部署前端脚本
执行shell
1 | cd .. |
gitlab配置
Dockerfile_test
1 | FROM registry-vpc.cn-beijing.aliyuncs.com/lepeng/nginx:latest |
build.sh
1 | #!/bin/bash |
start.sh
1 | #!/bin/bash |
nginx.conf
1 | user nginx nginx; |
通过jenkins更新生产的nginx
![](\image\image-20200828165059543.png)
![](\image\image-20200824111256188.png)
1 | [root@iZ2ze18q1ojbig8zevjrbuZ nginx]# cat nginx_reload |