Цикл в конвейере Jenkins CICD и вызов другого JenkinsFiles в той же работе - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть конвейер Jenkins CICD, и мне нужно прочитать файл конфигурации, в котором есть пары ключ-значение Project, который должен быть собран с номером тега.

Мне нужно прочитать этот файл и выполнить конвейер Jenkinsшаги в цикле.

В настоящее время мой конвейер Jenkins CICD работает для отдельной сборки.У меня возникают проблемы при попытке прочитать файл конфигурации и выполнить цикл, выполнив следующие действия.

Ниже приведен пример кода, который я пытаюсь достичь:

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.NoSuchMethodError: Нет такого DSL-метода '$' среди шагов

И как мы вызываемеще один JenkinsFile в том же проекте.Ниже моя файловая структура.Мне нужно вызвать Jenkins_files_main в Jenkins_files.

Jenkins_files
README.md
applicationSettings.config
Jenkins_files_main

1 Ответ

0 голосов
/ 18 февраля 2019

Прежде всего, вы использовали ${line_count}, который работает, только если вы запускаете скрипт оболочки (так как он ищет переменную окружения).Кроме этого вы используете его как "${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)}"
}

Надеюсь, это поможет.

...