文章目录
- 一、Jenkins项目构建类型
- 二、自由风格项目构建
- 1. 创建项目
- 2. 编译打包
- 3. 部署
- 4. 演示改动代码后的持续集成
- 三、Maven项目构建
- 1. 安装 Maven Integration 插件
- 2. 创建Maven项目
- 3. 配置项目
- 4. 在 IDEA 中源码修改并提交到 gitlab
- 5. 构建并发布
- 四、Pipeline流水线项目构建
- 1.Pipeline简介
- 2.使用Pipeline的好处
- 3. 创建Pipeline项目方式
- 4.安装Pipeline插件
- 5. Declarative声明式
- 6. 使用声明式构建
- 7. Pipeline Script from SCM
一、Jenkins项目构建类型
- Jenkins中自动构建项目的类型有很多,常用的有以下三种:
自由风格软件项目(FreeStyle Project)
Maven项目(Maven Project)
流水线项目(Pipeline Project)
- 每种类型的构建其实都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别,在实际开发中可以根据自己的需求和习惯来选择。(PS:个人推荐使用流水线类型,因为灵活度非常高)
二、自由风格项目构建
下面演示创建一个自由风格项目来完成项目的集成过程: 拉取代码->编译->打包->部署
1. 创建项目
配置源码管理,使用ssh方式从gitlab拉取代码,配置完成后,点击应用并保存
2. 编译打包
构建->添加构建步骤->Executor Shell,设置完成后,点击应用并保存
echo "开始编译和打包"
mvn clean package
echo "编译和打包结束"
再次构建,可以看到结果成功
可以在target目录中查看到产生的war包
3. 部署
我们需要把项目部署到远程的Tomcat里面,需要安装 Deploy to container插件,因为 Jenkins 本身无法实现远程部署到Tomcat的功能,需要安装此插件来实现
- 增加构建后操作
先添加Tomcat用户凭证
然后添加构建后操作
开始构建
4. 演示改动代码后的持续集成
在 IDEA 中源码修改并提交到 gitlab
在gitlab上查看是否提交成功
访问Tomcat中项目,可以看到成功发布出去了
三、Maven项目构建
1. 安装 Maven Integration 插件
2. 创建Maven项目
3. 配置项目
拉取代码和远程部署的过程和自由风格项目一样,只是"构建"部分不同
4. 在 IDEA 中源码修改并提交到 gitlab
5. 构建并发布
四、Pipeline流水线项目构建
1.Pipeline简介
概念:
Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。
2.使用Pipeline的好处
代码:Pipeline以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其传送流程。
持久:无论是计划内的还是计划外的服务器重启,Pipeline都是可恢复的。
可停止:Pipeline可接收交互式输入,以确定是否继续执行Pipeline。
多功能:Pipeline支持现实世界中复杂的持续交付要求。它支持fork/join、循环执行,并行执行任务的功能。
可扩展:Pipeline插件支持其DSL的自定义扩展 ,以及与其他插件集成的多个选项。
3. 创建Pipeline项目方式
Pipeline 脚本是由 Groovy 语言实现的
- Groovy Pipeline 支持两种语法:
Declarative(声明式)
Scripted Pipeline(脚本式)
- Pipeline 也有两种创建方法:
① 直接在 Jenkins 的 Web UI 界面中输入脚本
② 通过创建一个 Jenkinsfile 脚本文件放入项目源码库中
一般我们都推荐在 Jenkins 中直接从源代码控制(SCM) 中直接载入 Jenkinsfile Pipeline 这种方法
4.安装Pipeline插件
Manage Jenkins->Manage Plugins->可选插件
5. Declarative声明式
创建项目
流水线->选择HelloWorld模板
stages:代表整个流水线的所有执行阶段。通常 stages 只有 1 个,里面包含多个 stage。
stage:代表流水线中的某个阶段,可能出现 n 个。一般分为拉取代码,编译构建,部署等阶段。
steps:代表一个阶段内需要执行的逻辑。steps 里面是 shell 脚本,git 拉取代码,ssh 远程发布等任意内容。
编写一个简单声明式 Pipeline
node {
def mvnHome
stage('pull code') {
echo 'pull code'
}
stage('Build project') {
echo 'built project'
}
stage('publish project') {
echo 'publish project'
}
}
拉取代码——编译构建——项目部署
Node:节点,一个 Node 就是一个 Jenkins 节点,Master 或者 Agent,是执行 Step的具体运行环境,后续讲到Jenkins的Master-Slave架构的时候用到。
Stage:阶段,一个 Pipeline 可以划分为若干个Stage,每个 Stage 代表一组操作,比如: Build、Test、Deploy,Stage 是一个逻辑分组的概念。
Step:步骤,Step 是最基本的操作单元,可以是打印一句话,也可以是构建一个 Docker 镜像, 由各类 Jenkins插件提供,比如命令:sh ‘make’,就相当于我们平时 shell 终端中执行 make 命令一样。
6. 使用声明式构建
拉取代码示例:
pipeline {
agent any
stages {
stage('pull code') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '1569d1b5-7568-4b58-abbf-63b70b624ada', url: 'git@192.168.8.20:gmy/web_demo.git']]])
}
}
}
}
整个过程的代码如下
pipeline {
agent any
stages {
stage('pull code') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'afaf7e66-9230-475a-a7fb-f33a2283067e', url: 'git@192.168.8.20:gmy/web_demo.git']]])
}
}
stage('built project') {
steps {
sh 'mvn clean package'
}
}
stage('publish') {
steps {
deploy adapters: [tomcat8(credentialsId: '2a09c577-79ca-4b5a-ad19-44c6708e42b9', path: '', url: 'http://192.168.8.18:8080/')], contextPath: '/', war: 'target/*.war'
}
}
}
}
7. Pipeline Script from SCM
由于在Jenkins的UI界面编写Pipeline代码不方便脚本维护,并且脚本容易丢失,所以可以把Pipeline脚本放在项目中(一起进行版本控制)
在项目根目录建立Jenkinsfile文件,把内容复制到该文件中
重新配置web_demo_pipeline项目
在 IDEA 中源码修改并提交到 gitlab
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8" %>