jenkins介绍,帮助你从安装到使用jenkins

Jenkins 概述

官网地址:https://www.jenkins.io/zh/

在这里插入图片描述

什么是 Jenkins

Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。它提供了一个易于使用的图形化界面,可以通过配置简单的任务来实现自动化构建和部署流程。Jenkins 可以与各种版本控制系统(如 Git、SVN)和构建工具(如 Maven、Gradle)集成,支持多种编程语言和平台。它还提供了丰富的插件生态系统,可以扩展其功能,以满足各种不同的自动化需求。通过使用 Jenkins,开发团队可以更高效地进行软件开发和交付,提高质量和稳定性。

Jenkins 的优点

Jenkins 作为一个持续集成工具,具有以下几个优点:

  • 自动化构建和部署:Jenkins 可以自动化执行构建、测试和部署任务,减少了人工操作的错误和工作量,提高了软件交付的速度和质量。
  • 可扩展性:Jenkins 拥有丰富的插件生态系统,可以根据需要选择和安装各种插件,扩展其功能,满足不同项目的需求。
  • 强大的集成能力:Jenkins 可以与各种版本控制系统、构建工具、测试框架和部署工具等集成,提供了灵活的配置选项,并支持多种编程语言和平台。
  • 可视化界面:Jenkins 提供了直观易用的图形化界面,使用户可以轻松配置和管理构建任务,查看构建结果和日志,以及监控构建状态。
  • 异常处理和报告:Jenkins 可以及时检测构建中的异常情况,如编译错误、测试失败等,提供详细的报告和日志,帮助开发团队快速定位和解决问题。
  • 分布式构建和部署:Jenkins 支持分布式构建和部署,可以将任务分发到多台计算机上并行执行,提高了效率和扩展性。
  • 社区支持和活跃度:Jenkins 是一个开源项目,拥有庞大的用户社区,有活跃的开发者和贡献者,能够及时解决问题、提供支持和更新。

总的来说,Jenkins 提供了一种可靠的、灵活的和可定制的持续集成解决方案,帮助开发团队实现自动化构建、测试和部署,提高开发效率、软件质量和交付速度。

Jenkins 的应用场景

Jenkins 的使用场景非常广泛,主要用于以下几个方面:

  • 持续集成和持续交付:Jenkins 可以自动化执行构建、测试和部署任务,实现持续集成和持续交付,帮助开发团队快速交付高质量的软件。
  • 自动化测试:Jenkins 可以与各种测试框架和工具集成,自动执行测试用例,生成测试报告,并及时反馈测试结果,帮助开发团队发现和解决问题。
  • 自动化部署:Jenkins 可以与各种部署工具和云平台集成,实现自动化部署和发布,帮助开发团队快速部署软件到不同环境,提高交付效率。
  • 任务调度和定时执行:Jenkins 提供了灵活的任务调度功能,可以定时执行各种任务,如定时构建、备份数据、定时清理等。
  • 构建和发布管理:Jenkins 可以管理和跟踪不同版本的构建和发布,提供了版本控制、构建历史、构建参数等功能,方便团队进行版本管理和回滚操作。
  • 监控和报警:Jenkins 可以监控构建和部署过程中的异常情况,如编译错误、测试失败等,及时发送报警通知,帮助开发团队快速响应和解决问题。
  • 多环境支持:Jenkins 支持在不同环境中执行构建和部署任务,如开发环境、测试环境、生产环境等,提供了灵活的配置选项,适应不同的部署需求。

总的来说,Jenkins 可以在软件开发和交付过程中的各个环节发挥作用,帮助团队实现持续集成、自动化测试、自动化部署等目标,提高开发效率、软件质量和交付速度。

安装 Jenkins

环境准备

第一次安装使用 Jenkins,您需要以下准备:

  • 机器要求:
    • 2 G 内存,建议大于 4G
    • 20 GB 的硬盘空间(用于 Jenkins 和 Docker 镜像)
  • 需要安装以下软件:
    • Java 8
    • docker

原生安装方式

  1. 下载 Jenkins
  2. 打开终端进入到下载目录
  3. 运行命令 java -jar jenkins.war --httpPort=8080. 其实就是一个项目,直接运行即可
  4. 打开浏览器进入链接 http://localhost:8080
  5. 按照说明完成安装

docker 安装

  1. 确保有 docker 环境
  2. 安装 jenkins
# 创建挂载目录
mkdir -p /var/jenkins_home
chmod 777 /var/jenkins_home

