当前位置: 首页 > 知识库问答 >
问题:

在 Jenkins CICD 管道中循环并在同一作业中调用另一个 JenkinsFiles

方长卿
2023-03-14

我有 Jenkins CICD 管道,我需要读取一个配置文件,其中包含需要使用标签号构建的项目键值对。

我需要阅读此文件并在 Loop 中执行 Jenkins 管道步骤。

目前,我的詹金斯CICD管道工程的单一建设。当我试图读取一个配置文件,并通过这些步骤循环时,我遇到了问题。

下面是我试图实现的代码html" target="_blank">示例:

pipeline{
    agent any    
    environment {
        buildApp = "$ApplicationToBuild"
        cloudEnvironment = "$ENV"
        TIMESTAMP = new java.text.SimpleDateFormat('yyyyMMddHHmmss').format(new Date())
        WORKSPACE="${env.WORKSPACE}"
    }
    stages {
        stage ('Validation step for deployment') {      
            steps {
        script {
                    sh 'line_count=$( wc -l applicationSettings.config )'
                    echo 'line count is $line_count'
                    for (int lines = 0; lines < ${line_count}; lines++) {
                        gitAppRepo=""
                        gitAppTag=""
                        gitAppRepo=$(echo $lines |  sed 's/=.*//')
                        echo "gitAppRepo is $gitAppRepo"
                        gitAppTag=$(grep "^$gitAppRepo=" ./applicationSettings.config |cut -d= -f2)
                        echo "gitAppTag is $gitAppTag"                      
                    }
                    }
                }
            }
    }
    post {
        always {
            echo 'One way or another, I have finished'
            }
    }
}

我使用行计数和循环配置文件来获取要部署的应用程序和标记。实际部署将在另一个包含所有步骤的jenkins文件中调用。

在上述循环中遇到以下错误。在groovy中有没有什么智能的方法可以循环?

Java . lang . nosuchmethod错误:在步骤中找不到这样的DSL方法' $ '

以及如何在同一个项目中调用另一个JenkinsFile。下面是我的文件结构。我需要调用Jenkins_files中的Jenkins_files_main。

Jenkins_files
README.md
applicationSettings.config
Jenkins_files_main

共有1个答案

汤博
2023-03-14

首先,您使用了${line_count},它仅在运行shell脚本时有效(因为它查找环境变量)。除此之外,您可以将其用作“${line_count}”或简单地line_count。因此,您应该在变量中读取命令的输出,如:

def line_count= sh(script: "wc -l applicationSettings.config",
                   returnStdout: true).trim()

所以你的for循环会变成:

for (int lines = 0; lines < line_count; lines++)

然后,还有一种更好的方法来读取json文件,如下所示:

    def object = readJSON file: "your.json"


            for (key in object.element.keySet()) {
               echo "key=${key}"
               echo "value= ${object.element.get(key)}"
}

希望这有帮助。

 类似资料:
  • 我想做类似的事情——从触发器管道中调用“some_job_pipeline”,它将由参数控制器在同一个或某个特定的Jenkins节点上执行。如果是,则应在同一个/主/父作业jenkins节点上执行-不应创建新的“执行器”。如果我将“Node1”节点执行器计数设置为1,作业将成功运行(不需要第二个执行器)。 在这个例子中,我有一个Trigger_Main_Job,看起来像这样: 还有一些类似这样的管

  • 问题内容: 我可以使用其他某种语言来解决它,但我渴望学习更多SQL。 有没有办法解决这个问题: 我有两个表(并且不能更改结构),一个表包含一些数据,另一个表包含一些其他信息。它们以这种方式相关:。 我想怎么办:如果没有数据集,但是,我想将它复制过来,使得在年底有相同数量的两个表中的数据集。我以这种方式尝试过,但不幸的是它不起作用: 有人有想法吗,还是最后没有可能?提前致谢! 问题答案: 您可以用来

  • 问题内容: 我有两条詹金斯管道,比方说管道A和管道B。我想在管道B中调用管道A。我怎样才能做到这一点? (管道A是管道B的子集。管道A负责执行一些日常工作,可以在管道B中重用) 我已经在计算机上安装了Jenkins 2.41。 问题答案: 以下解决方案对我有效: 在此处添加“管道:构建步骤”官方文档的链接:https : //jenkins.io/doc/pipeline/steps/pipeli

  • 我在汇编语言中遇到了循环问题。 当我们想要使用计数器寄存器在嵌套循环中循环时,我们首先要做的是将计数器寄存器的值移动到外部循环的堆栈中,然后在我们完成内部循环时取回它,这样我们就能够使用一个计数器寄存器在每个循环中循环不同的迭代次数。 但是嵌套循环中的嵌套循环呢? 我想打印一个由字符< code>S组成的金字塔。我得到的是, 我真正想要的是, 这是我的程序代码 为了实现我想要的,我需要在嵌套循环中

  • 我试图在Azure Devops管道中将一个变量值从一个作业传递到另一个作业。 我一直在努力学习Microsoft文档中的文档。 例如: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2cbatch https://docs.microsof

  • 问题内容: 在Bruce Eckel的“ Thinking In Java,第四版”的第428页(有关类型信息的章节)中,具有以下示例: 也许我有点累,但是我看不到add()方法中对add()的调用是如何工作的。我一直认为它应该有一个引用,或者是一个静态方法(并且我在ArrayList或List中找不到静态add())。我想念什么? 我只是为自己测试,发现这可行: 问题答案: Java为这样的方法

  • 问题内容: 有任何方法可以从具有参数的另一个管道触发管道作业,我已经尝试过 也尝试过 和 没有运气,它说: 项目类型不支持参数 问题答案: 由于子作业是另一个多分支管道项目,因此我需要指定我要运行的分支 现在可以用了

  • 我试图在节点JS中的另一个cron作业中运行一个cron作业。外部cron作业在第1天只执行一次:内部cron作业在第2天执行1次:内部cron作业在第3天执行2次:内部cron作业执行3次 为什么它要多次执行,尽管我在cron作业中调用它一次