

## 什么是jenkins

Jenkins 是一个用 Java 编写的开源自动化工具，带有用于持续集成的插件。Jenkins 用于持续构建和测试您的软件项目，从而使开发人员更容易将更改集成到项目中，并使用户更容易获得新的构建。它还允许您通过与大量测试和部署技术集成来持续交付软件。
借助 Jenkins，组织可以通过自动化来加速软件开发过程。Jenkins 集成了各种开发生命周期过程，包括构建、文档、测试、打包、模拟、部署、静态分析等等。JavaEE项目部署方式对比

Jenkins是一款开源 CI&CD 软件，用于自动化各种任务，包括构建、测试和部署软件。

Jenkins 支持各种运行方式，可通过系统包、Docker 或者通过一个独立的 Java 程序。

jdk环境，Jenkins是java语言开发的，因需要jdk环境。

maven客户端，因一般java程序是由maven工程，需要maven打包

[Maven是什么？ Maven的概念+作用+仓库的介绍+常用命令 - 腾讯云开发者社区-腾讯云 (tencent.com)](https://cloud.tencent.com/developer/article/1705945)

git/svn客户端，因一般代码是放在git/svn服务器上的，我们需要拉取代码。

### 安装

需要jdk的依赖（下载rpm包安装），可以选择去阿里源下载Jenkins的rpm包，官网选择lts版本（稳定版），2.289版本

rpm包内部会有一个tomcat的服务器不用另外安装，但是官网的war包需要

2.332--jdk8   后面版本需要jdk11或17

![image-20230404092338089](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/image-20230404092338089.png)

　**1.Configure System (系统设置)**

**2.Configure Global Security (全局安全配置)**

配置用户相关的权限

　　**3.Global Tool Configuration (全局工具配置 )**

　**4.配置必要插件**



## Jenkins自带环境变量

- **BRANCH_NAME**
  对于多分支项目，这将被设置为正在构建的分支的名称，例如，如果您希望从master部署到生产环境而不是从feature分支部署；如果对应某种更改请求，则该名称通常是任意的（请参阅下面的CHANGE_ID和CHANGE_TARGET）；

​     。**JOB_NAME**
即此版本的项目名称，例如“foo”或“foo / bar”

- **NODE_NAME**
  如果构建在代理上，则代理的名称; 如果在主版本上运行，则为“MASTER”；
- **GIT_BRANCH**
  远程分支名称，如果有的话。
- **GIT_LOCAL_BRANCH**
  本地分支名称，如果有的话。
- **GIT_URL**
  远程git仓库的URL。如果有多个，将会是GIT_URL_1，GIT_URL_2等。
- 。。。。。。。。。。。。。

## 部署方式

#### 手动部署：

![](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/202205031808975.png)

#### 自动化部署：

“自动化”的具体体现：向版本库提交新的代码后，应用服务器上自动部署，用户 或测试人员使用的马上就是最新的应用程序。

![](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/202205031808423.png)





## 基本架构

jenkins+git+gitlab+kubernetes+docker+nginx

![微信图片_20230403172349](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20230403172349.png)



jenkins+git+gitlab+kubernetes+docker+nginx+ansible

![微信图片_20230403172352](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20230403172352.png)



## 自动化测试

![image-20230403175459922](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/image-20230403175459922.png)

### Jenkins Pipeline

Jenkins Pipeline（或简称为 "Pipeline"）是一套插件，将持续交付的实现和实施集成到 Jenkins 中。

enkins Pipeline 提供了一套可扩展的工具，用于将“简单到复杂”的交付流程实现为“持续交付即代码”。Jenkins Pipeline 的定义通常被写入到一个文本文件（称为 `Jenkinsfile` ）中，该文件可以被放入项目的源代码控制库中。

1. 将[以下示例](https://www.jenkins.io/zh/doc/pipeline/tour/hello-world/#examples) 复制到您的仓库中并命名为 `Jenkinsfile`
2. 单击Jenkins中的 **New Item** 菜单 ![Classic UI left column](https://www.jenkins.io/zh/doc/book/resources/pipeline/classic-ui-left-column.png)
3. 为您的新工程起一个名字 (例如 **My Pipeline**) ，选择 **Multibranch Pipeline**
4. 单击 **Add Source** 按钮，选择您想要使用的仓库类型并填写详细信息.
5. 单击 **Save** 按钮，观察您的第一个Pipeline运行！

您可能需要修改 `Jenkinsfile` 以便应用在您自己的项目中。尝试修改 `sh` 命令，使其与您本地运行的命令相同。

在配置好 Pipeline 之后，Jenkins 会自动检测您仓库中创建的任何新的分支或合并请求， 并开始为它们运行 Pipelines。

### Java

Jenkinsfile (Declarative Pipeline)

```groovy
pipeline {
    agent { docker 'maven:3.3.3' }
    stages {
        stage('build') {
            steps {
                sh 'mvn --version'
            }
        }
    }
}
```

### Python

Jenkinsfile (Declarative Pipeline)

```groovy
pipeline {
    agent { docker 'python:3.5.1' }
    stages {
        stage('build') {
            steps {
                sh 'python --version'
            }
        }
    }
}
```