Jenkinsを使用してDockerコンテナからC ++プロジェクトを構築しようとしています。 Jenkinsで建物を建てたり、Jenkinsの外側のコンテナに建物を建てたりすることに問題はありません。
私が試したことは次のとおりです。わかりやすくするために、ボリュームマッピングを省略しました。
ケース1
次のコマンドは、シェルでビルドを正常に実行します。
docker run --rm --interactive=true --tty=true $IMAGE make
ただし、Jenkinsで「シェルを実行」ステップとして実行すると、Dockerは次のエラーを返します。
cannot enable tty mode on non tty input
ケース2
次のコマンドは前のコマンドと似ていますが、インタラクティブ機能は無効になっています。
docker run --rm $IMAGE make
Jenkinsはビルドを正常に実行できます。しかし、ビルドを中断すると深刻な問題が発生します。ビルドはすぐに中断されたとマークされますが、コンテナはビルドが完了するまで実行され続けます。コンテナ図いいえ終了後に削除してください。
シェルで実行すると、コマンドは正常にビルドされますが、それを中断する方法はありません。コンテナは終了後も削除されます。
質問
JenkinsのDockerコンテナでビルドをきちんと実行し、ビルドを中断する機能を維持する方法を知っている人はいますか?
Docker呼び出しがスクリプト内にあり、簡単に抽出できないため、Jenkinsプラグインは使用できません。
ベストアンサー1
JenkinsでDockerビルドを実行する最も簡単な方法は、パイプラインタスクを使用することです。 Docker環境とコンテナを制御するための多くの組み込みプラグインがあります。
いくつかの例は次のとおりです。
docker.image("image-name").run() -Runs the container from the image
docker.image("image-name").inside(){//your commands} -Runs your commands inside the docker container and also removes your container as soon as your commands are executed.
追加情報:https://www.cloudbees.com/blog/orchestrated-workflows-jenkins-and-docker