# 我们把jenkins目录挂载出来,方便我们的修改和查看使用
# 安装jenkinsci/blueocean
docker run \
  -u root \
  -d \
  -p 8080:8080 \
  -p 50000:50000 \
  -v /var/jenkins_home:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkinsci/blueocean
  1. 等待安装成功,打开浏览器访问ip地址:8000

在这里插入图片描述

  1. 查看登录密码,登录即可
# 方式一:docker 日志
docker logs -f 容器id
# 方式二:查看文件
cat /var/jenkins_home/secrets/initialAdminPassword

在这里插入图片描述

  1. 进入插件安装页面,安装推荐的所有插件即可!如果没有这个页面,说明安装有问题!
# 插件下载慢,加速问题解决
cd /var/jenkins_home/updates
#把 “ www.google.com ”  改成  “ http://www.baidu.com/ ”
#全局搜索 “ updates.jenkins-ci.org/download ” 替换成 mirrors.tuna.tsinghua.edu.cn/jenkins
sed -i 's/https:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json 

sed -i 's/https:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

在这里插入图片描述

  1. 插件安装完毕,注册登录账户

在这里插入图片描述

  1. 配置实例的地址

在这里插入图片描述

  1. 进入主页面

在这里插入图片描述

  1. 检查插件配置,比如我们要使用的 gitlab、docker、webhook 之类的!没有的话,需要勾选下载!所有插件都更新到最新版本

网络问题解决

Manage Plugins点击Advanced,把Update Site改为国内插件下载地址

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

重启 http://192.168.0.120:8080/restart

流水线工程示例:

pipeline {
    agent { docker 'maven:3.3.3' }
    stages {
        stage('build') {
            steps {
                sh 'mvn --version'
            }
        }
    }
}

Jenkins 基本指令

Jenkins Pipeline(或简称为 “Pipeline”)是一套插件,将持续交付的实现和实施集成到 Jenkins 中。

持续交付 Pipeline 自动化的表达了这样一种流程:将基于版本控制管理的软件持续的交付到您的用户和消费者手中。

Jenkins Pipeline 提供了一套可扩展的工具,用于将“简单到复杂”的交付流程实现为“持续交付即代码”。Jenkins Pipeline 的定义通常被写入到一个文本文件(称为 Jenkinsfile )中,该文件可以被放入项目的源代码控制库中。

Hello,Jenkins

pipeline {
    agent { docker 'maven:3.3.3'}
    stages {
        stage('Build') { 
            steps {
                // 具体的执行逻辑 shell mingling
                sh 'mvn -version'
            }
        }
    }
}

在这里插入图片描述

报错:说明 docker 插件没有下载好。

如果出现了错误,就会报错

在这里插入图片描述

修改为 any 的环境

// 最外层 pipeline
pipeline {
	// agent 环境
    agent any
    // 步骤集合
    stages {
    	// 分步骤
        stage('Build') { 
        	// 具体的步骤
            steps {
                // 具体的执行逻辑 shell mingling
                sh 'echo "hello,world"'
                sh '''
                    echo "hahahahahahha"
                    ls -ls
                '''
            }
        }
        
        	// 分步骤
        stage('Test') { 
        	// 具体的步骤
            steps {
                // 具体的执行逻辑 shell mingling
                sh 'echo "Test"'
            }
        }
        
        // 分步骤
        stage('deploy') { 
        	// 具体的步骤
            steps {
                // 具体的执行逻辑 shell mingling
                sh 'echo "部署"'
            }
        }
    }
}

在这里插入图片描述

超时,重试

pipeline {
    agent any
    stages {
        stage('Deploy') { 
            steps {
                // 重试,连续执行多次,如果不成功就停止了。
                retry(3){
                    // 测试脚本
                    sh './start.sh'
                }
                
                // 支付、回调...
                // timeout ,如果该命令超过我们预期的时间,就会自动终止。
                timeout(time: 3,unit: 'MINUTES'){
                	// 测试脚本
                    sh './health-check.sh'
                }
            }
        }
    }
}

钩子函数,生命周期的函数

pipeline 执行到某个步骤的时候,来做一些事情, post

pipeline {
    agent any
    stages {
        stage('Test') { 
            steps {
         		sh 'echo "fail!"'
            }
        }
    }
    // 钩子函数,比如执行结果不同,我们可以处理一些善后工作
    post {
    	// 行为
    	always {
    		echo 'always'
    	}
    	success {
            echo 'success'
    	}
    	failure {
    		echo 'failure'
    	}
    	unstable {
    		echo 'failure'
    	}
    	changed {
    		echo 'failure'
    	}
    }
}

