Jenkins项目构建类型(纯小白使用教程3)
文章目录
Jenkins构建的项目类型介绍
Jenkins中自动构建项目的类型有很多,常用的有以下三种:
-
自由风格软件项目(FreeStyle Project)
-
Maven项目(Maven Project)
-
流水线项目(Pipeline Project)
每种类型的构建其实都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别,在实际开发中可以根据自己的需求和习惯来选择。(PS:个人推荐使用流水线类型,因为灵活度非常高)
自由风格项目构建
拉取代码->编译->打包->部署
- 新建项目web_demo_freestysle
- 配置源码管理,从gitlab拉取代码
- 构建->添加构建步骤->Executor Shell ps.这个自由风格的地方也可以使用gradle 使用
echo "开始编译和打包"
mvn clean package
echo "编译和打包结束"
远程发布
- 安装 Deploy to container插件
Jenkins本身无法实现远程部署到Tomcat的功能,需要安装Deploy to container插件实现 - 添加Tomcat用户凭证,选择Deploy to container
- 添加凭证,构建项目
- 服务器就会出现项目
- war部署整个过程就此结束
这样部署的好处是不需要太多基础知识就能部署,坏处就是配置太过于分散
Maven项目构建
- 安装Maven Integration插件,安装完成后点击新建项目就会又一个maven选择
- 最大的区别是这个地方,maven默认的地方是pom,其余地方都差不多
Pipeline流水线项目构建(重要的)
概念 :Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,
实现单个任务难以完成的复杂流程编排和可视化的工作。
-
好处:
- 代码: Pipeline以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其传送流程。
- 持久:无论是计划内的还是计划外的服务器重启,Pipeline都是可恢复的。
- 可停止:Pipeline可接收交互式输入,以确定是否继续执行Pipeline。
- 多功能:Pipeline支持现实世界中复杂的持续交付要求。它支持fork/join、循环执行,并行执行任务的功能。
- 可扩展:Pipeline插件支持其DSL的自定义扩展 ,以及与其他插件集成的多个选项。 -
如何创建 Jenkins Pipeline呢?
- Pipeline 脚本是由 Groovy 语言实现的,但是我们没必要单独去学习 Groovy
- Pipeline 支持两种语法: Declarative(声明式) 和 Scripted Pipeline(脚本式)语法
- Pipeline 也有两种创建方法:可以直接在 Jenkins 的 Web UI 界面中输入脚本;也可以通过创建一个 Jenkinsfile 脚本文件放入项目源码库中
(一般我们都推荐在 Jenkins 中直接从源代码控制(SCM)中直接载入 Jenkinsfile Pipeline 这种方法)。
安装Pipeline插件
- Manage Jenkins->Manage Plugins->可选插件
新建项目可以看到配置
学习下Pipeline语法
pipeline {
agent any
stages {
stage('pull code') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '秘钥ssh', url: 'git@/web-demo.git']]])
echo '拉取代码'
}
}
stage('package code') {
steps {
sh 'mvn clean package'
echo '打包代码'
}
}
stage('publish code') {
steps {
deploy adapters: [tomcat8(credentialsId: '秘钥账号密码', path: '', url: 'http://:8080/')], contextPath: null, war: 'target/*.war'
echo '上传代码'
}
}
}
}
Pipeline Script from SCM
刚才我们都是直接在Jenkins的UI界面编写Pipeline代码,这样不方便脚本维护,(如果Jenkins挂了就完了)建议把Pipeline脚本放在项目中(一起进
行版本控制)
- 在项目根目录建立Jenkinsfile文件,把内容复制到该文件中。(默认起名Jenkins,别整别的骚操作)
常用的构建触发器
Jenkins内置4种构建触发器:
- 触发远程构建
- 其他工程构建后触发(Build after other projects are build)
- 定时构建(Build periodically)
- 轮询SCM(Poll SCM)
触发远程构建
触发构建url:http://192.168.66.101:8888/job/web_demo_pipeline/build?token=6666
一般情况下,这个token是个加密字符串
其他工程构建后触发
- 创建pre_job流水线工程
- 配置需要触发的工程.在之前那个项目配置
- pre_job 构建完成之后,这个项目也会被构建
定时构建
定时字符串从左往右分别为: 分 时 日 月 周
每30分钟构建一次:H代表形参 H/30 * * * * 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
轮询SCM,是指定时扫描本地代码仓库的代码是否有变更,如果代码有变更就触发项目构建。
注意:这次构建触发器,Jenkins会定时扫描本地整个项目的代码,增大系统的开销,不建议使用。
Git hook自动触发构建(精华)
到在Jenkins的内置构建触发器中,轮询SCM可以实现Gitlab代码更新,项目自动构建,但是
该方案的性能不佳。那有没有更好的方案呢? 有的。就是利用Gitlab的webhook实现代码push到仓库,立即触发项目自动构建。
安装Gitlab Hook插件
需要安装 Gitlab Hook和GitLab 两个插件
新增点知识-安装内容,在安装hook的时候,Jenkins会告诉你这个问题,这个问题暂时没办法解决奥。可以换一种其他的方式保护一下
Jenkins设置自动构建
等会需要把生成的webhook URL配置到Gitlab中。
Gitlab配置webhook
- 开启webhook功能 ,使用root账户登录到后台,点击Admin Area -> Settings -> Network
勾选"Allow requests to the local network from web hooks and services"
在项目添加webhook
点击项目->Settings->Integrations
这里注意:以下设置必须完成,否则会报错!
路径: Manage Jenkins->Configure System
重新返回gitlab 点击上传,就可以看到Jenkins上构建
之后到idea编辑代码上传,就可以实现此功能了,有个问题啊,之前用的是root配置的项目,要切换成你在Jenkins配置的用户才能上传成功
Jenkins的参数化构建
有时在项目构建的过程中,我们需要根据用户的输入动态传入一些参数,从而影响整个构建结果,这时我们可以使用参数化构建。
有时候我们git上pull code不一定是master分支,所以这里需要动态修改
- 这个时候我们可以把构造触发器先取消掉,应用保存
- 选择参数化构建过程,添加参数
- 选择字符串参数
-
构建之后我们可以看到项目主页多了一个列表
-
修改项目中master,用动态el做替换
-
之后我们新增分支 V1
-
可以在gitlab上看到项目分支
-
v1分支启动
配置邮箱服务器发送构建结果
-
安装Email Extension插件
-
Jenkins设置邮箱相关参数
Manage Jenkins->Configure System