JenkinsPipeline中使用Git插件对项目进行Pull与Push

羽林君 2023-11-27 23:04

系统环境:

  • Jenkins 版本:2.233

一、简介

       在 Jnekins 安装后,一般都会默认安装上 Git 插件,在写 Pipeline 脚本时候,也经常使用 Git 插件从 Git 仓库拉取项目进行编译,可以说使用 Git 已经是日常化操作,如何使用 Git 插件从 Git 远程仓库拉取与推送代码更是常用命令,这里介绍下如果通过 Git 插件进行这些操作。

这里为了演示方便,使用的是 Github 仓库。

二、Git 环境配置

1、配置 Git 工具

       一般安装完 Jenkins 会自动安装 Jenkins Git 插件,不过该插件也需要和 Git 工具配合使用,要求 Jenkins 所在服务器上也要安装 Git 并且配置环境。由于 Jnekins 安装现在有多种方式,常用的则是服务器上直接 Jenkins War 包启动,或者使用 Jenkins Docker 镜像启动 ,根据这两种情况,则:

  • 如果是服务器方式安装 Jenkins,需要服务器上线安装 Git 工具,然后在 "全局工具配置" 中指定 Git 工具地址。

  • 如果是 Docker 镜像方式安装 Jnekins,那么 Jenkins 镜像中已经包含 Git 工具,且已经配置好环境,在 "全局工具配置" 中 Git 工具一栏已经默认配置 Git 工具路径为 git 了,所以一般不需要配置 Git 相关设置。

Docker 启动各种工具与组件已经是大势所趋,所以,本人也是基于 Docker 镜像方式安装的 Jnekins,下面检查下是否安装 Git 插件以及配置 Git 环境。

打开 系统管理->全局工具设置->Git 工具 查看是否配置下面参数:

2、配置 Git 认证凭据

使用 Git 前还得提前配置 Git 环境,例如,配置 Git 仓库的用户名/密码的凭据,操作如下,打开 凭据->系统->全局凭据->添加凭据 添加 git 仓库的 "用户名/密码信息":

  • 用户名: Git 仓库的用户名。

  • 密码: Git 仓库的密码。

  • ID: 凭据的ID号,Pipeline 脚本中会使用到该 ID 来读取用户名/密码信息,这里设置该 ID 为 git-global-credentials,如果不设置则系统会生成一个随机 ID 值(不太直观)。

三、创建一个用于测试的 Jenkins Pipeline Job

创建一个 Jenkins Pipeline Job,然后配置里面的脚本,里面输入一些 Git 命令,然后进行测试。

这里使用是 Groovy Script 形式的 Jnekins Pipeline 脚本。

1、创建 Jenkins Job

2、配置 Jenkins Job Pipeline 脚本

进入 Jenkins Job 配置,然后拉倒最后输入 groovy 语法的 pipeline 脚本对 Git 工具进行测试,查看 Git 命令是否能执行:

脚本内容如下:

node(){sh "git version"
}


3、然后进行执行构建测试

配置 Job 完成后,进入到 Job 中,然后点击 "立即构建" 安装执行 Pipeline 脚本:

然后输入日志内容如下:

Started by user 管理员Running in Durability level: PERFORMANCE_OPTIMIZED[Pipeline] Start of Pipeline[Pipeline] nodeRunning on Jenkins in /var/jenkins_home/workspace/git-test[Pipeline] {[Pipeline] sh+ git versiongit version 2.11.0
[Pipeline] }[Pipeline] // node[Pipeline] End of PipelineFinished: SUCCESS

四、创建使用 Git 的 Jenkins Pipeline 脚本

接下来写一个完整的 Pipeline 脚本,脚本中使用 Git 插件进行 Git 远程仓库代码拉取与推送,脚本写法如下,这里分步骤进行。

1、远程 git 仓库拉取代码脚本

