Jenkins使用pipeline流水线部署项目

新建流水线任务

前面的项目整个部署日志都在一个控制台页面,出现了错误不能快速定位不方便查阅

Jenkins提供了流水线方式的任务

这里我新建一个叫“pipeline-mytest”的流水线任务

在这里插入图片描述

在流水线出右侧有内置的样式,这里我选择了helloworld的样式。

在这里插入图片描述

构建一下看一下效果,右侧会显示流程执行的时间、日志、是否成功
在这里插入图片描述

流水线脚本语法使用

将流水线里面的样式脚本修改成

//所有脚本命令放在pipeline中
pipeline{//指定任务哪个集群节点执行agent any	//声明全局变量,给后面使用environment{key = 'value'}stages{stage('拉取Gitlab仓库代码'){steps{echo ''}}stage('Maven构建项目'){steps{echo ''}}stage('SonarQube检查代码质量'){steps{echo ''}}stage('制作自定义Docker镜像'){steps{echo ''}}stage('推送镜像到Harbor仓库'){steps{echo ''}}stage('通知目标服务器拉取镜像并启动'){steps{echo ''}}}
}

重新构建看一下效果

在这里插入图片描述

Jenkinsfile维护脚本

流水线还提供了另一个方式,基于Git
在定义处选择SCM,填写你的Gitlab仓库地址

在这里插入图片描述

需要在你填写的仓库中,新建一个叫Jenkinsfile的文件
然后把之前的脚本命令,粘贴到里面去

在这里插入图片描述

再次构建查看效果,相比之前多了一步去Gitlab拉取脚本的步骤

在这里插入图片描述

pipeline拉取Gitlab代码

同样还是通过Gitlab打的标签版本去拉取代码,所以需要先填加个version参数
在配置的最底下有“流水线语法”

在这里插入图片描述

选择checkout:Check out from version control,填写要拉去代码的仓库地址和分支

在这里插入图片描述

然后在最底下点击“生产流水线脚本”按钮

在这里插入图片描述

接着将脚本命令复制到Jenkinsfile文件中拉取仓库代码步骤中

在这里插入图片描述
接着将脚本命令复制到Jenkinsfile文件中拉取仓库代码步骤中

注意需要把*/main替换成我们设置的构建参数version,不然默认是去拉取最新代码而不是我们指定拉取的标签版本代码

