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 不同。

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

相关推荐
King without kingdom3 小时前
面试题(三)
运维·服务器·网络
Sam90293 小时前
828华为云征文|Flexus云服务器X实例部署宝塔运维面板
运维·服务器·华为云
元素之窗4 小时前
如何在 CentOS 中管理用户、组和服务状态
linux·运维·centos
一生为追梦5 小时前
Linux 内存管理机制概述
前端·chrome
你不要在理我了5 小时前
weblogic CVE-2018-2894 靶场攻略
运维·服务器·安全
小理想!5 小时前
如何在Linux Centos7系统中挂载群晖共享文件夹
linux·运维·服务器
日晨难再5 小时前
Linux:终端(terminal)与终端管理器(agetty)
linux·运维·服务器
喝旺仔la5 小时前
使用vue创建项目
前端·javascript·vue.js
心.c5 小时前
植物大战僵尸【源代码分享+核心思路讲解】
前端·javascript·css·数据结构·游戏·html
小筱在线5 小时前
在SpringCloud中实现服务间链路追踪
后端·spring·spring cloud