什么是Jenkins?
Jenkins是一款开源CI&CD软件,用于自动化各种任务,包括构建、测试和部署软件,支持自定义工具集、多种交付通道
CI:Continuous integration,持续集成,一种软件开发实践。每次集成(源代码变更后)都通过自动化的构建(包括编译、发布、自动化测试)来验证,从而尽快地发现集成错误,大大减少集成问题。持续集成过程:先把代码放入git,Jenkins从git获取代码进行构建、测试、生成结果再返回给客户端
CD:Continuous Delivery,持续交付,指整个流程链(管道),它自动监测源代码变更并通过构建、测试、打包和相关操作运行它们以生成可部署的版本。包括持续集成、持续测试、持续部署
持续交付管道:将源代码转换为可发布产品的多个不同的任务和作业通常串联成一个软件管道,一个自动流程成功完成后会启动管道中的下一个流程。这些管道有许多不同的叫法,如持续交付管道、部署管道、软件开发管道
自动化部署流程:
持续集成的优点:
Windows环境下安装Jenkins:
步骤一:安装JDK11+ (如果版本低,很可能插件安装不了)
步骤二:下载Jenkins包:https://www.jenkins.io/download
步骤三:双击 jenkins.mis,点击next–>next–>选择‘Run service as LocalSystem(not recommended)’–>修改端口号,点击Test Port测试端口号是否可用–>next–>选择本地JDK安装路径–>next–>nexrt—>next–>install–>finish
步骤四:访问本地Jenkins http://localhost:1010/ 进行设置密码
密码设置:首次登陆需要找到动态设置的初始密码,复制进管理员密码
步骤五:安装自定义插件,可直接安装推荐插件,也可跳过此步骤,next—>创建第一个账户,默认是admin,密码:admin
方法一:直接选择插件进行安装:可选插件
方法二:下载插件后直接手动选择安装:高级–>Deploy Plugin
安装Role-based Authorization Strategy插件(此处已安装,可在可选插件中选择安装)
开启权限全局安全配置 Manage Jenkins —> Configure Global Security
授权策略切换为 Role-Based Strategy,保存
管理和分配角色:Manage Jenkins—>Manage and Assign Roles—>Manage Roles
新增用户:Manage Jenkins —>Security—>Manage Users—>新建用户
给新增的角色赋予权限:Manage Jenkins —> >Manage and Assign Roles—>Assign Roles
凭证用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便Jenkins可以和这些第三方的应用进行交互
安装Credentials Binding插件
安装Git插件(可查看相关安装教程)
安装Git工具(可查看相关安装教程,此处直接使用Gitee,不需要安装)
Manage Jenkins—>Manage Credentials—>全局凭据—>添加凭据–>选择密文类型(是采用账号密码登录代码托管工具,还是采用ssh用户名和私钥,或者密钥文件等)
Gitee代码托管工具
项目–>配置–>源码管理:配置代码URL
类型二:采用ssh密钥类型:
步骤一:生成公钥和私钥
$ ssh-keygen -t rsa
步骤二:把生成的公钥放在代码托管工具中(以Gitee为例),私钥复制进Manage Jenkins—>Manage Credentials—>全局凭据–>添加凭据–>ssh username with private key
查看公钥:
$ cat ~/.ssh/id_rsa.pub
查看私钥:
$ cat ~/.ssh/id_rsa
项目–>配置–>源码管理:配置代码URL(此处应该为Gitee上的Project的ssh地址)
在Jenkins集成服务器上,安装Maven来编译和打包项目
步骤一:安装Maven,上传Maven软件到Jenkins服务器上
$ tar -xzf apache-maven-3.6.2-bin.tar.gz
$ mkdir -p /opt/maven
$ mv apache-maven-3.6.2/*/opt/maven
步骤二:配置环境变量
$ vi /etc/profile
export JAVA_HOME = /usr/lib/jvm/jana-1.8.0-openjdk
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
配置生效和查看Maven版本
$ source /etc/profile
$ mvn -v
步骤三:全局工具配置关联JDK和Maven
Jenkins—>Manage Jenkins—>Global Tool Configuration—>JDK—>新增JDK
Jenkins—>Manage Jenkins—>Global Tool Configuration—>Maven—>新增Maven
Jenkins—>Manage Jenkins—>Configure System—>Global Properties 添加三个全局变量:JAVA_HOME、M2_HOME、PATH+EXTRA
步骤四:修改Maven的settings.xml
$ mkdir /root/repo
$ vi /opt/maven/conf/settings.xml
本地仓库改为:/root/repo/
添加阿里云私服地址:
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
步骤五:测试Maven是否配置成功
测试项目—>配置—>构建---->增加构建步骤---->Execute Shell 输入mvn命令(如:mvn clean package 先清空,再打包)—>点击Build now
步骤一:安装Tomcat(可查看相关安装教程)
步骤二:配置
修改Tomcat的用户,添加用户及权限
vi /opt/tomcat/conf/tomcat-users.xml
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script,tomcat,admin-gui,admin-script"/>
</tomcat-users>
用户和密码都是:tomcat
修改下列配置:
$ vi /opt/tomcat/webapps/manager/META-INF/context.xml
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
步骤三:重启Tomcat,访问测试
$ /opt/tomcat/bin/shutdown.sh
$ /opt/tomcat/bin/startup.sh
步骤一:新建FreeStyle Project—>配置源码管理
步骤二:Build Now(拉取代码)
步骤三:构建—>添加构建步骤—>Executor Shell (编译打包,此处使用的mvn命令,也可根据项目使用其他命令)
echo "开始编译打包"
mvn clean package
echo "编译打包结束"
步骤四:部署 把项目部署到远程的Tomcat里面
安装Deploy to container 插件,Jenkins本身无法实现远程部署到Tomcat的更能,需要安装Deploy to container插件实现
项目---->配置---->构建后操作—>Deploy war/ear to a container—>以下图示配置
刷新Tomcat服务器,查看项目是否已经部署到tomcat上:192.168.66.102:8080/manager/html (tomcat服务器部署地址:端口号/manager/html)
步骤一:安装 Maven Integration 插件,创建Maven项目,进行配置(配置和自由风格配置基本一样,唯一不同的是在构建处,Maven配置的是pom.xml文件,而自由风格配置的是shell脚本(更灵活,不仅可以配置Maven脚本,还可以配置其它脚本)
Maven构建配置:
frreeStyle构建配置:
Pipeline:一套由Groovy语言实现的运行在Jenkins上的工作流框架(支持Declarative声明式语法和Scripted Pipeline脚本式语法),将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作,具有持久(无论是计划内还是计划外的服务器重启,Pipeline都是可恢复的)、可停止(可接收交互式输入,判断是否继续执行)、多功能(支持复杂的持续交互要求,支持fork/join、循环执行、并行执行任务的功能),和可扩展(集成各种功能的插件)等优点
创建Jenkins Pipeline:
方法一:直接通过Jenkins界面编写Pipeline代码
步骤一:安装Pipeline插件 Manage Jenkins---->Manage Plugins—>可选插件—>Pipeline,创建一个流水(Pipeline)项目,进行配置(与其它两种风格不一样的是,构建以及构建后的配置都变成了一个流水线配置)
声明式语法:
对Pipline脚本脚本不熟悉,可以使用流水线脚本帮助编写出脚本:
点击 Build Now
方法二:通过创建一个Jenkinsfile脚本文件放入项目源码库中(推荐在Jenkins中直接从源代码控制(SVM)中直接载入Jenkinsfile Pipeline)
触发远程构建
步骤一:设置身份验证令牌,复制:job/web_demo_pipeline/build?token=6666
步骤二:访问http://localhost:1010/job/web_demo_pipeline/build?token=6666 ,访问界面空白,但是已经触发构建
其他工程构建后触发(Build after other projects are build)
步骤一:创建pre_job流水线工程
步骤二:配置需要构建的工程 web_demo_pipeline
步骤三:构建pre_job,构建之后,将会触发需要构建的工程 web_demo_pipeline
定时构建(Build periodically)
定时字符串从左网友分别为:分 时 日 月 周
一些定时表达式的例子: 每30分钟构建一次:H代表形参 H/30 * * * * eg: 10:02 10:32 每2个小时构建一次:H H/2 * * * 每天的8点,12点,22点,一天构建3次(多个时间点中间用逗号隔开):0 8,12,22 * * * 每天中午12点定时构建一次:H 12 * * * 每天下午18点定时构建一次:H 18 * * * 在每个小时的前半个小时内的每10分钟:H(0-29)10 * * * * 每两小时一次,每个工作日上午9点到下午5点(也许是上午10:38,下午12:38,下午2:38,下午4:38 H H(9-16)/2 * * 1-5 |
---|
轮询SCM(Poll SCM) :定时扫描本地代码仓库的代码是否有变更,如果代码有变更就出发项目构建,需要Jenkins扫描本地整个项目的代码,增大系统开销,不建议使用。可以使用另一种更好的方案:利用Gitee或Gitlab的wehook(钩子)实现代码push到仓库,立即触发项目自动构建
步骤一:安装插件(随着代码存放仓库不一样) Gitlab Hook 和 GitLab
安装成功后,在项目—>配置---->构建触发器中 会多出一种构建方案—>选择该方案,点击保存
步骤二:开启Gitlab的webhook功能,并配置Wehook地址
Gitlab---->settings—>Network—>Outbound requests—>选择 ‘Allow requests to the local network from web hooks and services’,点击 保存
Gitlab—>具体项目---->settings---->Integrations----->将webHook地址填写进URL,选择相应的触发条件---->点击 Add webhook
步骤三:配置Jenkin认证:Jenkins---->Manage Jenkins—>Configure System—>使用统计,取消勾选‘ Enable authentication for ‘/prohect’ end-point ’,点击 删除,应用/保存
步骤四:代码提交到Gitlab上,触发了Jenkins构建
可通过 Manage Jenkins---->Configure System—>Content Token Reference查看Jenkins内部默认可调用的参数
步骤一:具体项目—>添加相关参数
添加后,项目左侧会出现一个:Build with Parameters
步骤一:安装Email Extension插件
步骤二:Jenkins设置邮箱相关参数 Manage Jenkins ----> Configure System
登录邮箱,开启相应邮箱的客户端授权码,设置Jenkins中邮箱参数(以新浪邮箱为例)
步骤三:准备邮件内容,编写Jenkinsfile添加构建后发送邮件
SonarQube是一款用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误。目前支持java,C,C#,C++,Python,PL/SQL,Cobol,JavaScript,Groovy等二十几种编程语言的代码质量管理和检测。官网:https://www.sonarqube.org/
环境要求:JDK1.8 MySQL5.7 SonarQube6.7.4
Manage Jenkins—>Global Tool Configuration下添加JDK1.8
步骤一:在MySQL创建sonar数据库,下载sonar压缩包:https://www/sonarqube.org/downloads/
解压sonar压缩包,并设置权限
yum install unzip
unzip sonarqube-6.7.4 解压
mkdir /opt/sonar 创建目录
mv sonarqube-6.7.4/* /opt/sonar
useradd sonar 创建sonar用户,必须sonar用于启动,否则报错
chown -R sonar./opt/sonar 更改sonar目录及文件权限
修改配置文件
vi /opt/sonarqube-6.7.4/conf/sonar.properties
sonar.jdbc.username=root
sonar.jdbc.password=Root@123
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?userUnicode=true@characterEncoding=utf8&rewriteBatchedStatements=true&useConfig=maxPerformance&useSSL=false
注意:sonar默认监听9000端口,如果9000端口被占用,需要更改
启动sonar
cd /opt/sonarqube-6.7.4
su sonar ./bin/linux-x86-64/sonar.sh start 启动
su sonar ./bin/linux-x86-64/sonar.sh status 查看状态
su sonar ./bin/linux-x86-64/sonar.sh stop 停止
tail -f logs/sonar.logs 查看日志
访问sonar
http://192.168.66.101:9000 默认账户:admin/admin
步骤一:安装SonarQube Scanner插件
步骤二:添加SonarQube凭证 Manage Jenkins ----> Global Tool Configuration---->SonarQube Scanner
步骤三: Manage Jenkins—>Configure System—>SonarQube servers
步骤一:添加构建
步骤二:查看审查报告
准备脚本,push脚本后,Jenkins进行Build,查看审查报告
大致流程:
1、开发人员每天把代码提交到Gitlab代码仓库
2、Jenkins从Gitlab中拉去项目源码,编译并打包成jar包,然后构建成Docker镜像,将镜像上传到Harbor私有仓库
3、Jenkins发送SSH远程命令,让生产部署服务器到Harbor私有仓库拉去镜像到本地,然后创建容器
4、最后,用户可以访问到容器