如何在Slack中将字符串传递给Jenkins作业

99次阅读
没有评论

问题描述

在理想情况下,我们不太熟悉技术的员工可以使用Slack命令来运行作业,并将结果发送回给他们,避免使用Jenkins GUI。我在GitHub上找到了一个名为“使用Slack命令在Jenkins中启动构建”的项目,但它有一些限制,包括似乎需要1:1比例的Heroku实例与Jenkins作业,这对于我们的目的并不是很理想。
我的想法是让人们使用一个单一的命令,比如/jenkins,然后在命令后面使用参数,这些参数将由一个作业解析,并用于启动其他下游作业。这样我们可以只使用一个Slack命令/一个实例,但仍然可以满足我们所需的所有灵活性。

然而,问题在于如何将这些参数传递给Jenkins。我设想的工作流程如下:
1. 用户在Slack中输入/Jenkins job2 param1 param2。这会调用一个“总管作业”,该作业将解析参数以找出要运行的内容。
2. 命令以某种方式发送到总管Jenkins作业。可以是Heroku实例、直接集成等。
3. 总管作业将字符串job2 param1 param2作为一个字符串接收。(可能作为单个参数的值,也可能预先拆分为多个字段)
4. 总管作业如果尚未拆分字符串,则将其拆分,并确定用户想要运行job2,并使用参数param1param2
5. 总管作业进行一个构建作业,以根据调用运行下游作业,然后将结果通过Slack发送给用户。

问题在于步骤2和步骤3。我该如何将带有空格的字符串从Slack传递给我的Jenkins作业呢?

如果我的整体前提是错误的,我也可以接受对我的构想进行挑战。

解决方案

请注意以下操作可能存在版本差异及修改前做好备份。

方案1:使用插件在Slack中启动Jenkins作业

您所找到的插件没有Heroku实例与构建作业之间的1:1比例,因为它将作业名称作为参数,所以您应该可以从单个Heroku实例运行任意数量的作业。

关于传递带有空格的作业参数,插件会在空格上进行拆分,拆分在这一行进行,因此添加引号并不会改变任何内容。您可以尝试使用HTML空格字符%20,看看是否有效?

个人建议是直接使用插件来直接运行正确的作业以及相关参数,而不是通过筛选作业来实现。

方案2:使用脚本在Jenkins中处理参数

另一种方法是编写脚本来处理来自Slack的参数,并将它们传递给Jenkins作业。您可以使用bash脚本或其他编程语言来实现这个过程。

以下是一个bash脚本示例,用于将参数传递给Jenkins作业:

#!/bin/bash
# 从Slack中获取参数
slack_params="$@"
# 调用Jenkins作业并传递参数
java -jar jenkins-cli.jar -s http://your-jenkins-url/ build "Your Job Name" -p "param1=$slack_params"

在这个示例中,我们首先将Slack传递的参数存储在一个变量中。然后,我们使用Jenkins的CLI工具(需要下载jenkins-cli.jar并放置在脚本目录中)来启动作业并将参数传递给它。

请注意,这只是一个简单的示例,实际上可能需要根据您的情况进行调整。确保您已经在Jenkins中配置了相应的作业和参数。

请根据您的需求选择适合您的方案,并进行测试,确保其适用性。

正文完