远程仓库代码拉取可以直接使用 git 插件提供好的方法执行拉取操作,使用如下:

  • node: 指定执行任务的节点,如果为空则寻找能够使用的节点,先从 master 开始,如果设置了 master 为不可执行任务,则使用 slave 节点。

  • stage: 设置脚本当前执行的阶段,相当于做标记,让脚本结构更加清晰。

  • git: Git 插件提供的方法,只能用于从远程 Git 仓库拉取代码操作。

    • url:远程仓库的地址。

    • branch:指定拉取的远程分支。

    • credentialsId:远程 git 仓库的用户名/密码认证凭据,这里使用的是上面步骤中配置好的凭据。

node(){stage("Git 远程仓库拉取"){git url: "https://github.com/my-dlq/test.git",credentialsId: "git-global-credentials",branch: "master"
}}

GROOVY

2、拉取与推送代码到远程 Git 仓库脚本

上面执行了远程代码拉取,不过在实际使用中,我们经常会拉取远程代码,然后修改一些内容,然后再 commit 与 push 到远程仓库,这些操作在 Pipeline 中的用法如下:

  • withCredentials: 根据凭据 ID 引入凭据,然后使用 usernamePassword 策略,将凭据中的用户名/密码信息分别赋予 usernameVariable 与 passwordVariable 两个变量。

node(){
// 先执行从远程 Git 仓库拉取代码
stage("Git 远程仓库拉取"){
git url: "https://github.com/my-dlq/test.git",
credentialsId: "git-global-credentials",
branch: "master"
}
// 再执行添加新的文件,然后推送到远程 Git 仓库
stage("推送到 Git 远程仓库"){
withCredentials([usernamePassword(credentialsId:"git-global-credentials",
usernameVariable: "GIT_USERNAME",
passwordVariable: "GIT_PASSWORD")]) {
// 配置 Git 工具中仓库认证的用户名、密码
sh 'git config --local credential.helper "!p() { echo username=\\$GIT_USERNAME; echo password=\\$GIT_PASSWORD; }; p"'
// 配置 git 变量 user.name 和 user.emai
sh 'git config --global user.name "my-dlq"'
sh 'git config --global user.email "mynamedlq@163.com"'
// 创建新的文件,存入 git 项目,内容为当前时间,方便后续测试
sh 'date | tee aaa.txt'
// 将文件推送到 git 远程仓库
sh 'git add -f aaa.txt'
sh 'git commit -m "进行 git 测试"'
sh 'git push -u origin master'
}
}
}

注意:上面配置的 Git 环境中的 user.name 和 user.email 一定要和 Github 中用户设置的保持一致,不然会导致权限验证错误。

五、在 Job 中使用 Git 测试脚本

修改测试 Job 的配置,设置其中的 Pipeline Script 为上面的测试 Git 脚本:

然后执行任务构建,可以看到下面日志信息:

