2017-09-25 1 views
0

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' 
     } 
     } 
    } 
} 
+0

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 –

Répondre

1

Ici $(cat /var/lib/jenkins-git/.ssh/id_rsa) est une commande shell. AFAIK, les fixations doivent avoir été déclarées à l'extérieur de la canalisation pour les utiliser lors de la définition des agents.

Ainsi, paramétrez le travail de pipeline.

  • Ajouter ssh_prv_key comme paramètres de vérification des pouvoirs.
  • Sélectionnez Secretfile
  • Définir la valeur par défaut pour le téléchargement secretfile
  • Répétez les étapes pour ssh_pub_key

Parameterized Pipeline

Utilisez ensuite ssh_prv_key dans dockerfileadditionalBuildArgs directive.

pipeline { 
    agent { 
    dockerfile { 
     additionalBuildArgs ""--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" 
     } 
     } 
    } 
} 
+0

merci pour l'aide, où est-ce que je placerais ceci? à l'extérieur du bloc de pipeline ou à l'intérieur de celui-ci? – Richlewis

+0

Je place généralement mes définitions de variables au début en dehors du bloc pipeline. –

+0

J'ai mis à jour ma question, je serais intéressé de savoir comment cela se passe? merci – Richlewis