Ich folgte dieses Tutorial :
node {
git url: 'https://github.com/joe_user/simple-maven-project-with-tests.git'
...
}
Es kann jedoch nicht angegeben werden, wie Anmeldeinformationen hinzugefügt werden. Jenkins verfügt über einen bestimmten Abschnitt "Anmeldeinformationen", in dem Sie den Benutzer user & pass definieren und dann eine ID für die Verwendung in Jobs erhalten, aber wie verwende ich diese in Pipeline-Anweisungen?
Ich habe versucht mit:
git([url: '[email protected]:company/repo.git', branch: 'master', credentialsId: '12345-1234-4696-af25-123455'])
kein Glück:
stderr: Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Gibt es eine Möglichkeit, die Creds in der Pipeline zu konfigurieren, oder muss ich SSH-Schlüssel in die .ssh/authorised_keys -Datei des Linux-Benutzers von Jenkin eingeben?
Im Idealfall hätte ich gerne ein Repository für Pipeline-Jobs und Repo-Keys, starte dann Docker Jenkins und füge diese Jobs und Keys dort dynamisch hinzu, ohne in Jenkins Console irgendetwas konfigurieren zu müssen.
Sie können Folgendes in einer Pipeline verwenden:
git branch: 'master',
credentialsId: '12345-1234-4696-af25-123455',
url: 'ssh://[email protected]:company/repo.git'
Wenn Sie die ssh-URL verwenden, müssen Ihre Anmeldeinformationen Benutzername + privater Schlüssel sein. Wenn Sie die https-Klon-URL anstelle der SSH-URL verwenden, sollten Ihre Anmeldeinformationen Benutzername und Kennwort sein.
Wenn Sie SSH-Anmeldeinformationen verwenden möchten,
git(
url: '[email protected]<repo_name>.git',
credentialsId: 'xpc',
branch: "${branch}"
)
wenn Sie Benutzername und Kennwort verwenden möchten, müssen Sie http clone als @Serban verwenden.
git(
url: 'https://github.com/<repo_name>.git',
credentialsId: 'xpc',
branch: "${branch}"
)
So checken Sie explizit anhand bestimmter Anmeldeinformationen aus
stage('Checkout external proj') {
steps {
git branch: 'my_specific_branch',
credentialsId: 'my_cred_id',
url: 'ssh://[email protected]/proj/test_proj.git'
sh "ls -lat"
}
}
Zum Auschecken basierend auf den konfigurierten Anmeldeinformationen im aktuellen Jenkins-Job
stage('Checkout code') {
steps {
checkout scm
}
}
Sie können beide Phasen in einer einzigen Jenkins-Datei verwenden.
Hinzufügen eines kurzen Beispiels mit dem Git-Plugin GitSCM :
checkout([
$class: 'GitSCM',
branches: [[name: '*/master']],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'CleanCheckout']],
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: '<gitCredentials>', url: '<gitRepoURL>']]
])
in Ihrer Pipeline
stage('checkout'){
steps{
script{
checkout
}
}
}
Das ist für mich 100% ig Arbeit mit dem Jenkins-Skript
stage('Checkout external proj') {
steps {
git branch: 'my_specific_branch',
credentialsId: 'my_cred_id',
url: 'ssh://[email protected]/proj/test_proj.git'
sh "ls -lat"
}
}
Was es wert ist, zur Diskussion hinzugefügt zu werden ... was ich getan habe, hat mir geholfen ... Da die Pipeline in einem Arbeitsbereich in einem Docker-Image ausgeführt wird, das bei jeder Ausführung bereinigt wird. Ich habe die Anmeldeinformationen abgerufen, die für die Durchführung der erforderlichen Operationen am Repository in meiner Pipeline erforderlich sind, und sie in einer .netrc-Datei gespeichert. Dadurch konnte ich die Git-Repo-Operationen erfolgreich autorisieren.
withCredentials([usernamePassword(credentialsId: '<credentials-id>', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USERNAME')]) {
sh '''
printf "machine github.com\nlogin $GIT_USERNAME\n password $GIT_PASSWORD" >> ~/.netrc
// continue script as necessary working with git repo...
'''
}