再会, 哈伯!
今天给大家分享一种使用方法
介绍
对于 IT 界来说,DevOps 这样的缩写已经不是什么新鲜事了。 对于许多人来说,“do DevOps”这个短语与某种神奇的按钮相关联,当单击时,应用程序代码会自动变成已部署和测试的应用程序(一切实际上更复杂,但我们正在从所有流程中抽象出来)。
因此,我们收到了一份订单,制作这样一个神奇的按钮,以便管理员可以一键部署应用程序。 此任务有多种实现方式:从为任何即时消息程序编写机器人到开发单独的应用程序。 尽管如此,所有这些都有相同的目标 - 使应用程序的构建和部署开始尽可能透明和方便。
在我们的例子中,我们将使用 詹金斯.
任务
创建一个方便的 Jenkins 作业,该作业将启动特定版本的选定微服务的构建和(或)部署。
输入数据
我们有几个包含各种微服务源代码的存储库。
定义参数
应接收以下参数作为我们作业的输入:
- 存储库的 URL,其中包含我们要在运行作业时构建和部署的微服务代码。
- 将进行构建的提交的 ID。
AS IS
完成此任务的最简单方法是创建两个 String 类型的参数。
在这种情况下,用户将需要手动输入存储库的路径和提交 ID,您会发现这并不完全方便。
未来
现在让我们尝试另一种类型的参数来考虑它的所有优点。
让我们创建类型为 Choice Parameter 的第一个参数,第二个参数 - Active Choices Reactive Reference Parameter。 在 Choice 类型的参数中,我们将在 Choices 字段中手动添加存储微服务代码的存储库的名称。
如果读者喜欢这篇文章,那么在下一篇文章中我将描述Jenkins中配置任务的过程,采用通过代码描述(Configuration as code)的方式,即我们不需要手动输入存储库名称并创建参数,一切都会自动发生(我们的代码将从 SCM 接收存储库列表并使用此列表创建参数)。
第二个参数的值将动态填充,具体取决于第一个参数采用的值(test1 或 test2),因为每个存储库都有自己的提交列表。
主动选择 反应参考参数 有以下字段需要填写:
- 名字 – 参数名称。
- 脚本 – 每次引用参数字段中的参数值发生更改时将执行的代码(在我们的例子中,当我们在 test1 和 test2 之间进行选择时)。
- 产品描述 – 参数的简要描述。
- 选择类型 – 脚本返回的对象类型(在我们的例子中,我们将返回 html 代码)。
- 参考参数 – 参数的名称,当其值更改时,将执行脚本部分的代码。
让我们直接填写该参数中最重要的字段。 我们提供两种类型的实现可供选择:使用 Groovy 脚本 или 脚本编写器脚本.
我们选择第一个,因为 Scriptler 只是一个插件,可以保存您之前编写的脚本,并允许您在其他任务中使用它们而无需再次复制粘贴。
用于从所选存储库获取所有提交的 Groovy 代码:
AUTH = "логин и пароль в Base64"
GIT_URL = "url до вашей SCM (https://bitbucket.org/)"
PROJECT_NAME = "имя проектной области, где находятся репозитории"
def htmlBuild() {
html = """
<html>
<head>
<meta charset="windows-1251">
<style type="text/css">
div.grayTable {
text-align: left;
border-collapse: collapse;
}
.divTable.grayTable .divTableCell, .divTable.grayTable .divTableHead {
padding: 0px 3px;
}
.divTable.grayTable .divTableBody .divTableCell {
font-size: 13px;
}
</style>
</head>
<body>
"""
def commitOptions = ""
getCommitsForMicroservice(MICROSERVICE_NAME).each {
commitOptions += "<option style='font-style: italic' value='COMMIT=${it.getKey()}'>${it}</option>"
}
html += """<p style="display: inline-block;">
<select id="commit_id" size="1" name="value">
${commitOptions}
</select></p></div>"""
html += """
</div>
</div>
</div>
</body>
</html>
"""
return html
}
def getCommitsForMicroservice(microserviceRepo) {
def commits = [:]
def endpoint = GIT_URL + "/rest/api/1.0/projects/${PROJECT_NAME}/repos/${microserviceRepo}/commits"
def conn = new URL(endpoint).openConnection()
conn.setRequestProperty("Authorization", "Basic ${AUTH}")
def response = new groovy.json.JsonSlurper().parseText(conn.content.text)
response.values.each {
commits.put(it.displayId, it.message)
}
return commits
}
return htmlBuild()
无需赘述,此代码接收微服务名称 (MICROSERVICE_NAME) 作为输入并向 到位桶 (方法 getCommitsForMicroservice)使用其 API,并获取给定微服务的所有提交的 ID 和提交消息。
正如前面提到的,这段代码应该返回将显示在页面上的 html 使用参数构建 在 Jenkins 中,因此我们将从 Bitbucket 接收到的所有值包装在一个列表中,并将它们添加到 select。
完成所有步骤后,我们应该得到一个如此漂亮的页面 使用参数构建.
如果您选择 test1 微服务:
如果您选择 test2 微服务:
同意用户以这种方式与你的任务交互会比每次复制 url 并查找所需的提交 id 方便得多。
PS 本文提供了一个非常简化的示例,在这种形式下可能没有实际用途,因为程序集具有更多不同的参数,但本文的目的是展示该工具的工作原理,而不是提供可行的解决方案。
PSS 正如我之前写的,如果这篇文章有用,那么下一篇将是关于 通过代码动态配置 Jenkins 任务.
来源: habr.com