持续集成交付CICD:GitLab Webhook触发Jenkins流水线

目录

一、实验

1.Jenkins远程下载GiaLab仓库代码

2.curl远程触发Jenkins流水线

3.GitLab Webhook触发Jenkins流水线

二、问题

1.GitLab配置Webhook时报错


一、实验

1.Jenkins远程下载GiaLab仓库代码

(1) Jenkins添加选项参数

(2)添加字符参数

(3)查看构建参数情况

(4)添加凭证

(5)生成流水线脚本

(6)生成

checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '89c7573f-2d38-4aba-af7c-d8e62582b4d7', url: 'http://192.168.204.8:82/devops03/devops03-demo-service.git']])

(7)保存流水线

(8)开始构建feature-01

(9)成功

(10)先查看仓库

(11)再查看分支

(12)gitlab查看特性分支的2个文件

(13) jenkins日志显示有2个文件

(14)开始构建master

(15)成功

(16)修改回放

(17)成功

2.curl远程触发Jenkins流水线

(1)Jenkins 开启 Webhook Trigger

(2)开启打印日志

(3)添加token,以作业名命名

(4)curl远程触发

curl "http://192.168.204.15:8080/generic-webhook-trigger/invoke?token=devops03-demo-service" 

(5)成功

(6)查看日志

3.GitLab Webhook触发Jenkins流水线

(1)GitLab添加Webhooks的URL

(2)提交特性分支

(3)push

(4)HTTP200 触发成功

(5)jenkins成功触发流水线

(6)查看日志

(7)提交特性分支

(8)选择edit查看(提交代码触发hook)

(9)post请求(发送给jenkins分析)

