Day05-02-Jenkins-pipeline

Day05-02-Jenkins-pipeline

  • 1. Jenkins-Pipeline概述
    • 1) pipeline?
  • 2. pipeline格式
  • 3. 小试牛刀
  • 4. Java上线的项目
    • 4.1 流程汇总
    • 4.2 根据流程书写pipeline架构
    • 4.3 分步实现
      • 1)拉取代码
      • 2)检查,编译,部署
    • 4.4 完整pipeline代码
  • 5. 根据tag标签拉取代码(了解自己扩展即可)
  • 6. 总结

1. Jenkins-Pipeline概述

  • ansible-ad-hoc命令行版本ansible模块。
  • ansible-playbook剧本。

1) pipeline?

  • pipeline-流水线

  • 通过jenkins的工作框架,通过"代码的方式",将多个任务联合起来.

  • 流水线

    • 模块化
    • 方便检查
    • 排错
    • 整体运行清晰

2. pipeline格式

三大核心:

  • agent:类似于ansible hosts 指定在哪些机器运行pipeline

  • stages:与stage 类似于 ansible tasks

  • steps:具体的指令 类似于ansible中调用各种模块

image-20240523170516823

image-20240523172238250

3. 小试牛刀

pipeline {
    agent any
    environment {
      host="oldboylinux.com"
    }
    stages {
        stage('1.Open') {
            steps {
                echo "open eyes $host"
                }
            }
            
            stage('2.CloseAlarm') {
                steps {
                    echo "close alarm $host"
                    }
                }
                
                stage('3.Go_to_sleep') {
                    steps {
                        echo "go-to-sleep $host"
                        }
                }
        }
}

image-20240523172826614

image-20240523172917711

4. Java上线的项目

4.1 流程汇总

  • Jenkins拉取Gitlab代码,获取tag标签

  • Jenkins调用Sonarqube/sonar scan 代码质量分析

  • 略: Jenkins调用发送脚本,发送代码质量检查结果

  • Jenkins调用Maven进行构建

  • Jenkins调用部署脚本

    • 摘下web服务器
    • 分发代码,解压代码,软连接…重启服务
    • 负载均衡接入web服务器
  • 略:Jenkins通过脚本,发送上线结果

4.2 根据流程书写pipeline架构

pipeline {
    agent any
    stages {
    stage('git_pull') {
    // 拉取代码
        steps {
            echo "open eyes $host"
        }
    }
    
    stage('sonar') {
    // sonarqube 代码质量检查
        steps {
            echo "close alarm  $host"
        }
    }
    
    stage('sonar_result_tongzhi') {
    // 代码质量检查结果发送
        steps {
            echo
        }
    }
    
    stage('maven_build') {
    // java代码编译
        steps {
            echo
        }
    }
    
    stage('war_deploy') {
    // war包分发,部署
        steps {
            echo
        }
    }
    
    stage('deploy_result') {
    // war部署 结果
        steps {
            echo
        }
    }
  }
}

4.3 分步实现

image-20240524085616907

image-20240524085737404

1)拉取代码

stage('1.git_pull') {
// 拉取代码
    steps {
        git branch: '${git_tag}',credentialsId: '1b05ca78-742d-4826-9c27-bd97abe58153', url: 'git@gitlab.oldboylinux.cn:dev/java_simple.git'
    }
}

image-20240524113520944

image-20240524113531243

2)检查,编译,部署

image-20240524113558850

image-20240524113614202

stage('2.sonar') {
// sonarqube 代码质量检查
steps {
    sh '''/app/tools/maven/bin/mvn clean verify sonar:sonar \\
        -Dsonar.projectName=${JOB_NAME} \\
        -Dsonar.projectKey=${JOB_NAME} \\
        -Dsonar.host.url=http://sonar.oldboylinux.cn:9000 \\
        -Dsonar.login=0fad8e180d138aac0ec793f5bf327d6ba233e82a '''
    }
}

stage('3.sonar_result_tongzhi') {
// 代码质量检查结果发送
    steps {
        echo "没配置"
    }
}  

stage('4.maven_build') {
// java代码编译
    steps {
        sh ''' /app/tools/maven/bin/mvnclean package -DskipTests '''
    }
}

stage('4.5 .确认是否部署') {
    steps {
        input '是否继续进行部署'
    }
}

image-20240524114427671

4.4 完整pipeline代码

