web-dev-qa-db-ja.com

Jenkins Pipeline Plug-inはDocker Composeをサポートしていますか?

Jenkins 2.0で複数のコンテナーで構成されるDocker対応ビルドを実行する方法を探しています。

Docker Compose in Pipeline、またはパイプライン用のCloudBees dockerプラグインをネイティブサポートする予定はありますか。

または、明示的な呼び出しsh docker-compose...?たぶんtry... finallyサービスのライフサイクルをさらに制御します。


編集:最初の答えはジェンキンスでドッカーコンテナを構築する方法を提案することでした。これはここで必要なものではありません。私(EngineerDollery)は、アプリをデプロイしてエンドツーエンドのテストを実行できるように、composeを使用してジェンキンスでターゲットプラットフォームを立ち上げたいと考えています。

38
luka5z

Jenkinsバグ追跡 で検索した後、 JENKINS-35025docker-compose.ymlは、 maven build を使用して、Dockerコンテナでジョブを実行するときに考慮されます。

Jenkinsを使用したCIパイプラインの作成 も参照してください。これは、Jenkinsサーバーにdocker-composeがインストールされていることを前提としています。

注:1年後(2017年8月)、 docker-composeはDocker Pipelineプラグインではまだサポートされていません

2018年7月 イワンアラッキ メモ コメント内

手動インストールdocker-cliおよびdocker-composeホストのバージョンと同じバージョンが今のところソリューションです...

13
VonC

以下は、内部でdockerを実行するjenkinsコンテナーを実行するファイルです。

docker run \
  -p 8080:8080 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  --name jenkins \
  getintodevops/jenkins-withdocker:lts

参照: https://getintodevops.com/blog/the-simple-way-to-run-docker-in-docker-for-ci

2
Julio Marins

私は同様の問題に直面しています、私はこれを見つけました https://reinout.vanrees.org/weblog/2017/10/03/docker-compose-in-jenkins.html 何が関係しているか分からない。

私の問題は開発中のテストであり、Jenkinsでのテストも自動化します。また、docker-composeを使用していくつかのphpスクリプトとmysqlサーバーを起動し、分離されたテストを実行します(現時点ではphpunit)。

私はこれを達成できると思いました

  1. dockerホストでのネットワークの作成(docker network createを使用)
  2. そのネットワークに接続されたmysqlドッカーを作成して実行します(docker run mysql --network=netname --name=mysqlmachine
  3. --networkを指定し、mysqlmachineをホストとして参照するjenkinsによってスクリプトを実行します。

しかし、これは、dbデータをセットアップし、dbデータをクリーンアップする必要があることを意味します。また、不要な場合でも常にmysqlmachineに残し、RAMリソースを消費します。パイプラインを定義するJenkinsfileのdocker start mysqlmachineおよびdocker stop mysqlmachineコマンドで最後の問題を解決できます。

しかし、再び、ジェンキンスが実行されているドッカーにシェルを実行すると、dockerコマンドが見つかりません

私にとっては、より良いものを見つけることができないまで、実行可能なソリューションです

更新: https://wiki.jenkins.io/display/JENKINS/Docker+Slaves+Plugin ソリューションを試してみますが、ほとんど必要なものがあります

更新08.02:Alexander Zeitlerが示唆するように、使用

agent {
        docker {
            image 'pdmlab/jenkins-node-docker-agent:6.11.1'
            args '-v /var/run/docker.sock:/var/run/docker.sock'
        }
    }

jenkinsファイルでは、docker-composeコマンドの使用を許可します:docker内のdocker、これはほとんどの場合、dockerの近くのdockerです: DockerのDocker-ボリュームが機能しない:第1レベルのコンテナ内のファイルがいっぱい、 2段目は空

しかし、私はジェンキンスを特別な方法で実行する必要のない別のアプローチを使用することを好みました。

パイプラインは言う:

stage('Test') {
    steps {
        sh './build_docker.sh jenkinstests'
    }
}

build_docker.shは次のことを行います。

 jenkinstests)
 docker volume create idealodbconn
 docker run -v idealodbconn:/data --name helper busybox true
 docker cp ./dbconn/db249.json helper:/data
 docker rm helper

 docker-compose -f services/docker-compose-jenkins.yml up \
 --abort-on-container-exit \
 --exit-code-from idealoifapi

 docker-compose -f services/docker-compose-jenkins.yml rm -f
 docker volume rm idealodbconn
 ;;

また、--abort-on-container-exitは、docker-compose-jenkins.ymlに定義された1つのコンテナが終了すると終了すると言い、--exit-code-from idealoifapiはidealoifapiイメージから終了コードを取得すると言います。

以上です。不足している部分は、おそらくdocker-compose-jenkins.ymlのボリュームの使用であり、外部にあります:true:

volumes:
    idealodbconn:
        external: true
0