我们今天讨论下如何将K8S中部署的Jenkins利用好,做到和Git集成,直接检测到变化,自动进行部署

首先需要在Git上创建一个私库

然后给Git的私库配置一个公钥,我们本地保存私钥

比如GitLab上fork一个ruoyi的项目

Ruoyi这个也是老熟人了,比如就使用了mysql的docker-entrypoint-initdb.d文件夹,来在docker启动的时候加载这个目录下的sql文件

接下来我们就利用这个私库,做到有pull等git动作的时候,自动发送webhook到jenkins进行通知,Jenkins拉取检测变更,然后打包部署

在这之前,我们需要给Jenkins安装插件,方便获取WebHook中的信息

https://plugins.jenkins.io/generic-webhook-trigger/

安装完成,需要分别打通,Git -> Jenkins和 Jenkins->Git两方面沟通问题

首先是Jenkins 到 Git, 因为我们将本地私钥对应的公钥放在了Git上,那我们也将本地私钥放在Jenkins上,也就可以访问Git了

所以在Jenkins上配置私钥

在系统 -> 全局凭据 -> add credentials

然后是Git访问Jenkins

我们参照插件文档上的提示,配置一个Token

图片

然后配置Jenkins本地host

图片

之后便是在git上配置webhook地址,携带参数便是token

之后我们看我们Jenkins的文件

首先分为三个大块,

Pipeline{

agent any

Environment{}

Triggers{}

Stages{}

}

分别是生成环境变量,确定构建的项目

然后进行构建,打包需要打包的项目

环境变量这个由自己根据环境配置

主要是Triggers流程

也就是WebHook触发的流程,可以由任何分支触发,交给Jenkins进行自动化打包部署

然后我们首先获取所有更改的文件

GenericVariables: [

[key: ‘added’,value: ‘$.commits[*].added’]

]

然后分别将所有修改的文件组成一个文档

Def matcher= “${modified}” + ”,” + “${added}” + “,” + “${removed}” =~ /[\[\]}]/

选择这些文件中的[]

然后替换空格为,

Def changes= match.replaceA(‘’).split(“,”)

并组成一个数组

HashSet h = new HashSet();

For (change in changes) {

Int I = change.indexOf(‘/’)

If(I > 0){

Change = change.substring(0,i)

}

}

利用上述的方式,我们获取到了有哪些子项目被改变了

获取到了之后,判断是否有些common的子项目被改变了

For (baseChange in “${BASE_PROJECTS}”.split’(“,)){

Def mm = matcher.replaceAll(‘’).contains(baseChange)

If (mm){

BASE_PROJECTS_CHANGED = mm.toString()

}

}

并且保存我们所有的改变的项目

CHANGED_PROJECTS = result.join(“,”)

ORIGIN_CHANGED_PROJECTS = change.join(“,”)

后边便是根据这个变更的项目列表,进行打包了

在打包的过程中,如果出现了无法将项目目录进行上下文传递的时候

可以考虑使用 Jenkins提供的stash和unstash命令

图片

stash includes: ‘**/**’, name: ‘projectfile’

unstash ‘projectfile’

来进行上下文的传递

并将打包好的jar包进行一个上下文的传递

发表评论

邮箱地址不会被公开。 必填项已用*标注