jenkins流水线使用入门示例

news2024/11/19 18:29:15

之前采用Jenkins的自由风格构建的项目,每个步骤流程都要通过不同的方式设置,并且构建过程中整体流程是不可见的,无法确认每个流程花费的时间,并且问题不方便定位问题。

Jenkins的Pipeline可以让项目的发布整体流程可视化,明确执行的阶段,可以快速的定位问题。并且整个项目的生命周期可以通过一个Jenkinsfile文件管理,而且Jenkinsfile文件是可以放在项目中维护。

所以Pipeline相对自由风格或者其他的项目风格更容易操作。

构建Jenkins流水线任务

构建任务

 生成Groovy脚本

在配置中,选择hello world,然后进行应用,保存

构建后进行视图查看

 把之前使用自由风格做的流水线任务再来重新使用jenkins流水线进行一次操作,先编写一个简单脚本,模拟要进行的操作阶段:

pipeline {
    agent any

    stages {

        stage('从git上拉取代码') {
            steps {
                echo '从git上拉取代码 - success!'
            }
        }
        stage('maven构建代码') {
                    steps {
                        echo 'maven构建代码 - success!'
                    }
                }
        stage('使用sonarQube进行代码质量检测') {
                          steps {
                              echo 'sonarQube进行代码质量检测 - success!'
                          }
                      }
        stage('制作镜像并发布到Harbor上') {
                              steps {
                                  echo '制作镜像并发布到Harbor上 - success!'
                              }
                      }
           stage('通知部署镜像') {
                                      steps {
                                          echo '通知部署镜像 - success!'
                                      }
                              }

    }
}

把上面的脚本配置到流水线上,然后重新进行构建

 

 除了使用上面的方式外,我们可以通过使用Jenkinsfile的方式将脚本编写到项目中Jenkinsfile文件中,每次构建会自动拉取项目并且获取项目中的Jenkinsfile文件对项目进行构建

配置pipeline

再次进行构建,可以发现已经是通过 

 配置从gitlab上拉取代码

1、获取拉取代码的脚本