pipeline {
    agent any
    stages {
        stage('1.git_pull') {
        // 拉取代码
            steps {
                git branch: 'master', credentialsId: '1b05ca78-742d-4826-9c27-bd97abe58153', url: 'git@gitlab.oldboylinux.cn:dev/java_simple.git'
            }
        }
        
        stage('2.sonar') {
        // sonarqube 代码质量检查
            steps {
                sh '''/app/tools/maven/bin/mvn clean verify sonar:sonar \\
                    -Dsonar.projectName=${JOB_NAME} \\
                    -Dsonar.projectKey=${JOB_NAME} \\
                    -Dsonar.host.url=http://sonar.oldboylinux.cn:9000 \\
                    -Dsonar.login=0fad8e180d138aac0ec793f5bf327d6ba233e82a '''
            }
        }
        
        stage('3.sonar_result_tongzhi') {
        // 代码质量检查结果发送
            steps {
                echo "没配置"
            }
        }
        
        stage('4.maven_build') {
        // java代码编译
            steps {
                sh ''' /app/tools/maven/bin/mvnclean package -DskipTests '''
            }
        }
        
        stage('4.5.确认是否部署') {
            steps {
                input '是否继续进行部署'
            }
        }
        
        stage('5.war_deploy') {
        // war包分发,部署
            steps {
                //sh ''' sh -x /server/scripts/java_deploy_cd.sh '''
                echo "deploy"
            }
        }
        
        stage('6.deploy_result') {
        // war部署 结果
            steps {
                echo "部署结果"
            }
        }
     }
}

image-20240524115654220

5. 根据tag标签拉取代码(了解自己扩展即可)

  • 参数化构建
parameters
gitParameter git参数化构建name变量名字 tag_name变量
type变量类型 PT_TAG获取tag标签,PT_BRANCH分支名字
defaultValue变量的默认值
useRepository指定的源。
如何调用这个变量${tag_name} ❌
${params.tag_name}

Git Parameter | Jenkins plugin:https://plugins.jenkins.io/git-parameter/

pipeline {
    agent any
    parameters {
        gitParameter name: 'tag_name',
                     type: 'PT_TAG',
                     defaultValue: 'master',
                useRepository: "git@gitlab.oldboylinux.cn:dev/java_simple.git"
               }
    stages {
        stage('Hello') {
            steps {
                git branch: "${params.tag_name}",url: 'git@gitlab.oldboylinux.cn:dev/java_simple.git'
            }
        }
    }
 }
  • 需要先跑1次。

image-20240524133936676

  • 然后刷新

image-20240524133957615

6. 总结

  • devops ,ci/cd

  • git基本使用,下载,提交,标签,回滚,分支及分支合并

  • 远程仓库使用:

    • 码云/github 创建仓库,配置密钥
    • gitlab: 创建仓库,配置密钥,用户,项目授权.
  • Jenkins

    • 实现测试环境自动部署
    • 生产环境手动部署
    • 回滚
  • maven 打包工具/编译工具

  • 代码检测工具Sonarqube…

  • pipeline

  • 发送通知-钉钉

  • 项目:通过Pipeline实现()

    • 软件版本:
      • gitlab gitlab-ce-12.10.14
      • jenkins-2.289
      • sonarqube 7.7 (mysql)
    • 实现测试环境自动部署
    • 生产环境手动部署
    • 回滚

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

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

相关文章

FreeBSD@ThinkPad x250因电池耗尽关机后无法启动的问题存档

好几次碰到电池耗尽FreeBSD关机,再启动,网络通了之后到了该出Xwindows窗体的时候,屏幕灭掉,网络不通,只有风扇在响,启动失败。关键是长按开关键后再次开机,还是启动失败。 偶尔有时候重启到单人…

温州网站建设方案及报价

随着互联网的发展,网站建设已经成为企业推广和营销的重要手段。温州作为中国经济发达地区之一,各行各业企业纷纷意识到网站建设的重要性,纷纷加大网站建设工作的投入。那么,温州网站建设方案及报价是怎样的呢?下面我们…

深入理解C# log4Net日志框架:功能、使用方法与性能优势

文章目录 1、log4Net的主要特性2、log4Net框架详解配置日志级别 3、log4Net的使用示例4、性能优化与对比5、总结与展望 在软件开发过程中,日志记录是一个不可或缺的功能。它可以帮助开发者追踪错误、监控应用程序性能,以及进行调试。在C#生态系统中&…

C#运算符重载

1、运算符重载 运算符重载是指重定义C#内置的运算符。 程序员也可以使用用户自定义类型的运算符。重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的。与其他函数一样,重载运算符有返回类型和参数列表。 2、在Box类中定义…

C++ volatile 关键字

C volatile (只有release下才会生效) 1、告诉编译器volatile修饰的变量不要进行指令顺序的优化,以保证代码编写者的真实意图; int a 0;int b 10;int c 100;int* p &a;p &b;p &c;如果不加volatile修饰 p , 编译…

团队编程:提升代码质量与知识共享的利器

目录 前言1. 什么是团队编程?1.1 团队编程的起源1.2 团队编程的工作流程 2. 团队编程的优势2.1 提高代码质量2.2 促进知识共享2.3 增强团队协作2.4 提高开发效率 3. 团队编程的挑战3.1 开发成本较高3.2 需要良好的团队协作3.3 个人风格和习惯的差异3.4 长时间的集中…

AI时代算法面试:揭秘高频算法问题与解答策略

