Commençons tout juste à regarder le pipeline Jenkins Declarative et à exécuter mes builds dans un conteneur docker. J'ai un projet qui tire dans les paquets npm via git et doit donc avoir des clés ssh définies.Déclaratif pipeline Jenkins et Docker
D'après ce que je suis venu à travers je peux mettre construire args tels que --build-arg ssh_pub_key="$(cat ~/.ssh/id_rsa.pub)"
puis dans mon Dockerfile
ARG ssh_pub_key
J'ai pris l'approche suivante dans mon Jenkinsfile
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'
}
}
}
}
Lors de l'exécution de la construction dans Jenkins je reçois la sortie ci-dessous lors de la construction de l'image (aucune mention de la --build-arg
.)
docker build -t 085eb412f6dd28c1a7843aa9f9ed84e7c4af3e1b -f Dockerfile .
et rien pour la variable
Est-ce que je ne les configure pas correctement? Est-ce que quelqu'un manipule la copie des clés d'une manière différente?
Merci
MISE À JOUR
MY Jenkinsfile ressemble maintenant ci-dessous, mais ne fonctionnera pas comme obtenir
Required context class hudson.FilePath is missing
Perhaps you forgot to surround the code with a step that provides this, such as: node
Il semble que je ne peux pas exécuter des scripts en dehors du déclaratif de pipeline?
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'
}
}
}
}
Vous devez également ajouter 'ENV ssh_pub_key = $ ssh_pub_key' afin que les clés SSH est fait une partie des variables d'environnement de l'image. En ce moment vous passez les arguments de construction mais ne les utilisez pas en tant que tel –