Jenkins调用shell脚本传参至kubernetes实现滚动升级

Jenkins上配置打包结束后调用Shell脚本
传递参数给k8s
这里也可以使用修改yaml文件的方式实现滚动升级
这里仅说明调用脚本执行方式

#定义镜像名(使用私有镜像库)
IMAGE_NAME=www.xxxxx.com:24188/saas/rest-service
#使用的k8s命名空间
docker_namespace=test
#容器名称
docker_name=rest-service
#容器labels
docker_labels=rest-service
#容器份数
docker_replicas=1
#容器内部端口
docker_port=8081

#进入Jenkins项目路径
cd ${WORKSPACE}

#修改docker时区(JAVA添加Dockerfile:"-Duser.timezone=GMT+08",)(NGINX:直接改容器时间)
#cp /etc/localtime .
#sed -i '4i ADD localtime /etc/localtime' Dockerfile

#添加并使用Dockerfile打包(Beta)
sudo tee Dockerfile <<- 'EOF'
FROM java

ADD target/rest-service*.jar /app.jar

EXPOSE 8080

ENTRYPOINT ["java","-Xmx300m","-Dserver.port=8081","-Duser.timezone=GMT+08","-jar","app.jar"]
EOF

cat Dockerfile
sudo docker build -t ${IMAGE_NAME}:${BUILD_NUMBER}  .
docker images|grep ${IMAGE_NAME}

#上传至Harbor镜像仓库
docker login wh.xxxxx.com:24188 -u coho -p Password!zxc

docker push ${IMAGE_NAME}:${BUILD_NUMBER}

#升级镜像(滚动升级)(IP为kubernetes主机IP)
ssh admin1@192.168.2.241 "source /etc/profile ; pwd ; bash /home/admin1/jenkins/global/update.sh ${IMAGE_NAME}:${BUILD_NUMBER} ${docker_namespace} ${docker_name} ${docker_labels} ${docker_replicas} ${docker_port} ; exit"

#增加一位随机延时防止同时执行冲突报错(Beta)
radom=$(tr -cd '0-9' < /dev/urandom | head -c 1)
sleep ${radom}

#清理镜像(如果项目较多推荐改成删除生成的镜像)
docker system prune -a -f > /dev/null 2>&1

调用的kubernetes主机上/home/admin1/jenkins/global/update.sh
由于是滚动升级脚本,所以不涉及首次部署部分(首次部署调用其他脚本,这里不作说明)
该服务的网络配置还是使用原有svc为Nodeport模式

#/bin/sh
#自定义变量(默认缺省参数,用于手动执行该脚本测试)

#镜像名称
docker_images=www.xxxxx.cn:24188/saas/service-master:test1
#命名空间
docker_namespace=test
#容器名称
docker_name=rest-service
#容器labels
docker_labels=rest-service
#容器份数
docker_replicas=1
#容器内部端口
docker_port=8080

if  [ -n "$1" ] ;then
echo "使用参数构建模式"
echo "已检测到参数1"
docker_images=$1
echo "$docker_images"
sleep 2
fi

if  [ -n "$2" ] ;then
echo "已检测到参数2"
docker_namespace=$2
echo "$docker_namespace"
sleep 2
fi

if  [ -n "$3" ] ;then
echo "已检测到参数3"
docker_name=$3
echo "$docker_name"
sleep 2
fi

if  [ -n "$4" ] ;then
echo "已检测到参数4"
docker_labels=$4
echo "$docker_labels"
sleep 2
fi

if  [ -n "$5" ] ;then
echo "已检测到参数5"
docker_replicas=$5
echo "$docker_replicas"
sleep 2
fi

if  [ -n "$6" ] ;then
echo "已检测到参数6"
docker_port=$6
echo "$docker_port"
sleep 2
fi

#镜像库拉取镜像并查看
docker pull $docker_images
docker images|grep $docker_images

#升级镜像
kubectl set image deploy $docker_name *=$docker_images --namespace=$docker_namespace

sleep 10

#查看部署状态
kubectl get deployment --namespace=$docker_namespace
kubectl get pods --namespace=$docker_namespace
kubectl get service --namespace=$docker_namespace

#PORT取值
port=`kubectl get service --namespace=$docker_namespace|grep TCP|grep $docker_name|awk '{print $5}'|awk  -F ':'  '{print $2}'|awk  -F '/'  '{print $1}'`
#PORT显示
echo "NodePort外部端口为:"
echo $port
echo "" 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Jenkins调用Shell脚本执行SSH时,出现"host key verification failed"错误是因为SSH无法验证远程主机的密钥。这可能是由以下原因导致的: 1. 第一次连接:当第一次使用SSH连接到远程主机时,主机的密钥会被保存在~/.ssh/known_hosts文件中。如果主机的密钥发生了变化,就会导致验证失败。 解决方法:打开Jenkins所在服务器的终端,用ssh命令手动连接到该远程主机,确认是否出现了密钥变化的提示信息。如果确认变化是合理的,可以删除~/.ssh/known_hosts文件中对应的主机密钥,然后重新执行Jenkins任务。 2. 未正确配对:如果远程主机使用了公钥/私钥对进行连接验证,而Jenkins任务在使用SSH时没有正确配置公钥/私钥对,也会导致验证失败。 解决方法:检查Jenkins任务中SSH配置的密钥路径是否正确,并确保公钥已经添加到远程主机的~/.ssh/authorized_keys文件中。 3. hosts文件设置不正确:如果在远程主机的/etc/hosts文件中设置了不正确的主机名,会导致验证失败。 解决方法:在远程主机上检查/etc/hosts文件,确保主机名和IP地址的对应关系正确。 综上所述,解决"host key verification failed"错误的方法包括删除已知主机密钥、正确配置公钥/私钥对和检查/etc/hosts文件设置等。根据具体情况进行排查和解决,可以消除该错误并使Jenkins任务能够顺利执行SSH操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值