定义执行环境

您可能已经注意到每个示例中的 agent 指令。 agent 指令告诉 Jenkins 在哪里以及如何执行 Pipeline 或者 Pipeline 子集。 正如您所预料的,所有的Pipeline 都需要 agent 指令。

在执行引擎中,agent 指令会引起以下操作的执行:

  • 所有在块 block 中的步骤 steps 会被 Jenkins 保存在一个执行队列中。 一旦一个执行器 executor 是可以利用的,这些步骤将会开始执行。

  • 一个工作空间 workspace 将会被分配, 工作空间中会包含来自远程仓库的文件和一些用于 Pipeline 的工作文件

  • 工作目录

在这里插入图片描述

在 Pipeline 中可以很容易的运行 docker 镜像和容器。 Pipeline 可以定义命令或者应用运行需要的环境和工具, 不需要在执行代理中手动去配置各种各样的系统工具和依赖。 这种方式可以让你使用 docker 容器工具包中的任何工具。

pipeline{
    agent {docker xxxxx:@version}

    stages{  

        // 执行步骤
        dockerfile
        dockercompose
        shell
        其他程序相关的命令
        .....
    }
}
pipeline {
    agent {
        docker { image 'node:7-alpine' }
    }
    stages {
        stage('Test') {
            steps {
                sh 'node --version'
            }
        }
    }
}

在这里插入图片描述

如果是其他环境,就配置其他的运行镜像即可,默认any。

环境变量

公共的环境,在所有的 step 都可以使用

pipeline {
    agent any
    
    // 环境变量的定义,在agent环境中配置的东西
    environment{
    	DB_ENGINE = 'sqlite'
    	DB_PASSWORD='123456'
    }
    
    stages {
        stage('Build') {
            steps {
                sh 'printenv'
            }
        }
    }
}

很多命令都会有指令,使用环境变量,可以直接使用这里定义的。

多步骤

pipeline {
    agent any
    
    stages {
    	// 构建项目
        stage('Build') {
            steps {
            	// mvn  、Dockerfile、 构建相关工作
                sh 'Build'
            }
        }
        
        // 测试项目
        stage('Test') {
            steps {
            	// shell测试、web测试、压测。。。
                sh 'Test'
            }
        }
        
        // 部署
        stage('Deploy') {
        	// 访问、集群、liunx
            steps {
                sh 'Deploy'
            }
        }
    }
}

在这里插入图片描述

人工确认

通常在阶段之间,特别是不同环境阶段之间,您可能需要人工确认是否可以继续运行。 例如,判断应用程序是否在一个足够好的状态可以进入到生产环境阶段。 这可以使用 input 步骤完成。 在下面的例子中,“Sanity check” 阶段会等待人工确认,并且在没有人工确认的情况下不会继续执行。

pipeline {
    agent any
    stages {
  
        stage('Deploy - Staging') {
            steps {
                echo 'curl '
            }
        }

        stage('Sanity check') {
            steps {
            	// 人工确认
                input "Does the staging environment look ok?"
            }
        }

        stage('Deploy - Production') {
            steps {
               echo 'Deploy - Production'
            }
        }
    }
}

在这里插入图片描述

其余指令参考官方文档即可:https://www.jenkins.io/zh/doc/pipeline/tour/post/

所有不会写的语法,全部参照流水线工程里面的语法生成器。

在这里插入图片描述

WebHook

关闭防火墙,容器之间互通!systemctl stop firewalld

  1. 构建触发器,自动触发构建!有一个 webhook 触发器!

逻辑:提交代码后,jenkins 能够感知到代码提交了,流水线工程(项目打包,构建镜像,运行容器,测试接口,人工确认,部署上线)就自动执行

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

jenkins 就发出了一个触发器命令?gitlab 那边配置触发

gitlab 账户配置

在这里插入图片描述

项目中配置 webhook

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在 CICD 链上,部署、测试脚本都要提前写好,一次写好,终身运行。

示例:流水线作业

官方文档:https://www.jenkins.io/zh/doc/tutorials/build-a-java-app-with-maven/

  1. clone github 示例仓库到本地,然后 push 到我们的 gitlab 仓库中
git clone https://github.com/jenkins-docs/simple-java-maven-app.git

mv simple-java-maven-app simple-java-maven-app2

git clone http://192.168.0.120:8888/root/simple-java-maven-app.git

