IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> jenkins把pipeline从源码剥离单独git仓库管理 -> 正文阅读

[系统运维]jenkins把pipeline从源码剥离单独git仓库管理

Jenkins-Pipeline实践浅谈 - 知乎

Pipeline 实践:将 Jenkinsfile 与项目分离 - 简书

Jenkinsfile之伤

在Pipeline中至关重要的就是Jenkinsfile,类似Dockerfile,包含了Job所有需要执行的步骤,根据Pipeline的使用规则,我们常常需要把Jenkinsfile文件放到对应工程代码的根目录,Jenkins在获取工程代码后会解析Jenkinsfile,然后根据代码顺序执行下去,达到持续集成的效果。

但是这种模式有一个致命的缺点:

所有的Jenkinsfile分散到不同的工程中,对于后期的维护和功能扩展成本会非常高

实际操作:? 参考:?https://github.com/jenkinsci/pipeline-multibranch-defaults-plugin

1 先在Jenkins的Managed Jenkins的?Managed files?下添加默认的pipeline:

Id:? ?default-jenkinsfile

?
#!/usr/bin/env groovy
import groovy.transform.Field

@Field def job_name=""

node()
{
   // 获取当前job名称。也可以按需自定义
   job_name="${env.JOB_NAME}".replace('%2F', '/').split('/')
   job_name_to_list = job_name[0].split('-')
   project = job_name_to_list[0]
   service =  ""
   for(int i=1;i<job_name_to_list.size();i++){
      if(i==job_name_to_list.size()-1){
         service = service.concat(job_name_to_list[i])
      }else{
         service= service.concat(job_name_to_list[i]).concat("-")
      }
   }
    println("job_name is: $env.JOB_NAME")
    println("project is: $project")
    println("service is: $service")
    // 自定义workspace
    workspace="/home/.jenkins/workspace/${project}-${service}_${env.BRANCH_NAME}"

    ws("$workspace")
    {
        dir("cicd")
        {   
            // clone Jenkinsfile项目
            git credentialsId: 'gitee_account', url: 'https://gitee.com/cmlfxz/cicd.git'

            // 根据job name、构建分支,自动加载对应的Jenkinsfile
            def check_groovy_file = ""
            if (env.BRANCH_NAME == 'develop') {
                check_groovy_file="${project}/${service}/test/Jenkinsfile"
            }else if (env.BRANCH_NAME == 'master'){
                check_groovy_file="${project}/${service}/prod/Jenkinsfile"
            }
            load "${check_groovy_file}"
        }
    }
}

?

这段代码不能照抄,必须根据自己的job name和工程目录进行修改,而且必须反复测试,很繁琐,没招,每次修改还得approve一下.

我的jenkins Job name如下图是以项目名-服务名命名的??default-jenkinsfile的前面那段就是提取项目名和服务名出来,然后下载公共的git文件到每个job的cicd目录下,然后根据分支名调用不用项目和服务的不同分之下的jenkinsfile

其中dir("cicd")是把jenkins的独立git文件下载到每个job中的cicd目录下,? 每个job一份,如果是各个job共享一个目录会有问题,啥问题没记下来.

2? 新建Multibranch pipeline job,job名称保持和步骤1中的"项目名称"一致。 Build Configuration 中选择by default Jenkinsfile,输入步骤1中的script ID。

我的git独立仓库的目录结构:

https://gitee.com/cmlfxz/cicd

?

vars下面就封装了拉代码,钉钉通知和sonar的函数 src目录实践中没用到

yaml文件我目前是用helm组织的,最早使用kustomize, 同时使用了小技巧解决helm install? upgrade出现各种资源冲突问题,可以看

helm的骚操作,一般人我不告诉他

如果你有别的处理办法,欢迎留言告知.

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-16 20:02:05  更:2021-10-16 20:04:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:22:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码