Jenkins 流水线



一、例子

def master_node = "${master_node}"

def tag = "${tag}"
def dockeruser = "${dockeruser}"
def dockerpwd = "${dockerpwd}"
def dockerimageurl = "${dockerimageurl}"
def dockerurl = "${dockerurl}"
def gituser = "${gituser}" 
def gitpwd = "${gitpwd}"
def giturl = "${giturl}"
def nodes = "${nodes}".split(",")
 

pipeline {
    agent any

    stages {
        stage('git clone s2c_protocol') {
            steps {
                echo "拉取s2c_protocol" 
                sh " rm -rf S2CProtocol "
                sh " git clone   --branch  ${tag}   https://${gituser}:${gitpwd}@${giturl}  &&  make s2c_protocol  "
                echo "拉取s2c_protocol完成"
            }

        }
        stage(' build image ') {
            steps {
                script {
                    if (build_image){
                         echo "开始构建镜像"                  
                         sh "sh deploy/docker_image.sh push ${tag}   ${dockeruser}  ${dockerpwd}   ${dockerimageurl} ${dockerurl} "
                         echo "构建完成"
                    }
                } 
            }
        }
        stage(' pull image  ') {
            steps {
                 
                script {
                    if(pull_image){
                            echo " 节点拉取镜像 "
                            def jobs = [:]
                            for(int i=0;i<nodes.length;i++){ 
                                def node= nodes[i];
                                jobs["node-${node}"] = {
                                    
                                        stage("pull image ${node}") {
                                            echo " 节点 ${node} 开始拉取镜像 " 
                                            sshPublisher(publishers: [sshPublisherDesc(configName: "${node}", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "cd /www/phantom_assault &&  sh deploy/docker_image.sh pull ${tag}   ${dockeruser}  ${dockerpwd}   ${dockerimageurl} ${dockerurl} ", execTimeout: 250000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/www/phantom_assault', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'deploy/*')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])    
                                            echo  " 节点 ${node}  拉取镜像完成 "     
                                        }
                                    
                                }
                            }
                            parallel jobs
                            echo " 节点拉取镜像完成 "  
                    }
                }
                 
            }
        }

        stage('kubectl project') {
            steps {
                    script {    
                        if (kubectl){
                            echo "开始kubectl " 
                                sshPublisher(publishers: [sshPublisherDesc(configName: "${master_node}", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "cd /www/phantom_assault &&  cd  /www/phantom_assault/k8s/produce  &&    kubectl apply -f   namespace.yaml &&   kubectl apply -f config_map.yaml && kubectl apply -f ingress.yaml &&  kubectl apply -f servers.yaml    ", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/www/phantom_assault', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'k8s/produce/*')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                                }
                             echo "完成kubectl "     
                        }
 
                            
                    }
            }
        }
    }
}

二、参数说明

master_node  Extended Choice Parameter 单选  
tag Git Parameter 会自动获取git远程的所有tag
dockeruser  String Parameter
dockerpwd   String Parameter
dockerimageurl String Parameter
dockerurl  String Parameter
gituser String Parameter
gitpwd String Parameter
giturl String Parameter
nodes Extended Choice Parameter 多选  是用,相隔
build_image  Boolean Parameter
pull_image  Boolean Parameter
kubectl Boolean Parameter

总结

这个流水线例子运用了git进行代码的拉取代码,通过if 控制 脚本执行,在 pull_image 部分使用了并行的方式去执行脚本,这样在多个服务器的情况下,可以多个服务器同时拉取镜像,可以节省时间,最后在kubectl project,就是通过sshPublisher上传脚本到远程服务器,之后再执行,脚本比较简单对一般中小型系统已经足够应用了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值