持续集成交付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;主流的小程序框…

如何查看当前conda可供安装的所有pytorch版本

你可以使用以下命令在 Conda 中查看所有可用的 PyTorch 版本&#xff1a; conda search -c pytorch pytorch这将列出 pytorch 通道中的所有可用版本。请注意&#xff0c; -c pytorch 指定了 pytorch 通道&#xff0c;以确保搜索的是 pytorch 官方通道中的包。在输出中&#xf…

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

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

湘潭大学 软件需求分析 填空题 期末考试复习

说明 因为老师删减了一些内容&#xff0c;所以全部的考试内容如下 第一章 1.需求规格说明应精确的描述一个软件系统必须提供的功能和性能 2.我们应该知道需求工程是指应用工程化的方法&#xff0c;技术和规格来开发和管理软件的需求。需求工程的目标就是要获取高质量的软件需…

【开源】基于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…

离线配置conda环境

前言 最近有个小任务&#xff0c;就是需要在一台不可以联网的全新电脑上配置好环境&#xff0c;运行一个深度学习工程。 记录下自己的一些操作&#xff0c;用来将来使用。 看了网上的一些操作&#xff0c;包括 &#xff08;1&#xff09;直接拷贝整个envs的文件&#xff0c;然…

1-2-3图片的排列

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

Go打印行号和文件名

runtime.Caller func Caller(skip int) (pc uintptr, file string, line int, ok bool)Caller报告当前go程调用栈所执行的函数的文件和行号信息。实参skip为上溯的栈帧数&#xff0c;0表示Caller的调用者&#xff08;Caller所在的调用栈&#xff09;。函数的返回值为调用栈标识…

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

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

函数调用的形式写一个动态监控secure日志文件的sh脚本、过滤出secure日志异常用户名的ip并用iptables限制

文章目录 脚本说明脚本代码测试secure日志secure监测测试代码执行检测脚本验证上线代码放到定时任务中执行验证脚本说明 实现功能如下: 1、记录secure日志文件中登录失败的IP和其失败的次数2、记录secure日志文件中登录失败的IP并以数组的形式输出【因为iptables规则必须一次识…

在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配置路由功能及添加静态路由

一、配置路由功能 Linux作为路由器&#xff0c;Linux本身就具备路由功能&#xff0c;开启方式如下&#xff1a; 临时开启&#xff1a; echo "1" > /proc/sys/net/ipv4/ip_forward永久开启&#xff1a; vim /etc/sysctl.confnet.ipv4.ip_forward1 # 配置生效 sys…

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事件 后台使用案例