一、例子
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上传脚本到远程服务器,之后再执行,脚本比较简单对一般中小型系统已经足够应用了。