Started by user 管理员Running in Durability level: PERFORMANCE_OPTIMIZED[Pipeline] Start of Pipeline[Pipeline] nodeRunning on Jenkins in /var/jenkins_home/workspace/git-test[Pipeline] {[Pipeline] stage[Pipeline] { (Git 远程仓库拉取)[Pipeline] gitusing credential git-global-credentials> git rev-parse --is-inside-work-tree # timeout=10Fetching changes from the remote Git repository> git config remote.origin.url https://github.com/my-dlq/test.git # timeout=10Fetching upstream changes from https://github.com/my-dlq/test.git> git --version # timeout=10using GIT_ASKPASS to set credentials Github 用户名/密码凭据> git fetch --tags --progress -- https://github.com/my-dlq/test.git +refs/heads/*:refs/remotes/origin/* # timeout=10> git rev-parse refs/remotes/origin/master^{commit} # timeout=10> git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10Checking out Revision b2bafc3cffb6321a0d088d87f95dc410199a2276 (refs/remotes/origin/master)> git config core.sparsecheckout # timeout=10> git checkout -f b2bafc3cffb6321a0d088d87f95dc410199a2276 # timeout=10> git branch -a -v --no-abbrev # timeout=10> git branch -D master # timeout=10> git checkout -b master b2bafc3cffb6321a0d088d87f95dc410199a2276 # timeout=10Commit message: "进行 git 测试"> git rev-list --no-walk b2bafc3cffb6321a0d088d87f95dc410199a2276 # timeout=10[Pipeline] }[Pipeline] // stage[Pipeline] stage[Pipeline] { (推送到 Git 远程仓库)[Pipeline] withCredentialsMasking supported pattern matches of $GIT_USERNAME or $GIT_PASSWORD[Pipeline] {[Pipeline] sh+ git config --local credential.helper !p() { echo username=$GIT_USERNAME; echo password=$GIT_PASSWORD; }; p[Pipeline] sh+ git config --global user.name ****[Pipeline] sh+ git config --global user.email mynamedlq@163.com[Pipeline] sh+ date+ tee aaa.txtSat Apr 25 16:01:10 UTC 2020[Pipeline] sh+ git add -f aaa.txt[Pipeline] sh+ git commit -m 进行 git 测试[master a3a9ae2] 进行 git 测试1 file changed, 1 insertion(+), 1 deletion(-)[Pipeline] sh+ git push -u origin masterTo https://github.com/****/test.gitb2bafc3..a3a9ae2  master -> masterBranch master set up to track remote branch master from origin.[Pipeline] }[Pipeline] // withCredentials[Pipeline] }[Pipeline] // stage[Pipeline] }[Pipeline] // node[Pipeline] End of PipelineFinished: SUCCESS

已经验证能顺利的拉取与推送项目到远程 Git 仓库,到此结束。

来源:http://www.mydlq.club/article/82/

                              ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧

推荐阅读

【1】jetson nano开发使用的基础详细分享

【2】Linux开发coredump文件分析实战分享

【3】CPU中的程序是怎么运行起来的 必读

【4】cartographer环境建立以及建图测试

【5】设计模式之简单工厂模式、工厂模式、抽象工厂模式的对比

【羽林君】本公众号全部原创干货已整理成一个目录,回复[ 资源 ]即可获得。

羽林君 某嵌入式程序猿分享技术、生活、人生云云文字。如有诗云:去年今日此门中,人面桃花相映红。人面不知何处去,桃花依旧笑春风。
评论
  • 自动化已成为现代制造业的基石,而驱动隔离器作为关键组件,在提升效率、精度和可靠性方面起到了不可或缺的作用。随着工业技术不断革新,驱动隔离器正助力自动化生产设备适应新兴趋势,并推动行业未来的发展。本文将探讨自动化的核心趋势及驱动隔离器在其中的重要角色。自动化领域的新兴趋势智能工厂的崛起智能工厂已成为自动化生产的新标杆。通过结合物联网(IoT)、人工智能(AI)和机器学习(ML),智能工厂实现了实时监控和动态决策。驱动隔离器在其中至关重要,它确保了传感器、执行器和控制单元之间的信号完整性,同时提供高
    腾恩科技-彭工 2025-01-03 16:28 161浏览
  • 本文继续介绍Linux系统查看硬件配置及常用调试命令,方便开发者快速了解开发板硬件信息及进行相关调试。触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。查看系统版本信息查看操作系统版本信息root@ido:/# cat /etc/*releaseDISTRIB_ID=UbuntuDISTRIB_RELEASE=20.04DISTRIB_CODENAME=focalDIS
    Industio_触觉智能 2025-01-03 11:37 138浏览
  • 物联网(IoT)的快速发展彻底改变了从智能家居到工业自动化等各个行业。由于物联网系统需要高效、可靠且紧凑的组件来处理众多传感器、执行器和通信设备,国产固态继电器(SSR)已成为满足中国这些需求的关键解决方案。本文探讨了国产SSR如何满足物联网应用的需求,重点介绍了它们的优势、技术能力以及在现实场景中的应用。了解物联网中的固态继电器固态继电器是一种电子开关设备,它使用半导体而不是机械触点来控制负载。与传统的机械继电器不同,固态继电器具有以下优势:快速切换:确保精确快速的响应,这对于实时物联网系统至
    克里雅半导体科技 2025-01-03 16:11 164浏览
  • Matter加持:新世代串流装置如何改变智能家居体验?随着现在智能家庭快速成长,串流装置(Streaming Device,以下简称Streaming Device)除了提供更卓越的影音体验,越来越多厂商开始推出支持Matter标准的串流产品,使其能作为智能家庭中枢,连结多种智能家电。消费者可以透过Matter的功能执行多样化功能,例如:开关灯、控制窗帘、对讲机开门,以及操作所有支持Matter的智能家电。此外,再搭配语音遥控器与语音助理,打造出一个更加智能、便捷的居家生活。支持Matter协议
    百佳泰测试实验室 2025-01-03 10:29 143浏览
  • 车身域是指负责管理和控制汽车车身相关功能的一个功能域,在汽车域控系统中起着至关重要的作用。它涵盖了车门、车窗、车灯、雨刮器等各种与车身相关的功能模块。与汽车电子电气架构升级相一致,车身域发展亦可以划分为三个阶段,功能集成愈加丰富:第一阶段为分布式架构:对应BCM车身控制模块,包含灯光、雨刮、门窗等传统车身控制功能。第二阶段为域集中架构:对应BDC/CEM域控制器,在BCM基础上集成网关、PEPS等。第三阶段为SOA理念下的中央集中架构:VIU/ZCU区域控制器,在BDC/CEM基础上集成VCU、
    北汇信息 2025-01-03 16:01 173浏览
  • 在快速发展的能源领域,发电厂是发电的支柱,效率和安全性至关重要。在这种背景下,国产数字隔离器已成为现代化和优化发电厂运营的重要组成部分。本文探讨了这些设备在提高性能方面的重要性,同时展示了中国在生产可靠且具有成本效益的数字隔离器方面的进步。什么是数字隔离器?数字隔离器充当屏障,在电气上将系统的不同部分隔离开来,同时允许无缝数据传输。在发电厂中,它们保护敏感的控制电路免受高压尖峰的影响,确保准确的信号处理,并在恶劣条件下保持系统完整性。中国国产数字隔离器经历了重大创新,在许多方面达到甚至超过了全球
    克里雅半导体科技 2025-01-03 16:10 121浏览
  • 光耦合器,也称为光隔离器,是一种利用光在两个隔离电路之间传输电信号的组件。在医疗领域,确保患者安全和设备可靠性至关重要。在众多有助于医疗设备安全性和效率的组件中,光耦合器起着至关重要的作用。这些紧凑型设备经常被忽视,但对于隔离高压和防止敏感医疗设备中的电气危害却是必不可少的。本文深入探讨了光耦合器的功能、其在医疗应用中的重要性以及其实际使用示例。什么是光耦合器?它通常由以下部分组成:LED(发光二极管):将电信号转换为光。光电探测器(例如光电晶体管):检测光并将其转换回电信号。这种布置确保输入和
    腾恩科技-彭工 2025-01-03 16:27 155浏览
  • 从无到有:智能手机的早期探索无线电话装置的诞生:1902 年,美国人内森・斯塔布菲尔德在肯塔基州制成了第一个无线电话装置,这是人类对 “手机” 技术最早的探索。第一部移动手机问世:1938 年,美国贝尔实验室为美国军方制成了世界上第一部 “移动” 手机。民用手机的出现:1973 年 4 月 3 日,摩托罗拉工程师马丁・库珀在纽约曼哈顿街头手持世界上第一台民用手机摩托罗拉 DynaTAC 8000X 的原型机,给竞争对手 AT&T 公司的朋友打了一个电话。这款手机重 2 磅,通话时间仅能支持半小时
    Jeffreyzhang123 2025-01-02 16:41 167浏览
  •     为控制片内设备并且查询其工作状态,MCU内部总是有一组特殊功能寄存器(SFR,Special Function Register)。    使用Eclipse环境调试MCU程序时,可以利用 Peripheral Registers Viewer来查看SFR。这个小工具是怎样知道某个型号的MCU有怎样的寄存器定义呢?它使用一种描述性的文本文件——SVD文件。这个文件存储在下面红色字体的路径下。    例:南京沁恒  &n
    电子知识打边炉 2025-01-04 20:04 0浏览
  • 影像质量应用于多个不同领域,无论是在娱乐、医疗或工业应用中,高质量的影像都是决策的关键基础。清晰的影像不仅能提升观看体验,还能保证关键细节的准确传达,例如:在医学影像中,它对诊断结果有着直接的影响!不仅如此,影像质量还影响了:▶ 压缩技术▶ 存储需求▶ 传输效率随着技术进步,影像质量的标准不断提高,对于研究与开发领域,理解并提升影像质量已成为不可忽视的重要课题。在图像处理的过程中,硬件与软件除了各自扮演着不可或缺的基础角色,有效地协作能够确保图像处理过程既高效又具有优异的质量。软硬件各扮演了什么
    百佳泰测试实验室 2025-01-03 10:39 137浏览
  • 【工程师故事】+半年的经历依然忧伤,带着焦虑和绝望  对于一个企业来说,赚钱才是第一位的,对于一个人来说,赚钱也是第一位的。因为企业要活下去,因为个人也要活下去。企业打不了倒闭。个人还是要吃饭的。企业倒闭了,打不了从头再来。个人失业了,面对的不仅是房贷车贷和教育,还有找工作的焦虑。企业说,一个公司倒闭了,说明不了什么,这是正常的一个现象。个人说,一个中年男人失业了,面对的压力太大了,焦虑会摧毁你的一切。企业说,是个公司倒闭了,也不是什么大的问题,只不过是这些公司经营有问题吧。
    curton 2025-01-02 23:08 290浏览
  • 在测试XTS时会遇到修改产品属性、SElinux权限、等一些内容,修改源码再编译很费时。今天为大家介绍一个便捷的方法,让OpenHarmony通过挂载镜像来修改镜像内容!触觉智能Purple Pi OH鸿蒙开发板演示。搭载了瑞芯微RK3566四核处理器,树莓派卡片电脑设计,支持开源鸿蒙OpenHarmony3.2-5.0系统,适合鸿蒙开发入门学习。挂载镜像首先,将要修改内容的镜像传入虚拟机当中,并创建一个要挂载镜像的文件夹,如下图:之后通过挂载命令将system.img镜像挂载到sys
    Industio_触觉智能 2025-01-03 11:39 113浏览
  • 国际标准IPC 标准:IPC-A-600:规定了印刷电路板制造过程中的质量要求和验收标准,涵盖材料、外观、尺寸、焊接、表面处理等方面。IPC-2221/2222:IPC-2221 提供了用于设计印刷电路板的一般原则和要求,IPC-2222 则针对高可靠性电子产品的设计提供了进一步的指导。IPC-6012:详细定义了刚性基板和柔性基板的要求,包括材料、工艺、尺寸、层次结构、特征等。IPC-4101:定义了印刷电路板的基板材料的物理和电气特性。IPC-7351:提供了元件封装的设计规范,包括封装尺寸
    Jeffreyzhang123 2025-01-02 16:50 198浏览
  • 前言近年来,随着汽车工业的快速发展,尤其是新能源汽车与智能汽车领域的崛起,汽车安全标准和认证要求日益严格,应用范围愈加广泛。ISO 26262和ISO 21448作为两个重要的汽车安全标准,它们在“系统安全”中扮演的角色各自不同,但又有一定交集。在智能网联汽车的高级辅助驾驶系统(ADAS)应用中,理解这两个标准的区别及其相互关系,对于保障车辆的安全性至关重要。ISO 26262:汽车功能安全的基石如图2.1所示,ISO 26262对“功能安全”的定义解释为:不存在由于电子/电气系统失效引起的危害
    广电计量 2025-01-02 17:18 218浏览
  • 在科技飞速发展的今天,机器人已经逐渐深入到我们生活和工作的各个领域。从工业生产线上不知疲倦的机械臂,到探索未知环境的智能探测机器人,再到贴心陪伴的家用服务机器人,它们的身影无处不在。而在这些机器人的背后,C 语言作为一种强大且高效的编程语言,发挥着至关重要的作用。C 语言为何适合机器人编程C 语言诞生于 20 世纪 70 年代,凭借其简洁高效、可移植性强以及对硬件的直接操控能力,成为机器人编程领域的宠儿。机器人的运行环境往往对资源有着严格的限制,需要程序占用较少的内存和运行空间。C 语言具有出色
    Jeffreyzhang123 2025-01-02 16:26 153浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