Jenkins 持续集成环境构建四(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)

116 篇文章 17 订阅
94 篇文章 9 订阅


1. Jenkins 项目构建类型

Jenkins 中自动构建项目的类型有很多,常用的有以下三种:

  • 自由风格软件项目(FreeStyle Project)
  • Maven 项目(Maven Project)
  • 流水线项目(Pipeline Project)

每种类型的构建其实都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别,在实际开发中可以根据自己的需求和习惯来选择。(PS:个人推荐使用流水线类型,因为灵活度非常高

2. 自由风格项目构建

创建一个自由风格项目来完成项目的集成过程:

拉取代码 -》编译 -》打包 -》部署

2.1 拉取代码

创建项目
在这里插入图片描述

2.2 配置源码管理

使用 ssh 方式从 gitlab 拉取代码,配置完成后,点击应用并保存。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 编译打包

构建 -> 添加构建步骤 -> Executor Shell,设置完成后,点击应用并保存

echo "开始编译和打包" 
mvn clean package 
echo "编译和打包结束"

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4 把项目部署到远程的 Tomcat 里面

安装 Deploy to container 插件
Jenkins 本身无法实现远程部署到 Tomcat 的功能,需要安装 Deploy to container 插件实现

在这里插入图片描述
添加 Tomcat 用户凭证
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

添加构建后操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击已发布的项目可以查看运行结果。

2.5 部署成功后,访问项目

http://192.168.10.40:8080/web_demo/

2.6 演示改动代码后的持续集成

(1) IDEA 中源码修改并提交到 gitlab

在这里插入图片描述
选中目录
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2) 在 Jenkins 中重新构建项目

在这里插入图片描述
在这里插入图片描述

(3) 访问 Tomcat

http://192.168.10.40:8080/web_demo/

在这里插入图片描述

2. Maven 项目构建

2.1 安装 Maven Integration 插件

在这里插入图片描述
这个插件安装需要一些时间,如果需要你更新 Jenkins 版本的会有提示信息

2.2 创建 Maven 项目

在这里插入图片描述

2.3 配置项目

拉取代码和远程部署的过程和自由风格项目一样,只是 构建 部分不同

修改代码
在这里插入图片描述
中间提交代码步骤省略
在这里插入图片描述

重新构建配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
访问:http://192.168.10.40:8080
在这里插入图片描述

3. Pipeline 流水线项目构建

3.1 Pipeline 简介

(1) 概念

  Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。

(2) 使用 Pipeline 的好处

  • 代码:Pipeline 以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其传送流程。
  • 持久:无论是计划内的还是计划外的服务器重启,Pipeline 都是可恢复的。
  • 可停止:Pipeline 可接收交互式输入,以确定是否继续执行 Pipeline。
  • 多功能:Pipeline 支持现实世界中复杂的持续交付要求。它支持 fork/join、循环执行、并行执行任务的功能。
  • 可扩展:Pipeline 插件支持其 DSL 的自定义扩展 ,以及与其他插件集成的多个选项。

(3) 如何创建 Jenkins Pipeline

  • Pipeline 脚本是由 Groovy 语言实现的,但是我们没必要单独去学习 Groovy。
  • Pipeline 支持两种语法:Declarative(声明式) 和 Scripted Pipeline(脚本式) 语法。
  • Pipeline 也有两种创建方法:可以直接在 Jenkins 的 Web UI 界面中输入脚本;也可以通过创建一个 Jenkinsfile 脚本文件放入项目源码库中(一般我们都推荐在 Jenkins 中直接从源代码控制 SCM 中直接载入 Jenkinsfile Pipeline 这种方法)。

3.2 安装 Pipeline 插件

Manage Jenkins -> Manage Plugins -> 可选插件
在这里插入图片描述
安装完重启,中间的报错忽略

安装插件后,创建项目的时候多了 “流水线” 类型。

在这里插入图片描述

3.3 Pipeline 语法快速入门

(1) Declarative 声明式 Pipeline

创建项目
在这里插入图片描述

流水线 -> 选择 HelloWorld 模板
在这里插入图片描述
生成模板如下,仅作示例

pipeline {
    agent any

    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'
            }
        }
    }
}
  • stages:代表整个流水线的所有执行阶段。通常 stages 只有 1 个,里面包含多个 stage。
  • stage:代表流水线中的某个阶段,可能出现 n 个。一般分为拉取代码,编译构建,部署等阶段。
  • steps:代表一个阶段内需要执行的逻辑。steps 里面是 shell 脚本,git 拉取代码,ssh 远程发布等任意内容。

编写一个简单声明式 Pipeline

pipeline {
    agent any

    stages {
        stage('拉取代码') {
            steps {
                echo '拉取代码'
            }
        }
        
        stage('编译构建') {
            steps {
                echo '编译构建'
            }
        }
        
        stage('项目部署') {
            steps {
                echo '项目部署'
            }
        }
    }
}

点击构建,可以看到整个构建过程
在这里插入图片描述
在这里插入图片描述

(2) Scripted Pipeline 脚本式 Pipeline

继续返回配置,这次选择 Scripted Pipeline
在这里插入图片描述
脚本示例

