在 Jenkinsfile 中选择要部署或停止的 Docker 服务

问题描述 投票:0回答:1

我有各种服务,每个服务都有 docker-compose 文件来停止或部署它们。通常,用户必须选择需要停止或部署哪些服务。希望从现在开始自动化这个过程。

在下面的示例中我使用选择参数

   parameters {
        choice(name: 'ACTION', choices: ['STOP','DEPLOY'], description: 'Please select what to do'),
        choice(name: 'SERVICES', choices: ['PAYMENT','GAMES','LAUNCHER'], description: 'Please choose which services to deploy'),
    }


    stage ('stop services') {
           when {
               allOf {
                    expression { params.ACTION == "STOP" }
                    expression { return params.PAYMENT }
               }
            }
            steps {
                echo "Executing Release\n"
                //somehow refer to a docker-compose file
                sh '''
                 docker-compose.yml -p down '''

            }
    }

为每个服务和操作设置不同的阶段似乎很麻烦。有没有一种方法可以选择在一个表达式中部署或停止哪些服务,或者我应该为每个服务和选择创建不同的表达式? 如何在此管道中引用 GitHub 存储的 docker-compose 文件?

docker jenkins docker-compose jenkins-pipeline devops
1个回答
0
投票

您似乎在这里遗漏了一些东西:一种将服务名称映射到其 docker-compose 文件的方法,以及一种告诉

docker compose
要处理哪个文件的方法。我会做这样的事情

def SERVICE_TO_FILE = [
    'PAYMENT': 'docker-compose-payment.yml',
    'GAMES': 'docker-compose-games.yml',
    'LAUNCHER': 'docker-compose-launcher.yml',
]
pipeline {
    agent {...}
    parameters {
        choice(name: 'ACTION', choices: ['STOP','DEPLOY'], description: 'Please select what to do')
        choice(name: 'SERVICES', choices: ['PAYMENT','GAMES','LAUNCHER'], description: 'Please choose which services to deploy')
    }
    stages {
        stage('stop services') {
            when {
                expression { params.ACTION == "STOP" }
            }
            steps {
                sh "docker compose --file ${SERVICE_TO_FILE[params.SERVICES]} down"
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.