jenkins-pipline-agent使用,使构建能够在不同环境,不同容器中运行

jenkins agent

参考地址https://www.jenkins.io/doc/book/pipeline/syntax/

该agent部分指定整个Pipeline或特定阶段将在Jenkins环境中执行的位置,具体取决于该agent 部分的放置位置。该部分必须在pipeline块内的顶层定义 ,但阶段级使用是可选的。

简单来说,agent部分主要作用就是告诉Jenkins,选择那台节点机器去执行Pipeline代码。这个指令是必须要有的,也就在你顶层pipeline {…}的下一层,必须要有一个agent{…},agent这个指令对应的多个可选参数,本篇文章会一一介绍。这里注意一点,在具体某一个stage {…}里面也可以使用agent指令。这种用法不多,一般我们在顶层使用agent,这样,接下来的全部stage都在一个agent机器下执行代码。

#参数1:any 作用:在任何可用的代理上执行Pipeline或stage
pipeline {
    agent any
    parameters {gitParameter branchFilter: 'origin/(.*)', defaultValue: 'dev', name: 'BRANCH', type: 'PT_BRANCH'}
    stages{
        stage("git clone"){
            steps {
                script {
                    sh """
                    """
                }
            }
        }
        stage("git clone"){
            steps {
            }
        }
        stage("git clone"){
            steps {
            }
        }
    }
}

参数2:none 当在pipeline块的顶层应用时,将不会为整个Pipeline运行分配全局代理,并且每个stage部分将需要包含其自己的agent部分。
pipeline {
    agent any
    parameters {gitParameter branchFilter: 'origin/(.*)', defaultValue: 'dev', name: 'BRANCH', type: 'PT_BRANCH'}
    stages{
        stage("git clone"){
	        agent {
               label 'jenkins-git'
            }
            steps {
                script {
                    sh """
                    """
                }
            }
        }
        stage("git build"){
            agent {
               label 'jenkins-jdk'
            }
            steps {
            }
        }
        stage("deploy"){
            agent {
               label 'jenkins-sync'
            }
            steps {
            }
        }

    }
}

//参数3:label 作用:使用提供的标签在Jenkins环境中可用的代理机器上执行Pipeline或stage内执行。
pipeline {
    agent {
       label 'jenkins-dev'
    }
}
//参数4:node 作用:和上面label功能类似,但是node运行其他选项,例如customWorkspace
pipeline {
    agent {
        node {
            label 'jenkins-agent-node1'
            customWorkspace "${env.JOB_NAME}/${env.BUILD_NUMBER}"
        }
    }
}

//其实agent相关的还有两个可选参数,分别是docker和dockerfile

//第一种全部在一个节点和 容器内运行 在节点jenkins-dev 上运行 golang:1.17-alpine容器挂载目录
pipeline {
    agent {
        docker { 
            label 'jenkins-dev'
            image 'golang:1.17-alpine' 
            args "-v ${SSH_KEY_PATH}:${SSH_CREDENTIAL_PATH}"
        }
    }
    parameters {gitParameter branchFilter: 'origin/(.*)', defaultValue: 'dev', name: 'BRANCH', type: 'PT_BRANCH'}
    stages{
        stage("git clone"){
            steps {
                script {
                    sh """
                    """
                }
            }
        }
        stage("git build"){
            agent {
               label 'jenkins-jdk'
            }
            steps {
            }
        }
        stage("deploy"){
            agent {
               label 'jenkins-sync'
            }
            steps {
            }
        }
    }
}

//使用多个容器
pipeline {
    agent none
    stages {
        stage('git pull') {
            agent {
                docker{ image 'git:latest' }
            }
            steps {
                sh 'git version'
            }
        }
        stage('build'){
            agent {
                docker{ image 'node:7-alpine' }
            }
            steps {
                sh 'node --version'
            }
        }
    }
}

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