Можно ли проверить, извлечен ли он из определенного репозитория в декларативном конвейере Jenkins? - PullRequest
1 голос
/ 05 июля 2019

Я хотел бы иметь этап выпуска в моем Jenkinsfile, который запускается только тогда, когда он извлечен из исходного репозитория.Это сделано для того, чтобы избежать появления сообщений об ошибках в клонированных репозиториях из-за отсутствующих ключей и т. Д.

stage('Release')
 {
  when
   {
    allOf 
     {
      // TODO Check for repository url https://github.com/PowerStat/TemplateEngine.git
      branch 'master'
     }
   }
  steps
   {
    script
     {
      if (isUnix()) 
       {           
        sh 'mvn --batch-mode release:clean'
        sh 'mvn --batch-mode release:prepare'
        sh 'mvn --batch-mode release:perform'
       }
      else
       {
        bat 'mvn --batch-mode release:clean'
        bat 'mvn --batch-mode release:prepare'
        bat 'mvn --batch-mode release:perform'
       }
     }
   }
 }

Я изучил Синтаксис конвейера: когда , но не знаю, как выполнить тест Iхотел бы иметь.

Также я подумал об использовании переменной среды Ссылка на глобальную переменную , но нашел не с URL-адресом хранилища.

Итак, мой вопрос:как реализовать эту проверку в декальативном конвейере?

1 Ответ

1 голос
/ 05 июля 2019

Вы можете получить URL удаленного хранилища с помощью команды git config remote.origin.url.Вы можете выполнить эту команду, используя директиву expression внутри блока when - она ​​определяет замыкание, которое возвращает значение boolean.

Рассмотрим следующий пример:

def expectedRemoteUrl = "https://github.com/PowerStat/TemplateEngine.git"

pipeline {
    agent any

    stages {
        stage("Release") {
            when {
                allOf {
                    branch 'tmp'
                    expression {
                        def remoteUrl = isUnix() ?
                            sh(script: "git config remote.origin.url", returnStdout: true)?.trim() :
                            bat(script: "git config remote.origin.url", returnStdout: true)?.trim()

                        return expectedRemoteUrl == remoteUrl
                    }
                }
            }

            steps {
                echo "Do your release steps here..."
            }
        }
    }
}

В качестве альтернативы, если команда git недоступна на узле, выполняющем конвейер, вы можете получить URL-адрес удаленного хранилища с помощью scm.userRemoteConfigs?.first()?.url.Рассмотрим следующий пример:

def expectedRemoteUrl = "https://github.com/PowerStat/TemplateEngine.git"

pipeline {
    agent any

    stages {
        stage("Release") {
            when {
                allOf {
                    branch 'tmp'
                    expression {
                        def remoteUrl = scm.userRemoteConfigs?.first()?.url

                        return expectedRemoteUrl == remoteUrl
                    }
                }
            }

            steps {
                echo "Do your release steps here..."
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...