web-dev-qa-db-ja.com

DockerでJenkinsとの統合テスト用にデータベースをセットアップする

背景:
私は DockerでのJenkinsのダウンロードと実行 をセットアップしてJenkinsサーバーをセットアップしました。 Dockerを実行するために次のパラメーターを使用しました。

docker run \
  -u root \
  --rm \  
  -d \ 
  -p 8080:8080 \ 
  -p 50000:50000 \ 
  -v jenkins-data:/var/jenkins_home \ 
  -v /var/run/docker.sock:/var/run/docker.sock \ 
  jenkinsci/blueocean

ビルドは正常に実行されていますが、Integration Testステージになると、MySQLデータベースが必要になります。
計画は 複数のコンテナを使用する ですが、私のJenkinsfileは次のとおりです:

pipeline {
    agent {
        docker {
            image 'maven:3-Alpine'
            args '-v /root/.m2:/root/.m2'
        }
    }
    stages {
        stage('Build') {
            when {
                changeRequest()
            }
            steps {
                sh 'mvn -B -DskipTests clean package'
            }
        }
        stage('Test') { 
            agent {
                docker {
                image 'mysql/mysql-server'
                args '--name some-mysql -e MYSQL_ROOT_PASSWORD=password -d'}
            }
            steps {
                sh 'mvn test -DforkCount=0'
                sh '''
                    docker exec some-mysql sh -c 'exec mysql < ./db/dump.sql
                    '''
            }
            post {
                always {
                    junit 'target/surefire-reports/*.xml' 
                }
            }
        }
    }
}

./db/dump.sqlは、Jenkinsfileサブディレクトリのdbと同じgitリポジトリにあります。

問題:

[workspace@2] Running Shell script
+ docker inspect -f . mysql/mysql-server /var/jenkins_home/jobs/myproject/branches/master/workspace@2@tmp/durable-77d559d6/script.sh: line 1: docker: not found
[Pipeline] sh
[workspace@2] Running Shell script
+ docker pull mysql/mysql-server /var/jenkins_home/jobs/myproject/branches/master/workspace@2@tmp/durable-21da0ff2/script.sh: ...   line 1: docker: not found
ERROR: script returned exit code 127
Finished: FAILURE

ルートとして実行しているので、特権は問題ではないはずですよね? パイプラインでのDockerの使用 いくつかのソリューションが提供されましたが、他のソリューションのほうがIntegration Test環境を設定する方がはるかに簡単ですか?

1
Shihe Zhang

コンソール出力はエラーを説明します:

line 1: docker: not found

JenkinsエグゼキューターにDockerがインストールされていない可能性があるため、シェルスクリプトはdockerを見つけることができません。 (Jenkins Dockerプラグインは、DockerがシェルスクリプトなどのJenkins外部プロセスで使用できることを保証しません。)

1
jayhendren

Dockerクライアントがコンテナーにインストールされていません。 dockerをインストールするか、jenkins + dockerのイメージを使用してください。また、ホストマシンのdockerデーモンが使用されており、マウントする必要があります。

以下のコマンドが役立ちます:

  1. docker volume create jenkins-master-data

  2. docker run --name jenkins-master -u 0 --privileged -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock -v jenkins-master-data:/var/jenkins_home gustavoapolinario/jenkins-docker

0
Sanket