標準の「sh」コマンドを使用して、スレーブ上のjenkinsfileパイプラインからdockerイメージを正常に構築しています。
Docker/Hubからイメージを取得してプルできるようにしたいのですが、失敗した場合(まだ保存されていないため)、ビルドしてDockerハブにプッシュします。
明らかに、ドッカーハブの資格情報を何らかの方法で保存し、Dockerログインコマンドに提供する必要があります。
私の問題は混乱していることです。ドッカーパイプラインプラグインはありますが、それらはドッカーコンテナー内でジェンキンスステップを実行するためのものだと思います-私がやろうとしていることではありません。また、多くの例は、宣言的というよりもスクリプト化されたパイプラインのようです。
簡単な「ステップ」の用語では、次のようなことをしたいと思います
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)'
....
}
しかし、私は多分何かをする必要があると思う
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)'
....
}
}
しかし、少しの間違いを除いて、現在正常に動作しているパイプラインをねじ込みたくありません。
私は正しい線に沿っていますか?
Dockerパイプラインプラグイン がある場合、このようなイメージを作成してプッシュできます。
dir(config.buildFolder){
newImage = docker.build(${imageTag})
docker.withRegistry("https://${registryAddress}", '${credentialsId}'){
newImage.Push("${variables.version}")
}
次のように、コンテナ内のコードをプルして実行できます。
testbed = docker.image('${imageName}')
testbed.inside("-u root:root"){
echo 'executing build inside container'
sh 'dotnet restore'
}
これにより、コンテナーを作成したフォルダーがコンテナーのルートディレクトリとして自動的にマウントされ、そのデータを操作できるようになります(アプリケーションのビルドなど)
私も同じ問題に取り組んでいます。 DockerhubリポジトリからDockerイメージを取得し、それらでいくつかのテストを実行したいと思います。ここに示す手順に従って、パイプラインを機能させることができました。