jenkins把pipeline从源码剥离,单独git仓库管理

本文探讨了Jenkins Pipeline中Jenkinsfile分散管理的问题,并提出了一种解决方案:通过在Jenkins中创建默认的Pipeline脚本,结合Multibranch Pipeline Job,实现Jenkinsfile的集中管理和动态加载。这种方法降低了后期维护和功能扩展的成本,同时也解决了不同分支调用不同Jenkinsfile的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的骚操作,一般人我不告诉他

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

### 如何使用 pip 安装 Python 第三方库 #### 基本概念 `pip` 是 Python 的官方包管理工具,用于管理安装第三方库。它支持多种操作系统(如 Windows、Linux macOS),并可以通过简单的命令完成库的安装。 #### 默认安装方式 最基本的 `pip` 安装方式如下所示: ```bash pip install 库名 ``` 例如,要安装 `requests` 库,可以直接运行以下命令[^1]: ```bash pip install requests ``` #### 解决网络问题的方法 由于默认情况下 `pip` 会连接到国外的 PyPI 源进行下载,这可能会因为网络原因导致安装失败。为了提高成功率速度,建议使用国内镜像源。以下是常见的国内镜像源及其用法: - **清华大学开源软件镜像站** ```bash pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple ``` - **阿里云镜像** ```bash pip install 库名 -i http://mirrors.aliyun.com/pypi/simple/ ``` - **中国科学技术大学镜像** ```bash pip install 库名 -i https://pypi.mirrors.ustc.edu.cn/simple/ ``` 例如,如果想通过清华大学镜像源安装 `numpy`,可以执行以下命令[^3]: ```bash pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple ``` #### 配置全局镜像源 为了避免每次都需要指定 `-i` 参数,还可以配置全局使用的镜像源。具体操作如下: 编辑或创建文件 `~/.pip/pip.conf` (Windows 用户可以在 `%APPDATA%\pip\pip.ini` 中找到)。然后添加以下内容: ```ini [global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple ``` 这样以后所有的 `pip install` 命令都会自动使用清华大学的镜像源。 #### 升级 pip 工具本身 有时旧版本的 `pip` 可能会出现兼容性问题或其他错误,因此定期升级 `pip` 很重要。可以使用以下命令更新至最新版本: ```bash pip install --upgrade pip ``` 或者针对特定库进行升级: ```bash pip install --upgrade 库名 ``` #### 查看已安装的库列表 若需查看当前环境中已安装的所有库,可运行以下命令: ```bash pip list ``` #### 显示某个库的具体信息 如果需要查询某一个库的相关细节,比如其依赖关系或版本号,则可以用以下指令: ```bash pip show 库名 ``` --- ### 示例代码 假设我们需要安装 `flask` 并验证是否成功,完整的流程可能如下: ```bash # 正常安装 flask pip install flask # 或者使用清华镜像加速安装 pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple # 测试 Flask 是否正常工作 python -c "import flask; print(flask.__version__)" ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_36013896

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值