三种决策树算法的特点和区别 ID3算法:基本的决策树算法,适用于简单的分类问题C4.5算法:改进了ID3算法,适用于更复杂的分类问题,可以处理连续型数据和缺失值CART算法:更加通用的决策树算法,适用于…

【机器学习】机器学习与自然语言处理的融合应用与性能优化新探索

引言 自然语言处理(NLP)是计算机科学中的一个重要领域,旨在通过计算机对人类语言进行理解、生成和分析。随着深度学习和大数据技术的发展,机器学习在自然语言处理中的应用越来越广泛,从文本分类、情感分析到机器翻译和…

VBA常用的字符串内置函数

前言 在VBA程序中,常用的内置函数可以按照功能分为字符串函数、数字函数、转换函数等等,本节主要会介绍常用的字符串的内置函数,包括Len()、Left()、Mid()、Right()、Split()、String()、StrConV()等。 本节的练习数据表以下表为例&#xff…

前后端的导入、导出、模板下载等写法

导入,导出、模板下载等的前后端写法 文章目录 导入,导出、模板下载等的前后端写法一、导入实现1.1 后端的导入1.2 前端的导入 二、基础的模板下载2.1 后端的模板下载-若依基础版本2.2 前端的模板下载2.3 后端的模板下载 - 基于资源文件读取2.4 excel制作…

使用maven搭建一个SpingBoot项目

1.首先创建一个maven项目 注意选择合适的jdk版本 2.添加依赖 2.在pom.xml中至少添加依赖 spring-boot-starter-web 依赖&#xff0c;目的是引入Tomcat&#xff0c;以及SpringMVC等&#xff0c;使项目具有web功能。 <!-- 引入 包含tomcat&#xff0c;SpringMVC&#xff0c…

二维Gamma分布的激光点云去噪

目录 1、Gamma 分布简介2、实现步骤 1、Gamma 分布简介 Gamma 分布在合成孔径雷达( Synthetic Aperture &#xff32;adar&#xff0c;SA&#xff32;) 图像分割中具有广泛应用&#xff0c;较好的解决了SA&#xff32; 图像中相干斑噪声对图像分割的影响。采用二维Gamma 分布对…

配置基于不同端口的虚拟主机

更改配置文件&#xff0c;添加三个不同端口的虚拟主机 <directory /www> allowoverride none require all granted </directory><virtualhost 192.168.209.136:80> documentroot /www servername 192.168.209.136 </virtualhost><virtualhost 192.…

详解yolov5的网络结构

转载自文章 网络结构图&#xff08;简易版和详细版&#xff09; 此图是博主的老师&#xff0c;杜老师的图 网络框架介绍 前言&#xff1a; YOLOv5是一种基于轻量级卷积神经网络&#xff08;CNN&#xff09;的目标检测算法&#xff0c;整体可以分为三个部分&#xff0c; ba…

Floyd判圈算法——环形链表(C++)

Floyd判圈算法(Floyd Cycle Detection Algorithm)&#xff0c;又称龟兔赛跑算法(Tortoise and Hare Algorithm)&#xff0c;是一个可以在有限状态机、迭代函数或者链表上判断是否存在环&#xff0c;求出该环的起点与长度的算法。 …

实验四 图像增强—灰度变换之直方图变换

一&#xff0e;实验目的 1&#xff0e;掌握灰度直方图的概念及其计算方法&#xff1b; 2&#xff0e;熟练掌握直方图均衡化计算过程&#xff1b;了解直方图规定化的计算过程&#xff1b; 3&#xff0e;了解色彩直方图的概念和计算方法 二&#xff0e;实验内容&#xff1a; …

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【19】认证服务03—分布式下Session共享问题

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【19】分布式下Session共享问题 session原理分布式下session共享问题Session共享问题解决—session复制Session共享问题解决—客户端存储Session共享问题解决—hash一致性Session共享问题…

嵌入式linux面试1

1. linux 1.1. Window系统和Linux系统的区别 linux区分大小写windows在dos&#xff08;磁盘操作系统&#xff09;界面命令下不区分大小写&#xff1b; 1.2. 文件格式区分 windows用扩展名区分文件&#xff1b;如.exe代表执行文件&#xff0c;.txt代表文本文件&#xff0c;.…

Seatunnel本地模式快速测验

前言 SeaTunnel&#xff08;先前称为WaterDrop&#xff09;是一个分布式、高性能、易于扩展的数据集成平台&#xff0c;旨在实现海量数据的同步和转换。它支持多种数据处理引擎&#xff0c;包括Apache Spark和Apache Flink&#xff0c;并在某个版本中引入了自主研发的Zeta引擎…

【c++】通过写一个C++函数来模拟跨境洗钱和系统警告

效果图&#xff1a; 源码&#xff1a; #include <iostream> #include <cstdlib> #include <ctime> #include <iomanip> #include <chrono> #include <thread> // 引入线程头文件#ifdef _WIN32 // 确保只在Windows上包含Windows.h #inclu…