web-dev-qa-db-ja.com

Jenkinsパイプライン-docker-composeの環境変数

Jenkinsfileで設定されたイメージ名の環境変数でdocker-composeを使用しようとしていますが、機能しません。

Jenkinsfileを含む

node() {

  stage('Checkout') {
    cleanWs()
    git credentialsId: 'xxx', url: 'ssh://git@...'
  }

  stage('Build') {
    withMaven(maven: 'maven-3.5.3') {
      sh 'mvn clean package'
      def pom = readMavenPom file:'pom.xml'
      JAR_FILE = pom.artifactId + "-" + pom.version + ".jar"
      JAR_VERSION = pom.version
    }
  }

  stage('Build Docker Image') {
    echo "Docker Build ..."
    docker.withTool('docker') {
      app = docker.build("microservices/my-service:${JAR_VERSION}","--build-arg JAR_FILE=${JAR_FILE} .")
    }
  }

  stage('Running Docker Container') {
    echo "Docker Run ..."
    withEnv(['VERSION=1.0.0']) {
      docker.withTool('docker') {
        sh "docker-compose rm -f -s -v"
        sh "docker-compose up -d"
      }
    }
    cleanWs()
  }
}

そしてdocker-compose.ymlのような

version: '3.6'

services:

    my-service:
        image: microservices/my-service:${VERSION}
        container_name: my-service
        ...

最終段階で環境変数を使用していないことを除いて、すべてが正常に機能しています。

Docker Run ...
[Pipeline] withEnv
[Pipeline] {
[Pipeline] tool

[Pipeline] withEnv
[Pipeline] {
[Pipeline] sh

[my-service] Running Shell script
+ docker-compose rm -f -s -v
The VERSION variable is not set. Defaulting to a blank string.
5
tweetysat

_sh "printenv"_の前に_sh "docker-compose ..."_を追加した後

_Version=1.0.0
_

withEnv(['VERSION=1.0.0'])が_Version=1.0.0_を教えてくれる理由はわかりませんが、_docker-compose-yml_の代わりに_image: microservices/my-service:${Version}_ _image: microservices/my-service:${VERSION}_を使用すると問題なく動作します。

4
tweetysat

次のenvironmentをJenkinsfileに入れようとしましたか?

{
    ...
    stage('Running Docker Container') {
        echo "Docker Run ..."
        docker.withTool('docker') {
            sh "docker-compose rm -f -s -v"
            sh "docker-compose up -d"
        }
        cleanWs()
    }

    environment {
        VERSION = "1.0.0"
    }
}

さらに、.envファイルを使用してデフォルト値を使用できますが、@ mulg0r( permalink )が彼の回答でこの解決策を説明しています。詳細については、 docker-composeドキュメントの変数置換 を参照してください。

0
Paul Rey