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

目录

  • 一,Jenkins 项目构建类型
  • 二,自由风格项目构建
    • 2.1 拉取代码
    • 2.2配置源码管理
    • 2.3 编译打包
    • 2.4 把项目部署到远程的 Tomcat 里面
    • 2.5 部署成功后,访问项目
    • 2.6 演示改动代码后的持续集成
  • 三, Maven 项目构建
    • 3.1 安装 Maven Integration 插件
    • 3.2创建 Maven 项目
    • 3.3配置项目
  • 四,Pipeline 流水线项目构建
    • 4.1 Pipeline 简介
    • 4.2 安装 Pipeline 插件
    • 4.3 Pipeline 语法快速入门
    • 4.4 声明式代码生成
    • 4.5 Pipeline Script from SCM

一,Jenkins 项目构建类型

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

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

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

二,自由风格项目构建

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

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

2.1 拉取代码

创建项目
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第1张图片

2.2配置源码管理

使用 ssh 方式从 gitlab 拉取代码,配置完成后,点击应用并保存。
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第2张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第3张图片
请添加图片描述

2.3 编译打包

构建 -> 添加构建步骤 -> Executor Shell,设置完成后,点击应用并保存
echo "开始编译和打包" 
mvn clean package 
echo "编译和打包结束"

Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第4张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第5张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第6张图片

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

安装 Deploy to container 插件
Jenkins 本身无法实现远程部署到 Tomcat 的功能,需要安装 Deploy to container 插件实现Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第7张图片
添加 Tomcat 用户凭证
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第8张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第9张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第10张图片
添加构建后操作
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第11张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第12张图片
请添加图片描述

Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第13张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第14张图片
点击已发布的项目可以查看运行结果。

2.5 部署成功后,访问项目

http://192.168.10.40:8080/web_demo/

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

(1) IDEA 中源码修改并提交到 gitlab
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第15张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第16张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第17张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第18张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第19张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第20张图片
请添加图片描述
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第21张图片
(2) 在 Jenkins 中重新构建项目
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第22张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第23张图片
(3) 访问 Tomcat
http://192.168.10.40:8080/web_demo/
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第24张图片

三, Maven 项目构建

3.1 安装 Maven Integration 插件

Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第25张图片
这个插件安装需要一些时间,如果需要你更新 Jenkins 版本的会有提示信息

3.2创建 Maven 项目

Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第26张图片

3.3配置项目

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

修改代码Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第27张图片
中间提交代码步骤省略Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第28张图片
重新构建配置
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第29张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第30张图片
请添加图片描述
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第31张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第32张图片
访问:http://192.168.10.40:8080
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第33张图片

四,Pipeline 流水线项目构建

4.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 这种方法)。

4.2 安装 Pipeline 插件

Manage Jenkins -> Manage Plugins -> 可选插件
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第34张图片
安装完重启,中间的报错忽略

安装插件后,创建项目的时候多了 “流水线” 类型。
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第35张图片

4.3 Pipeline 语法快速入门

(1) Declarative 声明式 Pipeline
创建项目
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第36张图片
流水线 -> 选择 HelloWorld 模板
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第37张图片
生成模板如下,仅作示例

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 '项目部署'
            }
        }
    }
}

点击构建,可以看到整个构建过程
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第38张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第39张图片
(2) Scripted Pipeline 脚本式 Pipeline
继续返回配置,这次选择 Scripted Pipeline
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第40张图片
脚本示例

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'
    }
}

构建查看结果
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第41张图片

4.4 声明式代码生成

正常生产环境声明式使用较多
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第42张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第43张图片
一些参数还是要自己写的,例如:用户、密码、路径等等。
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第44张图片
(1) 拉取代码示例
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第45张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第46张图片
将生产的脚本复制到项目配置的流水线脚本中。
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第47张图片
修改后如下:

pipeline {
    agent any

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

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

应用保存后构建查看结果
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第48张图片
代码已经拉取到本地。
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第49张图片
(2) 构建示例
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第50张图片
流水线脚本模板

pipeline {
    agent any

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

再次构建查看结果
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第51张图片
现在我们只剩下最后的代码发布。

(3) 代码发布示例
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第52张图片
流水线脚本

pipeline {
    agent any

    stages {
        stage('pull code') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '87946319-4d01-457e-b308-1639491e20e6', url: '[email protected]: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'
            }
        }
    }
}

修改下源代码Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第53张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第54张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第55张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第56张图片
请添加图片描述
请添加图片描述
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第57张图片
访问:http://192.168.10.40:8080/web_demo
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第58张图片

4.5 Pipeline Script from SCM

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

(1) 创建 Jenkinsfile 文件
在项目根目录建立 Jenkinsfile 文件,把内容复制到该文件中
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第59张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第60张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第61张图片
请添加图片描述
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第62张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第63张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第64张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第65张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第66张图片
请添加图片描述
查看是否提交成功
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第67张图片
(2) 重新配置 web_demo_pipeline 项目Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第68张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第69张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第70张图片
我们修改一下源代码,解决 Tomcat 中文乱码问题

<%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="UTF-8" %>


welcome devops world!

SCM 方式构建

提交 index.jsp 文件
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第71张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第72张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第73张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第74张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第75张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第76张图片
重新构建查看结果
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第77张图片
Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第78张图片
访问:http://192.168.10.40:8080/web_demo/Jenkins 持续集成环境构建五(Jenkins 不同项目构建类型:自由风格、Maven、Pipeline)_第79张图片
(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 安装完成必要操作:

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

你可能感兴趣的:(持续集成,jenkins,ci)