jenkins 自定义描述信息

我们在使用 Jenkins 构建的时候,有时候需要提供一个构建好的文件包的下载地址给协作者下载使用。而不是每次都点击进去 workspace 的指定位置下载。

那么,配合 Jenkinsfile,我们需要怎么做呢?

我们的 Demo 环境:

  • MacBook Air (M1, 2020)
  • dist : 一份构建好的 dist 包(这个可以随便什么都行)
  • Jenkins : 会频繁使用到其构建项目中的 Replay 功能进行调试
  • 测试服务 : 一个测试服务进行 SCP 的文件传输

自定义描述信息

我们可以通过使用 currentBuild.description 进行自定义描述。比如下面的简单使用:

bash 复制代码
# jenkinsfile
stage("Custom Description") {
  agent any;
  steps {
    script {
      currentBuild.description = "My custom build description"
    }
  }
}

构建成功后,我们可以看到构建的描述信息展示:

文件下载

既然,我们可以自定了文件的描述信息,那么我们可以参考 前端文件下载(一) 文章,通过 a 标签进行文件的下载。

  1. 生成压缩文件

我们将 dist 文件进行压缩。

bash 复制代码
# jenkinsfile
stage("Zip Dist File") {
  agent any;
  steps {
    script {
       # 压缩
       sh 'tar -czf worksapce.tar.gz dist/*'
       # 将 tar 文件缓存起来
       stash includes: 'workspace.tar.gz', name: 'workspace'
    }
  }
}

tar -czf worksapce.tar.gz dist/* 用于创建一个名称为 worksapce.tar.gz 的归档文件,其中包含了 dist 目录下的所有文件和子目录。

  • c 表示创建新的归档文件
  • z 表示使 gzip 进行压缩
  • f 表示指定文件名
  1. 指定下载的地址

上面我们生成了压缩的文件,但是该压缩文件是在文件系统中的工作空间的绝对路径上(即 env.WORKSPACE),比如 /var/jenkins_home/workspace/demo_project/worksapce.tar.gz。如果我们直接引用该地址,肯定是行不通的。

那么,我们需要怎么获取到压缩包的地址呢?

下面有有两种方案的思考🤔:

2.1 我们可以查看构建的地址存放的路径,比如自己构建的 demo 的路径在 ${env.BUILD_URL}execution/node/61/ws/ 然而,这里的 61 并不是固定的,而是动态生成,目前还不知道如何获取。懂的读者留言交流下,感谢~

2.2 移动下 worksapce.tar.gz 压缩文件的位置呢?这个我们来尝试下~

  • 将压缩文件上传到另外的服务上
  • 获取该压缩文件的超链接
  • 将超链接地址赋值给 a 标签 href 即可

当然,我们这些操作也可以在 jenkins 服务中完成

bash 复制代码
# jenkinsfile
stage("Upload File") {
  agent any;
  steps {
    sshagent(credentials: ["${credit_id}"]) {
      script {
        # 获取工作目录
        def workspacePath = pwd()
        sh """
          ls
            scp -r ${workspacePath}/workspace.tar.gz ec2-user@${env.SERVER_IP}:/usr/share/nginx/target_folder
          ls
        """
        # 自定义描述
        currentBuild.description = "<a href='https://domain_name.com/workspace.tar.gz'>点击下载 Workspace - dist 压缩包内容</a>"
      }
    }
  }
}

上面,我们通过 sshagent 带凭证通过信任,然后通过 scp 将打包的文 workspace.tar.gz 推送到我的目标机器 SERVER_IP(需要在 jenkins 上提前配置该变量)的 target_folder 目录下。然后我们通过访问目标机器压缩文件的地址 https://domain_name.com/workspace.tar.gz 实现文件的下载。

SCP(Secure Copy)是一种在计算机之间安全地传输文件的协议和命令。它是基于 SSH(Secure Shell) 协议的扩展,提供了文件的加密传输和身份验证功能。

我们构建下,可以看到效果:

点击链接下载:

总结

我们来总结下,使用到的整个核心代码:

bash 复制代码
# jenkinsfile 
stage("Zip Dist File") {
  steps { 
    script { 
      # 压缩 
      sh 'tar -czf worksapce.tar.gz dist/*' 
      # 将 tar 文件缓存起来 
      stash includes: 'workspace.tar.gz', name: 'workspace' 
    } 
  } 
}
stage("Upload File") {
  steps {
    sshagent(credentials: ["${credit_id}"]) {
      script {
        if(fileExists('dist')) {
            sh 'rm -rf dist'
        }
        
        # 从先前的构建中解压缩存储的文件 workspace
        unstash('workspace')
        
        # 获取工作目录
        def workspacePath = pwd()
        sh """
          ls
            scp -r ${workspacePath}/workspace.tar.gz ec2-user@${env.SERVER_IP}:/usr/share/nginx/target_folder
          ls
        """
        # 自定义描述
        currentBuild.description = "<a href='https://domain_name.com/workspace.tar.gz'>点击下载 Workspace - dist 压缩包内容</a>"
      }
    }
  }
}

连接两个 stage,我们使用了 stashunstash,因为考虑到使用的 agent 不同。

【✅】完,感谢读者能读到这里 🌹

相关推荐
周星星日记几秒前
10.vue3中组件实现原理(上)
前端·vue.js·面试
小华同学ai1 分钟前
6.4K star!轻松搞定专业领域大模型推理,这个知识增强框架绝了!
前端·github
Blockchain2 分钟前
从头开始使用 Go 构建 Orchestrator(第 六部分:指标)
后端·kubernetes
人猿泰飞3 分钟前
在Ubuntu-22.04.5中安装ONLYOFFICE DocSpace(协作空间)【注意:安装失败,谨慎参考!】
java·linux·运维·python·ubuntu·项目管理·onlyoffice
专业抄代码选手3 分钟前
【VUE】在vue中,Watcher与Dep的关系
前端·面试
CAE虚拟与现实4 分钟前
修改wsl中发行版Ubuntu的主机名
linux·运维·ubuntu·wsl·wsl2·修改主机名
iOS开发上架哦5 分钟前
mobileconfig文件ios怎么安装
后端
Blockchain6 分钟前
从头开始使用 Go 构建 Orchestrator(第五部分:Worker 的 API)
后端·kubernetes
开发小能手-roy7 分钟前
Ubuntu服务器性能调优指南:从基础工具到系统稳定性提升
linux·运维·服务器·ubuntu
Lazy_zheng7 分钟前
从 DOM 监听到 Canvas 绘制:一套完整的水印实现方案
前端·javascript·面试