node {
    def mvnHome
    stage('Preparation') { // for display purposes
        // Get some code from a GitHub repository
        git 'https://github.com/jglick/simple-maven-project-with-tests.git'
        // Get the Maven tool.
        // ** NOTE: This 'M3' Maven tool must be configured
        // **       in the global configuration.
        mvnHome = tool 'M3'
    }
    stage('Build') {
        // Run the maven build
        withEnv(["MVN_HOME=$mvnHome"]) {
            if (isUnix()) {
                sh '"$MVN_HOME/bin/mvn" -Dmaven.test.failure.ignore clean package'
            } else {
                bat(/"%MVN_HOME%\bin\mvn" -Dmaven.test.failure.ignore clean package/)
            }
        }
    }
    stage('Results') {
        junit '**/target/surefire-reports/TEST-*.xml'
        archiveArtifacts 'target/*.jar'
    }
}
  • 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 命令一样。

编写一个简单的脚本式 Pipeline

node {
    def mvnHome
    stage('pull code') { 
        echo 'pull code'
    }
    stage('build project') {
        echo 'build project'
    }
    stage('publish project') {
        echo 'publish project'
    }
}

构建查看结果
在这里插入图片描述

3.4 声明式代码生成

正常生产环境声明式使用较多
在这里插入图片描述
在这里插入图片描述
一些参数还是要自己写的,例如:用户、密码、路径等等。
在这里插入图片描述

(1) 拉取代码示例

在这里插入图片描述
在这里插入图片描述
将生产的脚本复制到项目配置的流水线脚本中。
在这里插入图片描述
修改后如下:

pipeline {
    agent any

    stages {
        stage('pull code') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '87946319-4d01-457e-b308-1639491e20e6', url: 'git@192.168.10.20:test-group/web_demo.git']]])
            }
        }
        stage('build project') {
            steps {
                echo "build project"
            }
        }
        stage('deploy item') {
            steps {
                echo "deploy item"
            }
        }
    }
}

构建和发布两步先略过,这里只拉取代码到 Jenkins 服务器。

应用保存后构建查看结果
在这里插入图片描述
代码已经拉取到本地。
在这里插入图片描述

(2) 构建示例

在这里插入图片描述
流水线脚本模板

pipeline {
    agent any

    stages {
        stage('pull code') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '87946319-4d01-457e-b308-1639491e20e6', url: 'git@192.168.10.20:test-group/web_demo.git']]])
            }
        }
        stage('build project') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('deploy item') {
            steps {
                echo "deploy item"
            }
        }
    }
}

再次构建查看结果
在这里插入图片描述
现在我们只剩下最后的代码发布。

(3) 代码发布示例

在这里插入图片描述
流水线脚本

pipeline {
    agent any

    stages {
        stage('pull code') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '87946319-4d01-457e-b308-1639491e20e6', url: 'git@192.168.10.20:test-group/web_demo.git']]])
            }
        }
        stage('build project') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('deploy item') {
            steps {
                deploy adapters: [tomcat8(credentialsId: '0125416d-3d7d-4d0c-9877-f22bbd02cf41', path: '', url: 'http://192.168.10.40:8080/')], contextPath: null, war: 'target/*.war'
            }
        }
    }
}

修改下源代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

构建结果在这里插入图片描述

访问:http://192.168.10.40:8080/web_demo
在这里插入图片描述

3.5 Pipeline Script from SCM

刚才我们都是直接在 Jenkins 的 UI 界面编写 Pipeline 代码,这样不方便脚本维护,脚本容易丢失,建议把 Pipeline 脚本放在项目中(一起进行版本控制)。

(1) 创建 Jenkinsfile 文件

在项目根目录建立 Jenkinsfile 文件,把内容复制到该文件中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查看是否提交成功
在这里插入图片描述

(2) 重新配置 web_demo_pipeline 项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我们修改一下源代码,解决 Tomcat 中文乱码问题

<%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="UTF-8" %>
<html>
<body>
<h2>welcome devops world!</h2>
<h2>SCM 方式构建</h2>
</body>
</html>

提交 index.jsp 文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

重新构建查看结果
在这里插入图片描述
在这里插入图片描述

访问:http://192.168.10.40:8080/web_demo/

在这里插入图片描述

(3) 注意事项

有时候构建 SCM 项目报错,可以从以下几个角度思考问题:

  • 插件安装是否完备。
  • Jenkins 版本是否太老旧(例如老版本的 Jenkins 支持不到 Tomcat8.0)。
  • Jenkinsfile 文件是否生效,在 IDEA 里面表现就是代码是否有颜色,如果没有颜色代表没有生效,需要删除重建。推荐使用流水线脚本生代码生成器,避免出错。
  • 相关的认证凭据是否创建正确(HTTP / SSH / Tomcat)。
  • IDEA 创建的项目是否格式正确(例如 Maven 格式创建 WEBAPP 项目)。

Jenkins 前四章安装的所有插件:

> Git --- Jenkins 本身不具备从 Gitlab 拉取代码的能力,需要借助插件(服务器上也需要安装yum)> Deploy to container --- Jenkins 本身无法实现远程部署到 Tomcat 的功能。
Role-Based Strategy --- 管理 Jenkins 用户权限。
Credentials Binding --- 凭证管理功能。
Maven Integration --- 构建 Maven 项目需要的插件。
> Pipeline --- 构建流水线项目需要的插件。
Chinese --- 中文汉化插件。

">" 标记的就是创建流水线 pipeline 项目需要的插件。

Jenkins 安装完成必要操作:

  • 升级最新版本
  • 修改插件下载地址为国内地址

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值