Ich fange an, Jenkins Declarative Pipeline zu betrachten und meine Builds in einem Docker-Container auszuführen. Ich habe ein Projekt, das npm-Pakete über Git einliest und daher ssh-Schlüssel haben muss.Deklarative Jenkins-Pipeline und Docker
Von dem, was ich begegnet bin ich args bauen wie --build-arg ssh_pub_key="$(cat ~/.ssh/id_rsa.pub)"
und dann in meinem Dockerfile einstellen
ARG ssh_pub_key
ich die folgende Vorgehensweise: In meinem Jenkinsfile genommen haben
pipeline {
agent {
dockerfile {
args '''--build-arg ssh_prv_key="$(cat /var/lib/jenkins-git/.ssh/id_rsa)"'''
}
}
stages {
stage('Test') {
steps {
sh 'echo $ssh_prv_key'
}
}
}
}
Wenn die Build-Lauf In Jenkins bekomme ich die folgende Ausgabe, wenn ich das Bild erstelle (Keine Erwähnung von --build-arg
.)
docker build -t 085eb412f6dd28c1a7843aa9f9ed84e7c4af3e1b -f Dockerfile .
und nichts für die Variable
Bilde ich sie nicht richtig? Handelt jemand mit dem Kopieren von Schlüsseln anders?
Dank
UPDATE
MY Jenkinsfile sieht nun unten wie aber läuft nicht, wie ich außerhalb der Pipeline deklarative alle Skripte nicht ausgeführt werden kann erhalten
Required context class hudson.FilePath is missing
Perhaps you forgot to surround the code with a step that provides this, such as: node
scheint?
def ssh_prv_key = sh script: 'cat /var/lib/jenkins-git/.ssh/id_rsa', returnStdout: true
def ssh_pub_key = sh script: 'cat /var/lib/jenkins-git/.ssh/id_rsa.pub', returnStdout: true
pipeline {
agent {
dockerfile {
args """--build-arg ssh_prv_key=\"${ssh_prv_key}\" --build-arg ssh_pub_key=\"${ssh_pub_key}\" """
}
}
stages {
stage('Test') {
steps {
sh 'echo $ssh_prv_key'
}
}
}
}
Sie müssen auch ssh_pub_key = $ ssh_pub_key' 'ENV hinzufügen, so dass die SSH-Schlüssel ist ein Teil der Umgebungsvariablen des Bildes gemacht. Gerade jetzt übergeben Sie die Build-Argumente, aber nicht als solche –