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.
_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}
_を使用すると問題なく動作します。
次の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ドキュメントの変数置換 を参照してください。