点击生成流水线脚本,然后将获取到的脚本发送填入到Jenkinsfile文件中

 checkout([$class: 'GitSCM', branches: [[name: '${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'f8be2dcd-6d83-433a-8318-712382911b64', url: 'http://192.168.19.6:8929/gitlab-instance-de033185/cicd-demo.git']]])

配置Maven构建

生成的脚本如下:

sh '/var/jenkins_home/apache-maven/bin/mvn  clean package'

 使用SonarQube进行代码质量检测

sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=pipeline-demo -Dsonar.projectKey=pipeline-demo -Dsonar.java.binaries=/target -Dsonar.login=1324efeaad77d14977920c2bbc3e55ae0897fe38'

制作镜像发布到Harbor上

sh '''mv target/*.jar docker/
docker build -t mytest:${projectVersion} docker/
docker login -u ${harborUser} -p ${harborPasswd} ${harborHost}
docker tag mytest:${projectVersion} ${harborHost}/${harborRepo}/mytest:${projectVersion}
docker push ${harborHost}/${harborRepo}/mytest:${projectVersion}'''

通知目标服务器来对镜像进行部署

sshPublisher(publishers: [sshPublisherDesc(configName: 'test', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "deploy.sh $harborHost $harborRepo mytest $projectVersion $host_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])

 所有配置完成后,整个Jenkinsfile文件内容如下:

pipeline {
agent any
environment{
harborHost = '192.168.19.7:80'
harborRepo = 'repo'
harborUser = 'admin'
harborPasswd = 'Harbor12345'
}
stages {

stage('从git上拉取代码') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'f8be2dcd-6d83-433a-8318-712382911b64', url: 'http://192.168.19.6:8929/gitlab-instance-de033185/cicd-demo.git']]])
echo '从git上拉取代码 - success!'
}
}
stage('maven构建代码') {
steps {
sh '/var/jenkins_home/apache-maven/bin/mvn clean package'
echo 'maven构建代码 - success!'
}
}
stage('使用sonarQube进行代码质量检测') {
steps {
sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=pipeline-demo -Dsonar.projectKey=pipeline-demo -Dsonar.java.binaries=/target -Dsonar.login=1324efeaad77d14977920c2bbc3e55ae0897fe38'
echo 'sonarQube进行代码质量检测 - success!'
}
}
stage('制作镜像并发布到Harbor上') {
steps {
sh '''mv target/*.jar docker/
docker build -t mytest:${projectVersion} docker/
docker login -u ${harborUser} -p ${harborPasswd} ${harborHost}
docker tag mytest:${projectVersion} ${harborHost}/${harborRepo}/mytest:${projectVersion}
docker push ${harborHost}/${harborRepo}/mytest:${projectVersion}'''
echo '制作镜像并发布到Harbor上 - success!'
}
}
stage('通知部署镜像') {
steps {
sshPublisher(publishers: [sshPublisherDesc(configName: 'test', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "deploy.sh $harborHost $harborRepo mytest $projectVersion $host_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo '通知部署镜像 - success!'
}
}

}
}

 进行最终的构建测试,发现所有流程均没有问题

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

低代码开发大势所趋,这款无代码开发平台你值得拥有

文章目录 什么是低代码iVX和其它低代码的平台的区别没有创新的“拼凑”,没有好东西iVX在线编辑器体验 什么是低代码 低代码(Low Code)是一种可视化的应用开发方法,用较少的代码、以较快的速度来交付应用程序,将程序员…

ElasticSearch漫游 (1.安装ELK)

前期准备: 请搭建好linux环境 推荐使用centos7系统请关闭linux防火墙请安装好docker 安装ES 创建网络 我们需要部署kibana容器,因此需要让es和kibana互联,这里先创建一个网络。 docker network create es-net加载es镜像 运行docker命令 部…

智能无线温振传感器:提高锂电设备故障诊断精度的利器

当今锂电工厂对于设备可靠性和生产效率的要求越来越高,而设备故障诊断是其中非常重要的一环。针对锂电设备的振动和温度等健康状态的监测,智能无线温振传感器是一款非常有用的工具。 图.太阳能面板生产(iStock) 智能无线温振传感器…

和数组处理有关的一些OJ题(JAVA)(ArrayList)

1、给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须确保时间复杂度为O(N),空间复杂度为O,并原地修改输入数组。元素的顺序可以改…

Android系统原理性问题分析 - Android Java框架层的结构

声明 在Android系统中经常会遇到一些系统原理性的问题,在此专栏中集中来讨论下。Android系统,为了能够更好的理解Android的Java世界的运行规律,此篇分析Android Java框架的结构。此篇参考一些博客和书籍,代码基于Android 7.1.1&a…

资产处置求变,京东拍卖如何做好“价值枢纽”?

近年来,随着资产处置市场规模快速成长以及互联网行业飞速发展,金融资产、司法拍卖、罚没物资等处置方式从最初单纯线下拍卖逐渐落地互联网,服务专业化程度也在不断提高。为更好适应市场变化,满足不断增长的市场需求,5月…

NISP二级证书含金量如何

国家信息安全水平考试(National Information Security Test Program,简称NISP),是由中国信息安全测评中心实施培养国家网络空间安全人才的项目。 为培养更多优秀的实践型网络安全人才,中国信息安全测评中心推出了国家…

替代MySQL半同步复制,Meta技术团队推出MySQL Raft共识引擎

作者:Anirban Rahut、Abhinav Sharma、Yichen Shen、Ahsanul Haque 原文链接:https://engineering.fb.com/2023/05/16/data-infrastructure/mysql-raft-meta/ 译者:ChatGPT 责编:张红月 MySQL Raft是MySQL数据库中一种基于Raft协议…

探索LeetCode【0010】正则表达式匹配(已懂,未练习)

目录 0.1 题目0.2 补充示例1. 参考B站视频2. 官方答案的评论-可用3. chatGPT的思路和解法-可用 0.1 题目 题目链接:【0010】正则表达式匹配 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符* 匹…

2023 RSAC|和衷共济 共同应对网络安全挑战

作为全球最具规模的安全大会,2023年RSA Conference的落幕也为安全行业的“何去何从”带来一定的启发性。 今年大会的主题是“Strong together”,主要来自于海伦凯勒的名言: “ Alone we can do so little; together we can do so much. ” 纵观2022年…

做完这个测试项目,我终于决定辞职·····

很迷茫,然后过得非常不如意,倒不是上一年的职业目标没达到,而是接下来的路根本不知道如何走。在没解决这个问题之前,或者说没搞清楚自己的方向之前,是迟迟不能落笔的,啊不,应该是落键盘。 下班…

JavaWeb-RequestResponse的使用

Request&Response 今日目标 掌握Request对象的概念与使用掌握Response对象的概念与使用能够完成用户登录注册案例的实现能够完成SqlSessionFactory工具类的抽取 1,Request和Response的概述 Request是请求对象,Response是响应对象。这两个对象在我们…

德尔玛IPO首日破发,市值蒸发超4亿

今日(5月18日),小米“代工厂”广东德尔玛科技股份有限公司(下称“德尔玛”,301332.SZ)正式在深交所挂牌上市。 德尔玛此次IPO募资净额为12.31亿元,开盘价为14.81元/股,与发行价持平…

Call to undefined function bcadd()

先介绍一下当前使用的环境。同学们可以比较一下,看本篇文章是否可以提供帮助。 docker 部署 nginx 1.24php 8.1-fpm 再介绍一下框架,使用的是 "laravel 9.33.0" 其实这里跟 laravel 框架和 nginx 是没太多关系的,因为我们主要是使…

MySQL高级_第09章_性能分析工具的使用

MySQL高级_第09章_性能分析工具的使用 在数据库调优中,我们的目标就是 响应时间更快,吞吐量更大。利用宏观的监控工具和微观的日志分析可以帮我们快速找到调优的思路和方式。 1. 数据库服务器的优化步骤 当我们遇到数据库调优问题的时候,该…

Windows平台软件开发模型总结:V型模型、瀑布模型、迭代模型、增量模型、螺旋模型、原型模型

我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下Windows平台软件开发模型总结:V型模型、瀑布模型、迭代模型、增量模型、螺旋模型、原型模型。 很多人可能知道了,那就是在我们浙江省,从2021年年初到现在&…

内网 monorepo 配置指南(PNPM、YARN)

此处的内网是指没办法连接互联网进行依赖下载的环境,本文以windows平台为例 背景说明 绝大部分政府机关、国有企业都是在内网开发,无法从互联网同步依赖,就需要另辟蹊径解决项目依赖的问题。 传统的单包项目还好,从互联网机器将…

兼顾降本与增效,我们对存算分离的设计与思考

“降本增效”是最近企业常被提及的关键字,作为新时代企业发展的数据大脑,企业大数据团队需要持续探索如何在有限资源下创造更多价值。本文将以场景为"引",技术为"核",介绍如何基于 StarRocks 全新的存算分离架…

软考软件设计师真题与答案解析

1、2020下半年基础知识(上午题) 1、某计算机系统的CPU主频为2.8GHz。某应用程序包括3类指令,各类指令的CPI(执行每条指令所需要的时钟周期数)及指令比例如’下表所示。执行该应用程序时的平均CPI为( );运算…

2023 操作系统 R 复习大纲( 适用于软件 21 级)

目录 01.操作系统的定义 02.操作系统的基本类型及特征 1.批处理操作系统(单、多道) 2.分时操作系统 3.实时操作系统 03.操作系统的功能及特征 04.进程的定义、特征 05.进程基本状态及其转换原因 06.进程互斥、同步 07.进程控制块的内容、作用 …