checkout scmGit(branches: [[name: '${version}']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.170.111:8888/root/jenkins-cicd-mytest.git']])

在这里插入图片描述

pipeline流水线Maven构建项目

同样去生产脚本命令的地方选择"sh:Shell Script"

输入要执行的命令进行生产

在这里插入图片描述
再把生成的流水线脚本复制到Gitlab的Jenkinsfile文件里面去

在这里插入图片描述

验证很简单,Jenkins构建完后去到Jenkins容器的工作目录下,看是否生产target目录
如下,我构建了两次,第一次构建下载各种包花了一分多钟,第二次只需要4秒。

在这里插入图片描述

pipeline流水线SonarQube检查代码

和Maven一样,在生成脚本的地方,把之前在自定义风格里面指定的参数放到生成脚本“sh:Shell Script”命令中生成

需要在各个参数前面加上“-D”,并且多了个Sonar.login指定令牌(去SonarQube账户下再生成一个令牌)

/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.source=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=target -Dsonar.login=8b2d57757d51a640fa47d90cce47b2d480170093

在这里插入图片描述
放入到Gitlab的Jenkinsfile文件中

sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.source=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=target -Dsonar.login=8b2d57757d51a640fa47d90cce47b2d480170093'

在这里插入图片描述
构建,扫描成功
在这里插入图片描述

pipeline流水线自定义Docker镜像

通过Docker命令,还是直接用“sh:Shell Script”生成

移动target目录下的jar包到docker目录中,镜像命名为当前任务名:版本(即pipeline-mytest:Gitlab拉取的标签版本)

后面跟着的docker/目录指定Dockerfile文件在此目录下,根据它构建镜像。

mv target/*.jar docker
docker build -t ${JOB_NAME}:$version docker/

在这里插入图片描述

将脚本复制到Jenkinsfile文件相应流程中

sh '''mv target/*.jar docker
docker build -t ${JOB_NAME}:$version docker/'''

在这里插入图片描述
构建只花了1秒,并成功构建了

在这里插入图片描述
去Jenkins服务器上查看镜像已经生成了个pipeline-mytest的镜像

在这里插入图片描述

pipeline流水线推送镜像到Harbor仓库

在生成脚本之前,先修改一下Jenkinsfile文件,增加几个变量:仓库地址、仓库名称、用户、密码

在这里插入图片描述
来到生成脚本页面,编写docker命令生成脚本

docker login -u ${harbor_user} -p ${harbor_pwd} ${harbor_addr}
docker tag ${JOB_NAME}:${version} ${harbor_addr}/${harbor_warehouse}/${JOB_NAME}:${version}
docker push ${harbor_addr}/${harbor_warehouse}/${JOB_NAME}:${version}

在这里插入图片描述
复制到Jenkinsfile文件中对应的流程

sh '''docker login -u ${harbor_user} -p ${harbor_pwd} ${harbor_addr}
docker tag ${JOB_NAME}:${version} ${harbor_addr}/${harbor_warehouse}/${JOB_NAME}:${version}
docker push ${harbor_addr}/${harbor_warehouse}/${JOB_NAME}:${version}'''

在这里插入图片描述
构建流水线查验,花费2秒无报错

在这里插入图片描述
来Harbor仓库看一下,已经上传上来了,Monster仓库下多了个pipeline-mytest的镜像。

在这里插入图片描述

pipeline流水线通知目标服务器部署项目

部署项目需要映射容器端口和宿主机端口,和之前一样先给在pipeline-mytest流水线添加2个构建参数

这里新增了host_port和container_port

在这里插入图片描述

来到生成脚本页面选择“sshPublisher: Send build artifacts over SSH”

SSH Publisher选择要通知的目标服务器

设置要执行的命令点击生成,这里的命令不需要使用括号括起来,这里是通过执行脚本的时候去引用

deploy.sh$harbor_addr $harbor_warehouse $JOB_NAME $version $host_port $container_port

在这里插入图片描述
把生成的命令拷贝到Jenkinsfile文件中对应的流程

sshPublisher(publishers: [sshPublisherDesc(configName: '应用服务器-170.111', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'deploy.sh$harbor_addr $harbor_warehouse $JOB_NAME $version $host_port $container_port', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])

需要注意把单引号修改成双引号,不然不会生效,Jenkinsfile文件中即引用的Jenkinsfile当中的全局变量,也引用的Jenkins提供的参数。
在这里插入图片描述
构建前,我修改项目代码增加pipeline字样
在这里插入图片描述
然后提交到Gitlab仓库,重新打个标签v1.0.3

在这里插入图片描述
通过pipeline构建项目,由于之前的mytest自由风格构建的任务,构建了一个8081端口的项目没有停用,这里我修改一下宿主机映射的端口为8082
在这里插入图片描述
没有报错,显示黄色不稳定,查看后面的每一个流程都没有保存,大概率是最后一步远程到目标服务器执行的脚本有问题。
在这里插入图片描述
查看日志,有个报错状态 Status [127]],在 Jenkins 中报错状态 127 通常表示找不到命令或可执行文件。这可能是由于路径问题、权限问题或缺少必要的软件包等原因引起的。

ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [127]]

在这里插入图片描述
检查脚本,少了个空格,修改即可
在这里插入图片描述
重新构建,成功
在这里插入图片描述
访问页面没问题

在这里插入图片描述

Jenkinsfile脚本文件全部内容

//所有脚本命令放在pipeline中
pipeline{//指定任务哪个集群节点执行agent any	//声明全局变量,给后面使用environment{//Harbor地址harbor_addr = '192.168.170.111:80'//仓库名harbor_warehouse = 'monster'//用户名harbor_user = 'admin'//密码harbor_pwd = 'Harbor12345'}stages{stage('拉取Gitlab仓库代码'){steps{checkout scmGit(branches: [[name: '${version}']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.170.111:8888/root/jenkins-cicd-mytest.git']])}}stage('Maven构建项目'){steps{sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'}}stage('SonarQube检查代码质量'){steps{sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.source=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=target -Dsonar.login=8b2d57757d51a640fa47d90cce47b2d480170093'}}stage('制作自定义Docker镜像'){steps{sh '''mv target/*.jar docker
docker build -t ${JOB_NAME}:$version docker/'''}}stage('推送镜像到Harbor仓库'){steps{sh '''docker login -u ${harbor_user} -p ${harbor_pwd} ${harbor_addr}
docker tag ${JOB_NAME}:${version} ${harbor_addr}/${harbor_warehouse}/${JOB_NAME}:${version}
docker push ${harbor_addr}/${harbor_warehouse}/${JOB_NAME}:${version}'''}}stage('通知目标服务器拉取镜像并启动'){steps{sshPublisher(publishers: [sshPublisherDesc(configName: '应用服务器-170.111', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "deploy.sh $harbor_addr $harbor_warehouse $JOB_NAME $version $host_port $container_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])}}}
}

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

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

相关文章

25考研|北大软微会「爆炸」吗?

软微不是已经爆炸了吗? 大家去看看他的录取平均分就知道了,没有实力千万别碰,现在考软微已经不存在捡漏之说。 110408的复试线已经划到了465分,这个人真的不低了,因为有数学一和408两个比较难的专业课,复…

网络编程 - 套接字

1、预备知识 1.1、理解源IP地址和目的IP地址 在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址; 思考: 我们光有IP地址就可以完成通信了嘛? 想象一下发qq消息的例子, 有了IP地址能够把消息发送到对方的机器上, 但是还需要有一个其他的标识来区分…

完成系统支持Github三方登录

文章目录 1、需求2、在对接系统中完成客户端注册3、创建客户端应用4、CommonOAuth2Provider SpringSecurity OAuth2.0文档: https://docs.spring.io/spring-security/reference/servlet/oauth2/index.html 1、需求 对接Github,在自己系统实现支持Githu…

【C#语言入门】22. 接口、依赖反转、单元测试

【C#语言入门】22. 接口、依赖反转、单元测试 一、接口与单元测试 接口的产生:自底向上(重构),自顶向下(设计)C#中接口的实现(隐式,显式,多接口)语言对面向…

【力扣hot100】49. 字母异位词分组

题目 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [[“bat”],[“nat”,…

osgEarth学习笔记4-第一个OsgEarth QT程序

原文链接 使用QT Creator新建一个窗口项目。 编辑pro文件 QT core gui greaterThan(QT_MAJOR_VERSION, 4): QT widgets CONFIG c11 DEFINES QT_DEPRECATED_WARNINGS #DEFINES QT_DISABLE_DEPRECATED_BEFORE0x060000 # disables all the APIs deprecated bef…

前后端分离项目部署服务器教程--实践成功

文章目录 项目介绍流程1租界云服务2通过远程软件连接服务器3部署前后端代码停止功能文件 环境配置1.安装jdk2.安装Nginx3.安装mysql数据库 花了将近一天部署前后端的项目,写一个日志记录一下,话说孰能生巧。明天把服务器恢复初始在部署一下。 项目介绍 …

【已解决】在pycharm终端无法激活conda环境,但在cmd命令行中可以

一、问题描述 在windows下winr启动cmd命令行,可以成功运行conda命令并且激活环境在pycharm中打开Terminal终端,发现无法运行conda和pip命令,报错环境无法激活 无法在管道中间运行文档: D:\software\Anaconda3\condabin\conda.bat。 所在位置…

Matlab|基于改进粒子群算法的混合储能系统容量优化

目录 主要内容 部分程序 下载链接 主要内容 为了调高风光互补发电储能系统的经济性,减少其运行费用,研究风光互补发电储能系统的容量优化配置模型,探讨粒子群算法的改进及混合储能容量优化方法。首先通过对全生命周期费用静态模型…

全身动作捕捉设备Dreamscap X1,赋予影视、游戏动画全新创作体验

在影视动画、游戏动画制作领域,全身动作捕捉设备具有完整的动作捕捉性能捕获,无需关键帧动画技能,也可以捕捉真人全范围的运动姿态,通过全身动作捕捉设备系统将动作捕捉数据直接流式传输到3D模型上,辅助动画师制作出逼…

【DataWhale学习笔记-蝴蝶书共读】大语言模型背后

从图灵测试到ChatGPT 1950年,艾伦•图灵(Alan Turing)发表论文《计算机器与智能》( Computing Machinery and Intelligence),提出并尝试回答“机器能否思考”这一关键问题。在论文中,图灵提出了“模仿游戏”&#xff…

超越标签的探索:K-means与DBSCAN在数据分析中的新视角

最近在苦恼为我的数据决定分组问题,在查找资料时,恰好看到机器学习中的无监督学习的聚类分析,正好适用于我的问题,但是我之前学机器学习时。正好没有学习无监督部分,因为我认为绝大多数问题都是有标签的监督学习&#…

部署Zabbix Agents添加使能监测服务器_Windows平台_MSI/Archive模式

Windows平台 一、从MSI安装Windows代理,添加Windows Servers/PC 概述 可以从Windows MSI安装包(32位或64位) 安装Zabbix agent 32位包不能安装在64位Windows中 所有软件包都支持TLS,配置TLS可选 支持UI和命令行的安装。 1、下载Agent代理程序,使用Agent2升级版,官网链接如…

前端安全——最新:lodash原型漏洞从发现到修复全过程

人生的精彩就在于你永远不知道惊喜和意外谁先来,又是一个平平无奇的早晨,我收到了一份意外的惊喜——前端某项目出现lodash依赖原型污染漏洞。咋一听,很新奇。再仔细一看,呕吼,更加好奇了~然后就是了解和修补漏洞之旅。…

Java基础-泛型

泛型 基本概念为什么我们需要泛型泛型类型泛型类简单泛型类多元泛型类 泛型接口泛型方法为什么要使用泛型方法呢?使用方法 泛型的上下限上限下限加点难度的例子例子一例子二例子三 泛型数组深入理解泛型什么是泛型擦除后保留的原始类型泛型类型擦除原则如何进行擦除的?怎么证…

Linux课程四课---Linux第一个小程序(进度条)

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

从入门到精通:深入解析IO流之FileWriter类的使用技巧!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好…

前端面试拼图-知识广度

摘要:最近,看了下慕课2周刷完n道面试题,记录并添加部分可参考的文档,如下... 1. 移动端H5 click有300ms延迟, 如何解决? 背景:double tap to zoom 移动端H5中的300ms点击延迟问题通常是由浏览…

从零开始学习在VUE3中使用canvas(三):font(字体)

一、简介 我们可以使用font在canvas中绘制文字,方式如下: const ctx canvas.getContext("2d"); // 绘制文字 ctx.font "24px 黑体, 宋体"; //字体大小 首选字体 备选字体 ctx.fillText("这里是显示的字的内容", 100, 50); //文字…

[QJS xmake] 非常简单地在Windows下编译QuickJS!

文章目录 前言准备C编译器xmake编译包 工程准备修改版本号第一遍编译第二遍编译效果 前言 quickjs是个很厉害的东西啊,我一直想编译一下的,奈何一直没成功。现在找了点时间成功编译了,写篇文章记录一下。当前版本:2024-1-13 应该…