简体   繁体   English

如何在Windows Server 2016/2019的Jenkins中运行Docker构建?

[英]How to run Docker builds in Jenkins on Windows Server 2016/2019?

我想在Docker容器中的Windows节点上运行Jenkins构建。

For those looking for ready-to-use answers instead of references to useless documentation pages, here's a Jenkinsfile snippet of how to run Docker builds on Windows 2016/2019: 对于那些正在寻找即用型答案而不是无用的文档页面的参考的人,这是一个如何在Windows 2016/2019上运行Docker构建的Jenkinsfile代码片段:

// invokeDocker.groovy
def call(image, cmd) {
    powershell """
        docker run `
          --rm `
          -w "${env.WORKSPACE}" `
          -v "${env.WORKSPACE}:${env.WORKSPACE}:rw" `
          -e "WORKSPACE=${env.WORKSPACE}" `
          -e "BUILD_NUMBER=${env.BUILD_NUMBER}" `
          $image powershell -C "$cmd"
    """
}

You should use a shared library, eg. 您应该使用共享库,例如。 using a multi-staged pipeline: 使用多阶段管道:

// runDockerStages.groovy
def call(Map pipelineParams) {

    if(!pipelineParams){
        pipelineParams = [:]
    }

    pipeline {
        agent { label "DOCKER-BUILDER" && "SERVER2019" }

        environment {
            SCRIPTS="__scripts"
        }

        options {
            timeout(time: pipelineParams.timeoutMinutes ? pipelineParams.timeoutMinutes : 180, unit: 'MINUTES')
        }

        stages {
            stage('Deploy scripts'){
                steps {
                    initializeWorkspace();
                }
            }

            stage('Trigger custom build stages'){
                steps {
                    executeDockerBuildStages(pipelineParams.Stages);
                }
            }

            stage('Publish'){
                steps{
                    script{
                        publishAllArtifacts();
                    }
                }
            }
        }
        post{
            success{
                // Set latest build URL on Jira case
                updateJira();
            }
        }
    }
}

void executeDockerBuildStages(stageInfos) {
    stageInfos.each { dockerStage ->
        echo("---- About to run [${dockerStage.Title}] stage ----")
        script {
            stage(dockerStage['Title']) {
                invokeDocker(dockerStage['DockerImage'], dockerStage['Script'])
            }
        }
    }
}

Your Jenkinsfile will then look like this: 然后,您的Jenkinsfile将如下所示:

runDockerStages(
  [ 
    Stages: [
      [ Title: 'Prepare', DockerImage: "imagine/jenkins-pipeline/buildbase-windows:1.0.0-windowsservercore-1809", Script: ". .\\build\\build.Prepare.ps1" ],
      [ Title: 'Test', DockerImage: "imagine/jenkins-pipeline/dotnetcore:2.2.203-windowsservercore-1809", Script: ". .\\build\\build.Test.ps1" ],
      [ Title: 'UI', DockerImage: "imagine/jenkins-pipeline/nodejs:10.15.0-windowsservercore-1809", Script: ". .\\build\\build.ui.ps1" ],
      [ Title: 'Service', DockerImage: "imagine/jenkins-pipeline/dotnetcore:2.2.203-windowsservercore-1809", Script: ". .\\build\\build.service.ps1" ]
  ]
)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM