Jenkins Pipeline 使用 Docker 作为 Agent 时注意事项

Jenkins Pipeline 使用 Docker 作为 Agent 时注意事项_第1张图片


先来看一段报错信息:

Jenkins Pipeline 使用 Docker 作为 Agent 时注意事项_第2张图片

上图报错:invalid argument(无效参数)。再看看我的 PipelineAgent

pipeline{
    agent {  // 工作节点
        docker {
            image '172.17.16.102/maven/maven:102'
            args '-v /data/jenkins/workspace/Biliard/maven:/root/.m2 -v /data/mavenRepository:/usr/repository'
        }
    }
    ...
    ...
    parameters {  // 参数化构建
        string(name: '',
        defaultValue: '------------------------------------------------------------------------------- 项目版本发布 ------------------------------------------------------------------------------------',
        description: '')
        gitParameter (name: 'BRANCH_TAG',
                        type: 'PT_BRANCH_TAG',
                        branchFilter: 'origin/(.*)',
                        defaultValue: 'master',
                        selectedValue: 'DEFAULT',
                        sortMode: 'DESCENDING_SMART',
                        description: '⚠ 选择发布版本(分支)')
        ...
        ...
    }
    ...
    ...
}

案例中加了 string 参数的原因是为了界面好看,从语法上来讲是没有问题的,但是在 agent 代理节点为 Docker 时就存在问题了,首先我们要清楚 Agent 有什么作用,Agent 指的是 Pipeline 的运行环境,可以是 Host 环境,也可以是容器环境,而在容器环境中时,string 参数会作为 Docker 参数传入,因此报 Docker 无效参数(在 agent 为 any 时,以上案例是没有问题的)。

因此,解决方案就是去掉 string 类型的参数变量:

pipeline{
    agent {  // 工作节点
        docker {
            image '172.17.16.102/maven/maven:102'
            args '-v /data/jenkins/workspace/Biliard/maven:/root/.m2 -v /data/mavenRepository:/usr/repository'
        }
    }
    ...
    ...
    parameters {  // 参数化构建
        gitParameter (name: 'BRANCH_TAG',
                        type: 'PT_BRANCH_TAG',
                        branchFilter: 'origin/(.*)',
                        defaultValue: 'master',
                        selectedValue: 'DEFAULT',
                        sortMode: 'DESCENDING_SMART',
                        description: '⚠ 选择发布版本(分支)')
        ...
        ...
    }
    ...
    ...
}

此时,问题得到解决!

你可能感兴趣的:(FAQ,CICD,jenkins,docker,运维)