Jenkins Pipeline job – 记住先前的值

38次阅读
没有评论

问题描述

在使用Jenkins Pipeline时,遇到一个问题。他的Pipeline使用Terraform在GCP中创建计算环境。在构建过程中,有5个问题需要回答,包括:
1. GCP项目名称
2. RHEL服务器数量
3. RHEL服务器名称
4. CentOS服务器数量
5. CentOS服务器名称

这是一个标准的构建任务,如果用户不使用此构建任务,则无法构建服务器。

问题是,当用户返回请求更多服务器时,他们必须再次填写所有细节。他们必须记住之前传递的所有值。

所以问题是:如何使这个过程更加用户友好,而不是为每个GCP项目创建一个单独的构建任务并硬编码值。

解决方案

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

方案1

根据回答1,你可以使用Jenkins的Rebuild选项来重新构建上一次运行的作业,并保留参数的值。只需找到用户上次启动的作业的先前构建,点击进入,然后从侧边栏选择Rebuild。这样做只有在Jenkins保留足够的构建记录时才有效。你可以在作业配置中选择保留多少个构建记录。例如,你可以保留两周的构建记录。你还可以选择将某些“模板”构建记录保留永久,以便更容易访问。

方案2

另一种方法是使用Jenkins的参数化构建。你可以在构建任务中定义参数,并将其设置为默认值。这样,当用户重新构建作业时,他们只需要更改需要更改的参数值,而不必重新填写所有的参数。以下是如何设置参数化构建的步骤:
1. 在Jenkins中打开你的构建任务。
2. 在构建触发器部分,勾选“此构建是参数化的”选项。
3. 点击“添加参数”按钮,选择适当的参数类型(如字符串、布尔值等)。
4. 为每个参数设置默认值。
5. 点击保存并应用更改。

这样,当用户重新构建作业时,他们只需要更改需要更改的参数值,而不必重新填写所有的参数。

方案3

如果你想要更高级的解决方案,你可以使用Jenkins的Pipeline脚本来实现。你可以编写一个自定义的脚本,用于处理用户输入和参数的存储。以下是一个示例脚本的基本结构:

pipeline {
    agent any
    stages {
        stage('User Input') {
            steps {
                script {
                    // 获取用户输入
                    def userInput = input message: 'Please enter the required values', parameters: [
                        string(name: 'GCP_PROJECT_NAME', defaultValue: '', description: 'GCP Project Name'),
                        ...
                    ]
                    // 存储用户输入
                    storeUserInput(userInput)
                }
            }
        }
        stage('Build') {
            steps {
                // 使用存储的参数进行构建
                buildWithStoredParameters()
            }
        }
    }
}

def storeUserInput(userInput) {
    // 将用户输入存储到某个地方,如文件或数据库
    // 你可以使用Jenkins提供的插件或自定义脚本来实现
}

def buildWithStoredParameters() {
    // 从存储的地方获取参数值
    // 使用参数值进行构建
}

在上面的示例中,我们使用Jenkins的Pipeline脚本来处理用户输入和参数的存储。在”User Input”阶段,我们使用input步骤获取用户输入,并将其存储到某个地方(如文件或数据库)。在”Build”阶段,我们使用存储的参数值进行构建。

请注意,这只是一个示例脚本的基本结构,你可以根据自己的需求进行修改和扩展。

以上是几种解决方案,你可以根据自己的需求选择适合的方法来使构建过程更加用户友好。

正文完