修改构建的 Jenkins 描述

2023-12-02

我想remotely更改 Jenkins 构建描述。我的脚本已全部准备就绪,除了一个小问题:多行描述。

我在 Jenkins 中使用 REST API 和 JSON 来下载旧的描述:

old_description=$(curl -s --user "$USER:$PASSWORD" --data-urlencode "tree=description" \
    "$jenkins_url/job/$job_name/$build_number/api/json")

old_description=${old_description#*:\"} #Remove JSON garbage
old_description=${old_description%\"\}} #Remove JSON garbage

`curl 命令拉出:

<font color=blue><b>At first you don't succeed. Try again</b></font><br/>
\r\n<font color=gold><b>At first you don't succeed. Try again</b></font><br/>
\r\n<font color=green><b>At first you don't succeed. Try again</b></font>

(Note:我添加了换行符以使上面的内容更易于阅读。这是作为单行拉出的)。

The \r\n是单独的行,所以我这样做:

old_description=$(sed 's/\\r\\n/\
/g' <<<$old_description)

这改变了$old_description to:

font color=blue><b>At first you don't succeed. Try again</b></font><br/>
<font color=gold><b>At first you don't succeed. Try again</b></font><br/>
<font color=green><b>At first you don't succeed. Try again</b></font>

(NOTE:新行是值的一部分。这是三行描述。)

我的程序(取决于命令行参数)可以替换、追加或在构建之前添加新的描述:

if [ "$prepend_flag" -a -n "$old_description" ] #Prepend new description to old description
then
    new_description="$new_description<br/>
$old_description"
elif [ "$append_flag" -a -n "$old_description" ] #Append new description to old description
then
   new_description="$old_description<br/>
$new_description"
fi

现在,我将重做描述:

if curl -u $USER:$PASSWORD   --data-urlencode "description=$new_description" \
    --data-urlencode "Submit=Submit" \
    "$jenkins_url/job/$job_name/$build_number/submitDescription"
then
    echo "Description successfully changed on Build #$build_number in Jenkins job $job_name"
else
    echo "WARNING: Description was not set. Manually change the descripiton of the build"
    echo "         for Build #$build_number in Jenkins job $job_name"
fi

如果我第一次在前面或附加新的描述,我会在 Jenkins 中得到以下信息:

<font color=blue><b>At first you don't succeed. Try again</b></font><br/>
<font color=gold><b>At first you don't succeed. Try again</b></font><br/>
<font color=green><b>At first you don't succeed. Try again</b></font><br/>
<font color=red><b>My new description</b></font><br/>

看起来不错。下次再这样就不行了。我明白了:

<font color=blue><b>At first you don't succeed. Try again</b></font><br/>\n<font color=gold><b>At first you don't succeed. Try again</b></font><br/>\n<font color=green><b>At first you don't succeed. Try again</b></font><br/>\n<font color=red><b>My new description</b></font><br/>
<font color=blue><b>My new new description</b></font>

请注意\n出现。

我该如何解决这个问题?

我已经把整个程序放进去了pastebin.


我玩这个玩了好久...

首先,不要这样做:

    new_description="$new_description<br/>
$old_description"

要附加或前置该行,我使用了printf:

new_description="$(printf "$new_description\r\n$old_description")"

通过使用printf,我放了一个<CR><LF>而不仅仅是一个<LF>在我的描述行分隔符中。这样我就不会有一堆乱七八糟的东西了<NL> and <CR><NL>我不再依赖操作系统对换行符的定义。

The sed命令花了我很长时间才弄清楚。我尝试了各种各样的事情:

old_description=$(sed 's/\\r\\n/\r\n/g' <<<$old_description)

但是,似乎没有任何作用......我尝试了-E允许我使用的标志extended正则表达式,但它一直在解释\r\n作为替换\\r\\n with literal 'rn.

经过几个小时,我终于尝试使用双引号而不是单引号:

old_description=$(sed "s/\\r\\n/\r\n/g" <<<$old_description)

成功了!通常在 sed 中使用单引号来保护正则表达式免遭插值。然而,单引号也杀死了插值\r\n as <CR><LF>。用双引号更改它们解决了问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

修改构建的 Jenkins 描述 的相关文章

  • 如何使用 bash 锁定文件

    我有一个任务从远程服务器同步目录 rsync av email protected cdn cgi l email protection srv data srv data 为了使其定期运行并避免脚本 reEnter 问题 我使用 rsyn
  • .profile 无法从 Mac 终端运行

    我有一个 profile 文件 我正在终端中读取并使用别名 但在某些时候 别名由于没有明确的原因而停止工作 其他命令仍在工作 为了快速修复 我删除了 rm 并在用户目录中重新创建了 profile 文件 我可以看到 至少在该目录中没有 ba
  • Jenkins:尽管没有变化,SCM 仍然触发持续构建

    我们遇到一个问题 尽管没有代码更改 SCM 仍在触发构建 SCM 每 15 分钟轮询一次更改 并且仅在发现更改时才触发构建 以下是连续 SCM 轮询日志的几个示例 Started on Nov 15 2013 11 47 14 AM Usi
  • 如何制作一个 bash 脚本来同时创建 40 个程序实例?

    我是新来的bash and Linux 我编写了一个程序 我想创建多个同时实例 现在 我通过打开 10 个新终端 然后运行该程序 10 次 我运行的命令是php home calculatedata php 使用 bash 脚本执行此操作的
  • Jenkins 和 Github 不使用 SSH 密钥

    我已将 Jenkins 设置为从 Github 上的私有存储库中提取特定作业 尽管我已经生成了私钥 公钥并将其作为部署密钥添加到 github 但 Jenkins 似乎并未使用 SSH 密钥 当我从 Jenkins 用户进行 git clo
  • Jenkins 可以检测到任何 svn 用户每次提交代码吗?

    Jenkins 可以检测到任何 svn 用户每次提交代码吗 我想知道每次 Jenkins 提交 svn user 时 有什么方法或 jenkins 插件吗 现在我用svn updateJenkins 中的 cmd 来更新 svn 您可以按照
  • 访问 jelly 模板中的自定义环境变量

    使用 Jenkins 管道 您可以通过以下方式设置任何环境变量全局变量称为 env 果冻模板反过来 您可以访问 Jenkins API 包括hudson model AbstractBuild and hudson model Abstra
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • grep 两个分隔符之间的子字符串

    我有很多bash使用的脚本perl内的表达式grep为了提取两个分隔符之间的子字符串 例子 echo BeginMiddleEnd grep oP lt Begin End 问题是 当我将这些脚本移植到运行的平台时busybox 融合的 g
  • 将相对符号链接转换为绝对符号链接

    如何在 bash 中递归地将相对符号链接转换为绝对符号链接 ln sf readlink f link link
  • 迭代 bash 脚本中的变量名称

    我需要在一堆文件上运行一个脚本 这些文件的路径被分配给train1 train2 train20 我想 为什么不使用 bash 脚本使其自动执行呢 所以我做了类似的事情 train1 path to first file train2 pa
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • OSX bash 最小化窗口

    在 Mac 中并使用 bash shell 我想执行一个包含单个命令 启动 Jupyter Lab 的文件并立即最小化终端窗口 有没有办法在不安装第三方软件的情况下做到这一点 是的 只需使用osascript https ss64 com
  • 如何从容器内运行 podman?

    我想跑podman https podman io作为运行 CI CD 管道的容器 但是 我不断从 podman 容器中收到此错误 podman info ERRO 0000 overlay is not supported over ov
  • 如何让 Jenkins、Sonar 和 JaCoCo 插件在 Eclipse Tycho 插件项目(或者 Cobertura)中协同工作?

    我的设置是 詹金斯 1 448 声纳2 13 詹金斯声纳插件 1 72 Sonar 的 MySql 数据库 我有以下项目 Eclipse 插件项目 使用Maven 多个模块 父级 Maven 项目 源插件项目 测试片段项目 一个简单的 JU
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • PHP cURL 重定向到本地主机

    我正在尝试使用带有 cURL 的 php 脚本登录外部网页 我是 cURL 的新手 所以我觉得我错过了很多东西 我找到了几个例子并修改了它们以允许访问https页面 最终 我的目标是能够登录页面并在登录后通过指定的链接下载 csv 到目前为
  • 当 grep "\\" XXFile 我得到“尾随反斜杠”

    现在我想查找是否有包含 字符的行 我试过grep XXFile但它暗示 尾随反斜杠 但当我尝试时grep XXFile没关系 谁能解释一下为什么第一个案例无法运行 谢谢 区别在于 shell 处理反斜杠的方式 当你写的时候 在双引号中 sh
  • 将 stdout 和 stderr 重定向到带有前缀的单个文件

    我正在编写一个 bash 脚本 需要重定向stdout and stderr我运行到单个文件的命令的输出 在每行前面加上前缀stderr or stdout 因此 有没有一个简单的方法可以做到这一点 from Debian http www
  • Bash 正则表达式——似乎无法匹配任何 \s \S \d \D \w \W 等

    我有一个脚本试图从 gparted 获取信息块 我的数据如下所示 Disk dev sda 42 9GB Sector size logical physical 512B 512B Partition Table msdos Number

随机推荐

  • 使用 Spinner 时禁用 setSystemUIVisibility 全屏

    我在用 View root findViewById android R id content root setSystemUiVisibility View SYSTEM UI FLAG FULLSCREEN 使我的应用程序全屏显示 它工
  • Xcode 6 - 从命令行启动模拟器

    我想从命令行启动 iPhone 模拟器 到目前为止我一直在使用下面的命令 Applications Xcode app Contents Developer Platforms iPhoneSimulator platform Develo
  • 如何将数组作为参数列表传递

    Ruby s 文档将方法签名显示为 start with prefixes true or false 对我来说这看起来像一个数组 但事实并非如此 您可以传递单个字符串或各种字符串作为参数 如下所示 hello start with hea
  • 加载 rJava 库时“无法加载共享对象”

    我必须在 R 上加载 Excel 文件 xlsx 但是 library xlsx 错误 rJava 的包或命名空间加载失败 onLoad 在 rJava 的 loadNamespace 中失败 详细信息 调用 inDL x as 逻辑 本地
  • 使用 MapReduce 查找大整数集的中值

    是否有一种快速算法可以在 MapReduce 框架上运行以从巨大的整数集中找到中位数 我就是这样做的 这是顺序快速选择的一种并行版本 某些映射 归约工具可能无法让您轻松完成任务 选择输入集中的一个任意小块 按顺序对此进行排序 我们将并行地将
  • Python:float() 参数必须是字符串或数字,而不是“pandas”

    有以下代码段 我试图通过它来绘制图表 import pandas as pd import numpy as np import matplotlib pyplot as plt import mpld3 my list 1 2 3 4 5
  • 计算列表中唯一单词的数量

    使用以下代码https stackoverflow com a 11899925 我能够找到一个单词是否唯一 通过比较它是否使用过一次或多次 helloString hello world world count for word in h
  • 量角器不被识别为内部或外部命令、可操作程序或批处理文件

    我在 Windows 从机上安装了量角器 我正在尝试使用运行我的脚本node index js 如果我从詹金斯触发作业来运行上面的命令 它会给出类似的错误Protractor is not recognized as an internal
  • Xamarin tf.lite 输入对象

    我试图在 xamarin 上重现张量流对象检测 private MappedByteBuffer LoadModelFile AssetFileDescriptor fileDescriptor Assets OpenFd detect t
  • 如何使 Bootstrap 列的高度相同?

    我正在使用引导程序 如何使三列高度相同 这是问题的屏幕截图 我希望蓝色和红色的柱子与黄色柱子的高度相同 这是代码 div class container fluid div class row div class col xs 4 pane
  • Spring Boot 中的 @AuthenticationPrincipal 不起作用

    使用 Spring Boot 1 3 1 我遇到了问题 AuthenticationPrincipal 这是我的控制器 RestController RequestMapping api user public class UserCont
  • 预处理器宏代码生成的 C++ 替代方案?

    我收集了大约 50 个小型的 结构非常相似的类 一切都源于一个共同的基础 类代表读入的项目 来自文件中的字符串对 其中第一个字符串用于标识 该对的类型 应使用哪个派生类来表示数据 和 第二是数据本身 还有一个访客 如访客模式中所示 与派生类
  • 在 C# 中验证列表

    我们正在使用DataAnnotations验证我们的模型 我们模型的一个非常简化的版本是 public class Model public List
  • 从内存中删除 ArrayList 对象

    我有一堆对象ArrayList 如果我打电话ArrayList remove object 我还需要做其他事情来从内存中删除该对象吗 我以相当快的速度从此列表中添加和删除对象 因此如果它没有从内存中删除 它将开始占用空间并开始减慢游戏速度
  • 有没有理由不发送 super().__init__() 字典而不是 **kwds ?

    我昨天刚刚开始构建一个基于文本的游戏 作为学习 Python 的练习 我使用的是 3 3 我说的是 基于文本的游戏 但我的意思更多的是 MUD 而不是选择你自己的冒险 不管怎样 当我弄清楚如何使用处理继承和多重继承时 我真的很兴奋super
  • Php 中的 IMAP:将消息标记为未读/未见

    我想在 php 中创建一个脚本来从邮件帐户读取所有邮件 我连接到服务器 我可以看到邮件 但我想将其设置回不可见状态 但找不到执行此操作的功能 如果我正确理解此页面 http www php net manual en function im
  • 如何绘制 pandas 计数的分组条形图

    我有一个包含以下列的数据框 gender class male A female A male B female B male B female A 我想绘制一个双条形图 其中列作为每个性别 值分别作为 A 类和 B 类中每种性别的数量 因
  • 如何使用asp.net获取负载均衡机上的访客IP

    我们有两个负载平衡服务器 我们现在托管了一个 asp net 3 5 应用程序 我们正在使用请求 userhostaddress 来获取访问者 ip 但它提供的是负载均衡器 ip 而不是真实 ip 任何人都可以有这方面的代码吗 我认为您不仅
  • xhr send - 发送文件和 CSRF 令牌

    我正在尝试使用 XMLHttpRequest 将文件对象和字符串 CSRF 令牌 发送到服务器 但我似乎无法弄清楚如何添加令牌 xhr open POST form action true xhr setRequestHeader X FI
  • 修改构建的 Jenkins 描述

    我想remotely更改 Jenkins 构建描述 我的脚本已全部准备就绪 除了一个小问题 多行描述 我在 Jenkins 中使用 REST API 和 JSON 来下载旧的描述 old description curl s user US