Дженкинс gitSCM, похоже, работает нормально, основываясь на журнале выполнения, но код не был клонирован

#git #groovy #jenkins-pipeline

Вопрос:

Я настроил свой сценарий конвейера для использования gitSCM. Запуск конвейера, похоже, успешно завершен на основе журнала выполнения, но при поиске локально клонированного репозитория его нигде не найти. Я не вижу никаких проблем с отличным сценарием для шага checkout (). Код должен существовать в relativeTargetDir, но, опять же, это не так.

 pipeline { 
   agent { label 'generic' }
   stages {     
      stage ("Git Checkout"){ 
         steps {
            script {
               checkout([
                  $class: 'GitSCM',
                  branches: [[name: '*/stability']],
                  extensions: [[
                     $class: 'RelativeTargetDirectory',
                     relativeTargetDir: "/var/jenkins/workspace/MyProject"
                  ]],
                  userRemoteConfigs: [[
                     credentialsId: 'repo_ssh_key',
                     url: 'git@github.durder.test.com:pipeline/automation.git'
                  ]]
               ])
                    
            }
         }
      }
      stage('Where is the repo code?') {
         steps {
            sh 'pwd'
            sh 'ls -l'
         }
      }
   }
}

Here is the Jenkins run:

Started by user myusername
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on i-0d50e9e9cc2678b71 in /var/jenkins/workspace/MyProject
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Git Checkout)
[Pipeline] script
[Pipeline] {
[Pipeline] checkout
The recommended git tool is: NONE
using credential repo_ssh_key
Fetching changes from the remote Git repository
 > git rev-parse --resolve-git-dir /var/jenkins/workspace/MyProject/.git # timeout=10
 > git config remote.origin.url git@github.durder.test.com:pipeline/automation.git # timeout=10
Fetching upstream changes from git@github.durder.test.com:pipeline/automation.git
 > git --version # timeout=10
 > git --version # 'git version 2.17.1'
using GIT_SSH to set credentials 
 > git fetch --tags --progress -- git@github.durder.test.com:pipeline/automation.git  refs/heads/*:refs/remotes/origin/* # timeout=10
Checking out Revision 873cd7253b21b1b8c7e971bf7265164af79cb183 (refs/remotes/origin/stability)
Commit message: "Debugging Jenkins"
 > git rev-parse refs/remotes/origin/stability^{commit} # timeout=10
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 873cd7253b21b1b8c7e971bf7265164af79cb183 # timeout=10
 > git rev-list --no-walk 873cd7253b21b1b8c7e971bf7265164af79cb183 # timeout=10
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Where is the repo code?)
[Pipeline] sh
  pwd
/var/jenkins/workspace/MyProject
[Pipeline] sh
  ls -l
total 0
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

 

Ответ №1:

Вам не нужна проверка, я думаю, что это слишком усложняет ситуацию.

Попробуйте это:

 pipeline {
  agent { label 'generic' }

  environment {
    BRANCH = '*/stability'
    URL = "github.durder.test.com:pipeline/automation.git" // not sure about the url we use https
    CREDENTIALS = 'repo_ssh_key'
  }

...

stages {     
  stage ("git checkout"){ 
     steps {
       git branch: BRANCH, credentialsId: CREDENTIALS, url: URL
     }
  }

...
 

Мне нравится использовать переменные env, вы можете легко изменить их таким образом. 🙂

Комментарии:

1. Спасибо, Дэвид! Это то, что я получаю за чтение документов. Используя упрощенный код, я смог увидеть следующее в выводе: stderr: фатально: «*/стабильность» не является допустимым именем ветви. Изменил название филиала на «стабильность», и это сработало. Я предполагаю, что этот подстановочный знак не был расширен.

2. Да, /ссылки/заголовки/ добавляются автоматически. Вы можете видеть это в выводе: «код» git.exe повторный анализ «ссылки/удаленные устройства/происхождение/стабильность» # тайм-аут=10 «код»