#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 «код»