cp -r simple-java-maven-app2/* simple-java-maven-app/

git add .
git commit -m "add"
git push -u origin master
  1. 在 jenkins 创建流水线项目 simple-java-maven-app
  2. 配置绑定 git

在这里插入图片描述

在这里插入图片描述

  1. 添加 git 登录凭证

在这里插入图片描述

  1. 然后测试构建!
  2. docker maven 十分慢,我们需要配置镜像加速,我们可以自己定义 settings 文件,然后识别!
  • 编写一个 settings.xml 放到项目下
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <mirrors>
	<mirror>
      <id>nexus-aliyun</id>  
      <mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf>  
      <name>Nexus aliyun</name>  
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>  
    </mirror>
  </mirrors>
</settings>
  • 修改 Jenkinsfile,指定我们自己写的 settings.xml
pipeline {
    agent {
        docker {
            image 'maven:3-alpine'
            args '-v /root/.m2:/root/.m2'
        }
    }
    stages {
        stage('Build') {
        	# 在原来的基础上增加 -gs settings.xml 指定我们的配置
            steps {
                sh 'mvn -B -gs settings.xml -DskipTests clean package'
                
            }
        }
    }
}
  • 提交到远程,再次测试构建!
  1. 成功构建,如果出现未知主机,测试网络是否可以 ping 通,重启下 docker 一般可以解决!

在这里插入图片描述

真实企业中,道理类似的,一样提交代码后,自动构建并运行测试。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/485026.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

javaSSM游泳馆日常管理系统IDEA开发mysql数据库web结构计算机java编程maven项目

一、源码特点 IDEA开发SSM游泳馆日常管理系统是一套完善的完整企业内部系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;MAVEN方式加载&#xff0c;系统具有完整的源代码和…

Vue 3 里的 onMounted 怎么用?

疑问 最近&#xff0c;一直在学习 Vue 3&#xff0c;此前我不懂前端&#xff0c;也没写过 Vue 2&#xff0c;所以是从 0 开始学习 Vue 3 的。很多对普通人不是疑问的&#xff0c;在我这里也会不太清楚。 我在写项目的时候&#xff0c;常见的一种场景是这样的&#xff1a;页面…

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别 目录 分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别分类效果基本介绍模型描述程序设计参考…

基于SSM非遗视域下喀什旅游网站

ssm非遗视域下喀什旅游网站的设计与实现 摘要 我们的生活水平正在不断的提高&#xff0c;然而提高的一个重要的侧面表现就是更加注重我们的娱乐生活。旅行是我们都喜欢的一种娱乐方式&#xff0c;各式各样的旅行经历给我们带来的喜悦也是大不相同的。带来快乐的同时也因为其复…

IntelliJ IDE 插件开发 | (七)PSI 入门及实战(实现 MyBatis 插件的跳转功能)

系列文章 IntelliJ IDE 插件开发 |&#xff08;一&#xff09;快速入门IntelliJ IDE 插件开发 |&#xff08;二&#xff09;UI 界面与数据持久化IntelliJ IDE 插件开发 |&#xff08;三&#xff09;消息通知与事件监听IntelliJ IDE 插件开发 |&#xff08;四&#xff09;来查收…

MongoDB高可用架构涉及常用功能整理

MongoDB高可用架构涉及常用功能整理 1. mongo架构和相关组件1.1. Master-Slave主从模式1.2. Replica Set 副本集模式1.3. Sharding 分片模式 2. Sharding 分片模式2.1. Hashed Sharding方式2.2. Range Sharding方式 3. 事务性4. 疑问和思考4.1. 怎么保证数据的高可靠&#xff1…

常用中间件redis,kafka及其测试方法

常用消息中间件及其测试方法 一、中间件的使用场景引入中间件的目的一般有两个&#xff1a;1、提升性能常用的中间件&#xff1a;1) 高速缓存&#xff1a;redis2) 全文检索&#xff1a;ES3) 存日志&#xff1a;ELK架构4) 流量削峰&#xff1a;kafka 2、提升可用性产品架构中高可…

Web前端—浏览器渲染原理

浏览器渲染原理 浏览器渲染原理渲染时间点渲染流水线1. 解析HTML—Parse HTML2. 样式计算—Recalculate Style3. 布局—Layout4. 分层—Layer5. 绘制—Paint6. 分块—Tiling7. 光栅化—Raster8. 画—Draw完整过程 面试题1. 浏览器是如何渲染页面的&#xff1f;2. 什么是 reflow…

linux apt 速度慢 换源

Ubuntu 20.04.1 LTS已推出,一样的为期5年的服务,感觉不错,安装了一个,但是苦于使用默认源在国内下载太慢,就想着把apt源改为国内源,目前国内比较好的源,有阿里源,清华源,豆瓣源等,下面我以阿里源为例,说下如何修改。 也可以在中科大https://mirrors.ustc.edu.cn/查…

使用amd架构的计算机部署其他架构的虚拟机(如:arm)

1 下载quem模拟器 https://qemu.weilnetz.de/w64/2 QEMU UEFI固件文件下载(引导文件) 推荐使用&#xff1a;https://releases.linaro.org/components/kernel/uefi-linaro/latest/release/qemu64/QEMU_EFI.fd3 QEMU 安装 安装完成之后&#xff0c;需要将安装目录添加到环境变…

福昕阅读器 PDF 文档基本操作

福昕阅读器 PDF 文档基本操作 References 转至 PDF 顶部 快捷键&#xff1a;Home. 转至 PDF 顶部 快捷键&#xff1a;End. 打开超链接 文本选择工具 -> 手形工具 (Hand Tool) -> 点击超链接 福昕阅读器 同时在多个窗口中打开多个文件 文件 -> 偏好设置 -> 文…

数据库导入文件或者运行文件的时候报错误 #1046 - No database selected

如果我们在使用数据库导入文件的时候报错误 #1046 - No database selected该怎么解决 那么小编带我们可以从三个角度去观察 1、这种情况一般是因为你在数据库中没有这个数据库&#xff0c;你新建一个你要导入的数据库名字的数据库&#xff0c;然后选中该数据库&#xff0c;再进…

设计模式-初步认识

目录 &#x1f6fb;1.什么是设计模式 &#x1f69a;2.设计模式的优点 &#x1f68d;3.设计模式6大原则 &#x1f6f4;4.设计模式类型 1.什么是设计模式 设计模式代表了最佳的实践&#xff0c;通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开…

如何使用PHP和RabbitMQ实现消息队列?

前言 今天我们来做个小试验&#xff0c;用PHP和RabbitMQ实现消息队列功能。 前期准备&#xff0c;需要安装好docker、docker-compose的运行环境。 如何使用docker部署php服务_php如何使用docker发布-CSDN博客 一、安装RabbitMQ 1、创建相关目录&#xff0c;执行如下命令。…

数据分析与挖掘

数据起源&#xff1a; 规模庞大&#xff0c;结构复杂&#xff0c;难以通过现有商业工具和技术在可容忍的时间内获取、管理和处理的数据集。具有5V特性&#xff1a;数量&#xff08;Volume&#xff09;&#xff1a;数据量大、多样性&#xff08;Variety&#xff09;&#xff1a…

neo4j所有关系只显示RELATION,而不显示具体的关系

当看r时&#xff0c;真正的关系在properties中的type里&#xff0c;而type为“RELATION” 造成这个的原因是&#xff1a; 在创建关系时&#xff0c;需要指定关系的类型&#xff0c;这是固定的&#xff0c;不能像属性那样从CSV文件的一个字段动态赋值。标准的Cypher查询语言不支…

Verilog刷题笔记42

题目&#xff1a;Create 16 D flip-flops. It’s sometimes useful to only modify parts of a group of flip-flops. The byte-enable inputs control whether each byte of the 16 registers should be written to on that cycle. byteena[1] controls the upper byte d[15:8…

轻量级 C++ UI 库:快速、可移植、自包含 | 开源日报 No.168

ocornut/imgui Stars: 53.4k License: MIT imgui 是 C 的无臃肿图形用户界面&#xff0c;具有最小的依赖关系。 该项目的主要功能、关键特性、核心优势包括&#xff1a; 为 C 提供了一个轻量级的图形用户界面库输出优化的顶点缓冲区&#xff0c;可在 3D 渲染应用程序中随时呈…

Django下载使用、文件介绍

【一】下载并使用 【1】下载框架 &#xff08;1&#xff09;注意事项 计算机名称不要出现中文python解释器版本不同可能会出现启动报错项目中所有的文件名称不要出现中文多个项目文件尽量不要嵌套,做到一项一夹 &#xff08;2&#xff09;下载 Django属于第三方模块&#…

网络套接字-TCP服务器

一 前言 前面已经写过udp服务器的实现了&#xff0c;那里说了很多编写服务器的所需知识&#xff0c;在tcp服务器实现中就不再赘述了。 二 服务端编写 大致接口如下。 ./server port端口号 启动时指明端口号 void usage(const std::string proc) {std::cout<<"Usa…