Request URL: POST http://192.168.204.15:8080/generic-webhook-trigger/invoke?token=devops03-demo-service 200Trigger: Push HookElapsed time: 0.02 secRequest time: 2 minutes agoRequest headers:
Content-Type: application/json
X-Gitlab-Event: Push Hook
Request body:
{"object_kind": "push","event_name": "push","before": "3e2975fa3f53a85535356ca0a4a4e3bf19ac6968","after": "a99b9ea258b237739f675aa956939cbda1df8fdc","ref": "refs/heads/feature-addmsg","checkout_sha": "a99b9ea258b237739f675aa956939cbda1df8fdc","message": null,"user_id": 1,"user_name": "Administrator","user_username": "root","user_email": "","user_avatar": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon","project_id": 9,"project": {"id": 9,"name": "devops03-demo-service","description": "","web_url": "http://192.168.204.8:82/devops03/devops03-demo-service","avatar_url": null,"git_ssh_url": "git@192.168.204.8:devops03/devops03-demo-service.git","git_http_url": "http://192.168.204.8:82/devops03/devops03-demo-service.git","namespace": "devops03","visibility_level": 0,"path_with_namespace": "devops03/devops03-demo-service","default_branch": "master","ci_config_path": null,"homepage": "http://192.168.204.8:82/devops03/devops03-demo-service","url": "git@192.168.204.8:devops03/devops03-demo-service.git","ssh_url": "git@192.168.204.8:devops03/devops03-demo-service.git","http_url": "http://192.168.204.8:82/devops03/devops03-demo-service.git"},"commits": [{"id": "a99b9ea258b237739f675aa956939cbda1df8fdc","message": "Update build.sh   hehehe","title": "Update build.sh   hehehe","timestamp": "2023-11-27T15:50:36+08:00","url": "http://192.168.204.8:82/devops03/devops03-demo-service/-/commit/a99b9ea258b237739f675aa956939cbda1df8fdc","author": {"name": "Administrator","email": "admin@example.com"},"added": [],"modified": ["build.sh"],"removed": []}],"total_commits_count": 1,"push_options": {},"repository": {"name": "devops03-demo-service","url": "git@192.168.204.8:devops03/devops03-demo-service.git","description": "","homepage": "http://192.168.204.8:82/devops03/devops03-demo-service","git_http_url": "http://192.168.204.8:82/devops03/devops03-demo-service.git","git_ssh_url": "git@192.168.204.8:devops03/devops03-demo-service.git","visibility_level": 0}
}
Response headers:
Date: Mon, 27 Nov 2023 07:50:37 GMT
Connection: close
X-Content-Type-Options: nosniff
Content-Type: application/json;charset=utf-8
Content-Length: 196
Server: Jetty(10.0.15)
Response body:
{"jobs":{"devops03/devops03-demo-service":{"regexpFilterExpression":"","triggered":true,"resolvedVari

(10)分支信息

(11)发送者

(12)项目信息

(13)提交信息

(14)修改的内容

(15)jenkins添加Post参数

(16)修改流水线

(17)添加script

webHookData = readJSON text: "${webHookData}"
userName = webHookData["user_username"]
userEmail = webHookData["user_email"]
branchName = webHookData["ref"] - "refs/heads/"
commitID = webHookData["checkout_sha"]currentBuild.displayName = commitID
currentBuild.description = "Trigger by user ${userName} \n branch: ${branchName}"pipeline {agent anystages {stage('resdJson') {steps {println("the user name is ${userName}")println("the trigger branch name is ${branchName}")println("the user email is ${userEmail}")}}}
}

(18)再次修改流水线

(19)edit

(20)详细信息

(21)resend

(22)成功触发

(23)成功

(24)查看日志

(25)这里显示gitlab分支id等信息

(26)修改,删除一行

(27)成功触发

(28)只允许feature分支提交

(29)修改feature分支内容

(30)jenkins已拿到

(31)修改release分支内容(jenkins没有触发)

(32)添加允许release分支

(33)此时一个项目有2个webhook(一个针对特性分支,一个针对版本分支)

(34)修改release版本分支内容

(35)jenkins已触发

(36)手动测试报错

(37)因为webhook是gitlab传过来的

(38)修改流水线,捕获异常

(39)手动触发

(40)输出信息报错

(41)修改代码,捕获异常

(42)手动触发

(43)查看日志

(44)修改分支

(45)成功触发

4.GitLab Webhook触发邮箱发送

(1)修改邮箱,不起效果

(2)修改admin邮箱

(3)修改保存

(4)删除第2邮箱

(5)完成

(6)邮箱已同步

(7)修改release1.1.3

(8)触发成功

(9)未获取到邮箱

(10)修改public email

(11)查看日志

(12)安装email 插件

(13)修改feature分支

(14)已拿到邮箱(15)等待安装

(16)输入邮箱

(17)触发成功

(18)修改文本类型为HTML

(19)邮箱整体配置

(20)修改流水线

webHookData = readJSON text: "${webHookData}"userName = webHookData["user_username"]userEmail = webHookData["user_email"]branchName = webHookData["ref"] - "refs/heads/"commitID = webHookData["checkout_sha"]currentBuild.displayName = commitIDcurrentBuild.description = "Trigger by GitLab \n user: ${userName} \n branch: ${branchName}"pipeline {agent anystages {stage('resdJson') {steps {            println("the user name is ${userName}")println("the trigger branch name is ${branchName}")println("the user email is ${userEmail}")}}}post {always {script {emailext body: 'hello world!....jenkins', subject: 'test.....', to: '594372682@qq.com'}}}
}

(21)gitlab 触发

(22)触发成功

(23)邮箱接收成功

(24)查看日志

(25)resend

(26)修改流水线

webHookData = readJSON text: "${webHookData}"userName = webHookData["user_username"]userEmail = webHookData["user_email"]branchName = webHookData["ref"] - "refs/heads/"commitID = webHookData["checkout_sha"]currentBuild.displayName = commitIDcurrentBuild.description = "Trigger by GitLab \n user: ${userName} \n branch: ${branchName}"
pipeline {agent anystages {stage('resdJson') {steps {echo "this is readJSON"}}}post {always {script {EmailUser("${userEmail}",currentBuild.currentResult)}}}}def EmailUser(userEmail,status){emailext body: """<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0"> <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">   <tr> <td><br /> <b><font color="#0B610B">构建信息</font></b> </td> </tr> <tr> <td> <ul> <li>项目名称:${JOB_NAME}</li>         <li>构建编号:${BUILD_ID}</li> <li>构建状态: ${status} </li>                         <li>项目地址:<a href="${BUILD_URL}">${BUILD_URL}</a></li>    <li>构建日志:<a href="${BUILD_URL}console">${BUILD_URL}console</a></li> </ul> </td> </tr> <tr>  </table> </body> </html>  """,subject: "Jenkins-${JOB_NAME}项目构建信息 ",to: userEmail

(27)构建成功

(28) 收到邮件

二、问题

1.GitLab配置Webhook时报错

(1)报错

(2)原因分析

未配置允许外部请求

(3)解决方法

进入 Admin area => Settings => Network ,然后点击 Outbound requests 右边 的“expand”按钮,按图片勾选,并点击 Save changes按钮

再重新配置Webhook即可正确生成Hook

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

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

相关文章

C++ 背包理论基础01 + 滚动数组

背包问题的重中之重是01背包 01背包 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 每一件物品其实只有两个状态&#xff0c;取或者不…

桥接设计模式

package com.jmj.pattern.bridge;/*** 视频文件(实现化角色)*/ public interface VideoFile {void decode(String fileName); }package com.jmj.pattern.bridge;public class RmvFile implements VideoFile{Overridepublic void decode(String fileName) {System.out.println(&…

语文老师怎么和家长沟通

作为一位语文老师&#xff0c;深知教育不单单是传授知识&#xff0c;更是引导学生发展潜能&#xff0c;培养品格。而在这个过程中&#xff0c;与家长建立良好的沟通关系是至关重要的。 建立信任关系 与家长沟通的第一步是建立信任关系。作为老师&#xff0c;需要展现出专业、热…

堆排序(详解)

在上篇文章中&#xff0c;我们说利用堆的插入和删除也可以排序数据&#xff0c;但排序的只是堆里面的数组&#xff1b;同时每次排序数据都要单独写一个堆的实现&#xff0c;很不方便&#xff0c;这次就来着重讲讲如何使用堆排序。 1.建堆 给了你数据&#xff0c;要利用堆对数据…

开发定制化抖音票务小程序的技术解析

通过定制化抖音票务小程序&#xff0c;可以为用户提供更加个性化的活动体验&#xff0c;同时也为企业和品牌提供了更多的营销机会。 一、小程序开发框架的选择 在开发定制化抖音票务小程序之前&#xff0c;选择合适的小程序开发框架至关重要。目前&#xff0c;主流的小程序框…

Unity之ARFoundation如何实现BodyTracking人体跟踪

前言 ARBodyTracking,就是指通过手机AR扫描并精确的捕获人物的肢体部位的技术。如下图所示 这项技术目前是有苹果的ARKit提供,苹果的body tracking 功能需要使用配备 TrueDepth 摄像头的设备,配备 A12 仿生芯片、运行 iOS 13 或更高版本的设备,比如 iPhone X 及更新机型。…

【开源】基于JAVA的城市桥梁道路管理系统

项目编号&#xff1a; S 025 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S025&#xff0c;文末获取源码。} 项目编号&#xff1a;S025&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询城市桥…

SpringBoot RestTemplate 的使用

一、简介 RestTemplate 在JDK HttpURLConnection、Apache HttpComponents、OkHttp等基础上&#xff0c;封装了更高级别的API&#xff0c;默认依赖JDK HttpURLConnection&#xff0c;连接方式默认长连接。 二、使用 2.1、引入依赖 <dependency><groupId>org.spri…

1-2-3图片的排列

目录 1.展示效果 2.基础方法源码展示 ①div部分展示 ②css部分展示 3.接口方法源码展示 scoped使用 1.展示效果 2.基础方法源码展示 ①div部分展示 <view class"container"> <view class"cover"> <im…

独家精品!git action发布electron成功的关键

首先来说git action真心是个坑爹货&#xff0c;使用起来太费劲了&#xff0c;各种报错一大堆。 再加上electron这个更坑爹的东西&#xff0c;二者合璧要把你累死一层皮。 昨天经过反复测试&#xff0c;通过无数次的失败&#xff0c;查找&#xff0c;试验&#xff0c;再失败&a…

在Linux中对Docker中的服务设置自启动

先在Linux中安装docker&#xff0c;然后对docker中的服务设置自启动。 安装docker 第一步&#xff0c;卸载旧版本docker。 若系统中已安装旧版本docker&#xff0c;则需要卸载旧版本docker以及与旧版本docker相关的依赖项。 命令&#xff1a;yum -y remove docker docker-c…

封装一个基于ThreeJS渲染基础模型的类,非常简单,可拖动可缩放

工作需求要求threeJS渲染一个模型以供可视化大屏展示&#xff0c;抛出模型精度不谈&#xff0c;只说业务实现 1.Three.JS的引入 ThreeJS官网地址:Three.js – JavaScript 3D Library 查看文档 中文切换及安装创建步骤 如果是自己研究学习用的&#xff0c;在官网安装完后&…

linux的基本指令

目录 ls指令&#xff1a; pwd指令&#xff1a; cd指令&#xff1a; touch指令&#xff1a; mkdir指令&#xff1a; rmdir指令: rm指令&#xff1a; man指令&#xff1a; mv指令&#xff1a; cat指令&#xff1a; more指令&#xff1a; less指令&#xff1a; head指…

Blazor Table 实现获取当前选中行的功能

这里需要使用到OnClickRowCallBack事件 后台使用案例

【Python】数据分析案例:世界杯数据可视化 | 文末送书

文章目录 前期数据准备导入数据 分析&#xff1a;世界杯中各队赢得的比赛数分析&#xff1a;先打或后打的比赛获胜次数分析&#xff1a;世界杯中的抛硬币决策分析&#xff1a;2022年T20世界杯的最高得分者分析&#xff1a;世界杯比赛最佳球员奖分析&#xff1a;最适合先击球或追…

全能音乐制作环境——水果编曲软件FL Studio 21.1版本下载安装配置

目录 前言一、FL Studio 安装二、使用配置总结 前言 FL Studio是一款流行的图像线软件制作和编辑音频文件。作为一款领先的创新产品&#xff0c;该软件能够满足在创作音乐方面的需求。有了这个产品&#xff0c;可以完成制作音乐的整个过程。可以使用这个软件进行写作&#xff…

YOLOv5实现目标分类计数并显示在图像上

有同学后台私信我&#xff0c;想用YOLOv5实现目标的分类计数&#xff0c;因此本文将在之前目标计数博客的基础上添加一些代码&#xff0c;实现分类计数。阅读本文前请先看那篇博客&#xff0c;链接如下&#xff1a; YOLOv5实现目标计数_Albert_yeager的博客 1. 分类实现 以co…

深入理解 Java Bean 的生命周期及各个阶段解析

目录 引言&#xff1a;一、什么是Java Bean二、Bean的生命周期概述三、Bean的创建阶段四、属性设置阶段初始化阶段六、使用阶段七、销毁阶段 引言&#xff1a; Java Bean是Java编程中经常使用的重要概念&#xff0c;它是可重用、可移植、可序列化的组件。在Java开发中&#xf…

最新的外贸自建站教程?做外贸如何建网站?

外贸自建站教程步骤有哪些&#xff1f;海洋建站如何做网站搭建&#xff1f; 想要了解关于外贸自建站的最新教程吗&#xff1f;外贸自建站不再是高不可攀的难题&#xff0c;相反&#xff0c;它为企业提供了更多的机会和自主掌握业务的空间。海洋建站将为您提供一份全面的指南&a…

Android 编译的配置文件:android.mk 和android.bp

Android.bp文件首先是Android系统的一种编译配置文件&#xff0c;是用来代替原来的Android.mk文件的。在Android7.0以前&#xff0c;Android都是使用make来组织各模块的编译&#xff0c;对应的编译配置文件就是Android.mk。在Android7.0开始&#xff0c;Google引入了ninja和kat…