You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求Unix Shell脚本帮助:转换Jenkins URL至指定路径格式

解决Jenkins URL到日志路径的转换问题

我来帮你搞定这个Shell脚本的转换需求。基于你已经完成的第一步截取,我们可以通过组合几个文本处理命令,一步到位得到目标格式的日志路径。

完整解决方案

# 假设你的Jenkins URL已经存在于变量build_url_val中
build_url_val="https://jenkinsurl.com/job/GitHub%20Organization%20Scans/job/Project_Dev/job/reponame/job/dev/72/"

# 生成最终的日志路径
final_log_path=$(printf "%b" "$(echo "$build_url_val" | cut -d'/' -f5-)" | 
  sed -e 's/\(\/\)job\(\/\)/\1jobs\2/g' \
      -e 's/jobs\/dev\//branches\/dev\//' \
      -e 's/\/[0-9]*\//\/builds\/$BUILD_NUMBER\/log/' | 
  awk '{print "/var/jenkins_home/jobs/"$0}'
)

# 输出结果
echo "$final_log_path"

执行后会输出:

/var/jenkins_home/jobs/GitHub Organization Scans/jobs/Project_Dev/jobs/reponame/branches/dev/builds/$BUILD_NUMBER/log

分步解释

  1. 截取URL核心部分:cut -d'/' -f5- 去掉URL开头的https://jenkinsurl.com/,得到GitHub%20Organization%20Scans/job/Project_Dev/job/reponame/job/dev/72/。
  2. 解码URL空格:printf "%b" 将URL编码的%20转换为实际空格,处理后变为GitHub Organization Scans/job/Project_Dev/job/reponame/job/dev/72/。
  3. 替换job为jobs:sed 's/\(\/\)job\(\/\)/\1jobs\2/g' 只替换被斜杠包围的job为jobs,避免误替换路径中包含job的名称,处理后得到GitHub Organization Scans/jobs/Project_Dev/jobs/reponame/jobs/dev/72/。
  4. 调整分支路径:sed 's/jobs\/dev\//branches\/dev\//' 将分支部分的jobs/dev/替换为目标格式的branches/dev/。
  5. 替换构建号:sed 's/\/[0-9]*\//\/builds\/$BUILD_NUMBER\/log/' 将最后的数字构建号替换为变量占位符$BUILD_NUMBER,并补充日志路径后缀。
  6. 拼接前缀:awk '{print "/var/jenkins_home/jobs/"$0}' 加上Jenkins日志存储的根路径前缀,得到最终完整路径。

更灵活的awk版本(无需硬编码分支名)

如果你需要适配不同分支名(不只是dev),可以用awk脚本自动识别分支位置:

final_log_path=$(echo "$build_url_val" | awk -F'/' '
  BEGIN {OFS="/"}
  {
    # 从第5个字段开始遍历处理
    for (i=5; i<=NF; i++) {
      gsub(/%20/, " ", $i)  # 解码URL空格
      # 替换job为jobs,仅当不是分支前的最后一个job
      if ($i == "job" && i != NF-2) {
        $i = "jobs"
      } else if ($i == "job" && i == NF-2) {
        $i = "branches"  # 分支前的job替换为branches
      }
    }
    $(NF-1) = "builds/$BUILD_NUMBER/log"  # 替换构建号部分
    NF--  # 移除结尾的空字段
    print "/var/jenkins_home/jobs", $0  # 拼接前缀输出
  }
')

这个版本会自动识别URL中倒数第二个job(对应分支的父节点)并替换为branches,不管分支名是什么都能适配。

内容的提问来源于stack exchange,提问作者Karthik P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 07:53:11