【发布时间】:2019-05-03 13:23:32
【问题描述】:
我想在 Docker 容器中的 Windows 节点上运行 Jenkins 构建。
【问题讨论】:
我想在 Docker 容器中的 Windows 节点上运行 Jenkins 构建。
【问题讨论】:
对于那些寻找即用型答案而不是参考无用文档页面的人,这里有一个关于如何在 Windows 2016/2019 上运行 Docker 构建的 Jenkinsfile sn-p:
// 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"
"""
}
您应该使用共享库,例如。使用多阶段管道:
// 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'])
}
}
}
}
您的 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" ]
]
)
【讨论】: