it-swarm.com.de

Wie drücke und ziehe ich vom Docker-Hub in der deklarativen Pipeline von Jenkins?

Ich baue erfolgreich Docker-Images aus meiner Jenkinsfile-Pipeline auf einem Slave, nur mit Standardbefehlen "sh".

Ich möchte in der Lage sein, ein Image aus dem Docker/Hub abzurufen, und falls es fehlschlägt (weil es noch nicht dort gespeichert wurde), bauen Sie es und legen Sie es an den Docker Hub.

Offensichtlich muss ich Anmeldeinformationen für Docker Hub speichern und einem Docker-Login-Befehl zur Verfügung stellen.

Mein Problem ist, dass ich verwirrt bin. Es gibt Docker-Pipeline-Plugins, aber ich denke, dass sie Jenkins-Schritte in einem Docker-Container ausführen - nicht das, was ich versuche. Auch viele Beispiele scheinen eine Skriptpipeline zu sein, anstatt sie zu deklarieren.

In einfachen "Schritten", denke ich, möchte ich sowas machen

agent {
    label 'pi'
}
steps {
  sh 'docker login -u my-account -p xxxx'
  sh 'docker pull my-account/image:version || (docker build -f dockerfile -t my-account/image:version && docker Push my-account/image:version)'
....
}

ich vermute aber auch, dass ich vielleicht so etwas tun muss

steps {
  script {
    withDockerRegistry([credentialsId: 'something', url: 'docker.io/my-account']) {
      sh 'docker pull my-account/image:version || (docker build -f dockerfile -t my-account/image:version && docker Push my-account/image:version)'
    ....
  }
}

aber ich möchte keine Fehler machen und eine Pipeline schrauben, die derzeit gut funktioniert, abgesehen von diesem kleinen bisschen.

Bin ich auf der richtigen Linie?

9
akc42

Wenn Sie das Docker-Pipeline-Plugin haben, können Sie auf diese Weise Bilder erstellen und pushen.

dir(config.buildFolder){
                newImage = docker.build(${imageTag})
                docker.withRegistry("https://${registryAddress}", '${credentialsId}'){
                     newImage.Push("${variables.version}")

            }

Sie können Code in einem Container wie folgt abrufen und ausführen:

testbed = docker.image('${imageName}')
testbed.inside("-u root:root"){
                echo 'executing build inside container'
                sh 'dotnet restore'
            }

Dadurch wird automatisch der Ordner angehängt, aus dem Sie den Container als Stammverzeichnis des Containers erstellt haben, damit Sie mit diesen Daten arbeiten können (z. B. Erstellen einer Anwendung).

6
herm

Ich arbeite auch an demselben Thema. Ich möchte Docker-Bilder aus meinem Dockerhub-Repo holen und damit einige Tests durchführen. Ich habe es geschafft, meine Pipeline zum Laufen zu bringen, indem ich die hier gezeigten Schritte befolge.

https://Gist.github.com/jglick/0aa389c053196e38e2a1

0
Swagrid