delete_old_images() {
#删除以前的镜像,节省本地空间
if docker images | grep $javaname ; then
docker rmi -f `docker images | grep $javaname | awk '{print $3}'`
fi
} #镜像打包上传
image_push() {
#处理-问题
docker build -t 192.168.200.10/$namespace_name/$javaname:${BUILD_NUMBER} /export/docker-project-${GET_RESULT}/$javadir/
docker push 192.168.200.10/$namespace_name/$javaname:${BUILD_NUMBER}
} replace_k8s_yaml() {
#替换模版中namespace
sed "s/test-namespace/$namespace_name/g" /export/Docker-Template/${GET_RESULT}/namespaces.yaml >/export/docker-project-${GET_RESULT}/$javadir/${javaname}-namespaces.yaml #替换模版中 deployment文件
sed "s/im-web/$javaname/g" /export/Docker-Template/${GET_RESULT}/im-web-deployment.yaml >/export/docker-project-${GET_RESULT}/$javadir/${javaname}-deployment.yaml
sed -i "s/test-namespace/$namespace_name/g" /export/docker-project-${GET_RESULT}/$javadir/${javaname}-deployment.yaml #替换模版中server yaml文件
sed "s/im-web/$javaname/g" /export/Docker-Template/${GET_RESULT}/im-web-service.yaml >/export/docker-project-${GET_RESULT}/$javadir/${javaname}-service.yaml
sed -i "s/test-namespace/$namespace_name/g" /export/docker-project-${GET_RESULT}/$javadir/${javaname}-service.yaml #替换镜像的版本号(时间为版本号)
sed -i "s/latest/${BUILD_NUMBER}/g" /export/docker-project-${GET_RESULT}/$javadir/${javaname}-deployment.yaml # 启动pod的个数
sed -i "s/numberpod/${numberpod}/g" /export/docker-project-${GET_RESULT}/$javadir/${javaname}-deployment.yaml } create_update_k8s() {
#定义namespace 为test:
k8s_apicurl="curl --cacert /root/ca.pem"
k8s_url="https://192.168.200.11:6443" #创建namespaces
if ! `$k8s_apicurl -basic -u fengjian:fengjian --insecure -X GET $k8s_url/api/v1/namespaces | grep ${namespace_name} >/dev/null` ;then
$k8s_apicurl -basic -u fengjian:fengjian --insecure -H "content-Type: application/yaml" -X POST $k8s_url/api/v1/namespaces -d "$(cat /export/docker-project-${GET_RESULT}/${javadir}/${javaname}-namespaces.yaml)"
fi #创建service
#if `$k8s_apicurl -basic -u fengjian:fengjian --insecure -X GET $k8s_url/api/v1/namespaces/${namespace_name}/services | grep "${javaname}" >/dev/null` ; then
# $k8s_apicurl -basic -u fengjian:fengjian --insecure -H "content-Type: application/yaml" -X PUT $k8s_url/api/v1/namespaces/${namespace_name}/services/${javaname} -d "$(cat /export/docker-project-${GET_RESULT}/$javadir/${javaname}-service.yaml)"
#else
# $k8s_apicurl -basic -u fengjian:fengjian --insecure -H "content-Type: application/yaml" -X POST $k8s_url/api/v1/namespaces/${namespace_name}/services -d "$(cat /export/docker-project-${GET_RESULT}/$javadir/${javaname}-service.yaml)"
#fi #创建service
if `$k8s_apicurl -basic -u fengjian:fengjian --insecure -X GET $k8s_url/api/v1/namespaces/${namespace_name}/services | grep "${javaname}" >/dev/null` ; then
$k8s_apicurl -basic -u fengjian:fengjian --insecure -H "content-Type: application/yaml" -X DELETE $k8s_url/api/v1/namespaces/${namespace_name}/services/${javaname}
fi $k8s_apicurl -basic -u fengjian:fengjian --insecure -H "content-Type: application/yaml" -X POST $k8s_url/api/v1/namespaces/${namespace_name}/services -d "$(cat /export/docker-project-${GET_RESULT}/$javadir/${javaname}-service.yaml)" #创建Deployment
if `$k8s_apicurl -basic -u fengjian:fengjian --insecure -X GET $k8s_url/apis/apps/v1beta2/namespaces/${namespace_name}/deployments/ | grep "${javaname}" >/dev/null` ; then
#滚动升级
$k8s_apicurl -basic -u fengjian:fengjian --insecure -H "content-Type: application/yaml" -X PUT $k8s_url/apis/apps/v1beta2/namespaces/${namespace_name}/deployments/${javaname} -d "$(cat /export/docker-project-${GET_RESULT}/$javadir/${javaname}-deployment.yaml)"
else
$k8s_apicurl -basic -u fengjian:fengjian --insecure -H "content-Type: application/yaml" -X POST $k8s_url/apis/apps/v1beta2/namespaces/${namespace_name}/deployments/ -d "$(cat /export/docker-project-${GET_RESULT}/$javadir/${javaname}-deployment.yaml)"
fi } add_ingress() { # 假如使用域名方式访问
if ! `$k8s_apicurl -basic -u fengjian:fengjian --insecure -X GET $k8s_url/apis/extensions/v1beta1/namespaces/${namespace_name}/ingresses | grep "${dnsname}.cinyi.com" >/dev/null`; then
if [ $accessmode -eq ] ; then
cat /export/Docker-Template/ingress/ingress-domain-template.yaml > /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml
sed -i "s/default/${namespace_name}/g" /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml
sed -i "s/nginx/${dnsname}/g" /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml
sed -i "s/servicename/${javaname}/g" /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml
$k8s_apicurl -basic -u fengjian:fengjian --insecure -H "content-Type: application/yaml" -X POST $k8s_url/apis/extensions/v1beta1/namespaces/${namespace_name}/ingresses -d "$(cat /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml)"
else
cat /export/Docker-Template/ingress/ingress-domain-project-template.yaml > /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml
sed -i "s/default/${namespace_name}/g" /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml
sed -i "s/nginx/${dnsname}/g" /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml
sed -i "s/servicename/${javaname}/g" /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml
projectname=`echo ${javaname} | tr 'a-z' 'A-Z'`
sed -i "s/projectname/${projectname}/g" /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml
$k8s_apicurl -basic -u fengjian:fengjian --insecure -H "content-Type: application/yaml" -X POST $k8s_url/apis/extensions/v1beta1/namespaces/${namespace_name}/ingresses -d "$(cat /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml)"
fi
else
#假如有dnsname.cinyi.com域名,那么更新
if [ $accessmode -eq ] ; then
cat /export/Docker-Template/ingress/ingress-domain-template.yaml > /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml
sed -i "s/default/${namespace_name}/g" /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml
sed -i "s/nginx/${dnsname}/g" /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml
sed -i "s/servicename/${javaname}/g" /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml
#curl --cacert /root/ca.pem -basic -u fengjian:fengjian --insecure -X DELETE https://192.168.200.11:6443/apis/extensions/v1beta1/namespaces/testsy/ingresses/adminserver
#先删除
$k8s_apicurl -basic -u fengjian:fengjian --insecure -X DELETE $k8s_url/apis/extensions/v1beta1/namespaces/${namespace_name}/ingresses/${javaname}
#从新再创建
$k8s_apicurl -basic -u fengjian:fengjian --insecure -H "content-Type: application/yaml" -X POST $k8s_url/apis/extensions/v1beta1/namespaces/${namespace_name}/ingresses -d "$(cat /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml)"
else
cat /export/Docker-Template/ingress/ingress-domain-project-template.yaml > /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml
sed -i "s/default/${namespace_name}/g" /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml
sed -i "s/nginx/${dnsname}/g" /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml
sed -i "s/servicename/${javaname}/g" /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml
projectname=`echo ${javaname} | tr 'a-z' 'A-Z'`
sed -i "s/projectname/${projectname}/g" /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml
#先删除
$k8s_apicurl -basic -u fengjian:fengjian --insecure -X DELETE $k8s_url/apis/extensions/v1beta1/namespaces/${namespace_name}/ingresses/${javaname}
#重新创建
$k8s_apicurl -basic -u fengjian:fengjian --insecure -H "content-Type: application/yaml" -X POST $k8s_url/apis/extensions/v1beta1/namespaces/${namespace_name}/ingresses -d "$(cat /export/docker-project-${GET_RESULT}/$javadir/${javaname}-ingress.yaml)" fi
fi } replace_content() { if [ "$1" == "gz" ] ;then
#创建/export/docker-project-gz
mkdir -p /export/docker-project-gz/$javadir #删除已经
if [ -f /export/docker-project-gz/$javadir/$javaname.tar.${GET_RESULT} ] ;then
rm -rf /export/docker-project-gz/$javadir/$javaname.tar.${GET_RESULT}
fi #将编译后的war包拷贝到/export/docker-project-gz/$javadir目录下
mv $javaname_path /export/docker-project-gz/$javadir/$javaname.tar.${GET_RESULT} #在/export/Docker-Template/gz 目录下有一个dockerfile模版,根据war包的名字替换成新的dockerfile #替换Dockerfile中的tar 名字
sed "s/jenkins/$javaname/g" /export/Docker-Template/gz/Dockerfile >/export/docker-project-gz/$javadir/Dockerfile elif [ "$1" == "war" ] ;then
#创建/export/docker-project
mkdir -p /export/docker-project-war/$javadir #删除已经
if [ -f /export/docker-profile-war/$javadir/$javaname.${GET_RESULT} ] ;then
rm -rf /export/docker-profile-war/$javadir/$javaname.${GET_RESULT}
fi #将编译后的war包拷贝到/export/docker-project-war/$javadir目录下
mv $javaname_path /export/docker-project-war/$javadir/$javaname.${GET_RESULT} #在/export/Docker-Template 目录下有一个dockerfile模版,根据war包的名字替换成新的dockerfile #替换Dockerfile中的war 名字
sed "s/jenkins/$javaname/g" /export/Docker-Template/war/Dockerfile >/export/docker-project-war/$javadir/Dockerfile elif [ "$1" == "jar" ] ;then
#创建/export/docker-project-jar
mkdir -p /export/docker-project-jar/$javadir #删除已经
if [ -f /export/docker-project-jar/$javadir/$javaname.${GET_RESULT} ] ;then
rm -rf /export/docker-project-jar/$javadir/$javaname.${GET_RESULT}
fi #将编译后的war包拷贝到/export/docker-project-jar/$javadir目录下
mv $javaname_path /export/docker-project-jar/$javadir/$javaname.${GET_RESULT} #在/export/Docker-Template/jar 目录下有一个dockerfile模版,根据war包的名字替换成新的dockerfile #替换Dockerfile中的war 名字
sed "s/jenkins/$javaname/g" /export/Docker-Template/jar/Dockerfile >/export/docker-project-jar/$javadir/Dockerfile
/bin/cp /export/Docker-Template/jar/start.sh /export/docker-project-jar/$javadir/ elif [ "$1" == "js" ] ;then #将编译后的war包拷贝到/export/docker-project-js/$javadir目录下 cd $WORKSPACE
#cnpm install --registry=http://192.168.20.71:8081/repository/npm-repo-proxy/
cnpm install --registry=https://registry.npm.taobao.org
cnpm install sass-loader node-sass -D
cnpm install
cnpm run build-empi #创建/export/docker-project-jar
mkdir -p /export/docker-project-js/$javadir #删除已经
#if [ -f /export/docker-project-nodejs/$javadir/ ] ; then
rm -rf /export/docker-project-js/$javadir/*
#fi mv $WORKSPACE/dist/empi /export/docker-project-js/$javadir/ mv $WORKSPACE/config/nginx.conf /export/docker-project-js/$javadir/ #导入Dockerfile模板
cp /export/Docker-Template/js/Dockerfile /export/docker-project-js/$javadir/ sed -i "s/172.16.201.50:9001/empirest/g" /export/docker-project-js/$javadir/nginx.conf
sed -i "s/172.16.201.50:7001/webadmin/g" /export/docker-project-js/$javadir/nginx.conf
sed -i "s/172.16.201.50:6001/authserver/g" /export/docker-project-js/$javadir/nginx.conf fi delete_old_images image_push replace_k8s_yaml create_update_k8s add_ingress } #镜像仓库地址
registry="192.168.200.10" #取出项目目录subject-bj-prod-serverapi-gz
javadir=`echo $WORKSPACE | awk -F'/' '{print $5}'` #判断结尾名称格式war|jar|gz
GET_RESULT=`echo $javadir | awk -F'-' '{print $NF}'` #java的路径 /root/.jenkins/jobs/subject-bj-test-imserver/workspace/target/11.war
## 注意:如果存在分支情况,javaname_path 路径需要具体查看jenkins再做修改 #有分支
#javaname_path=`find $WORKSPACE/xxx/target/ -maxdepth 1 -type f | egrep "\.${GET_RESULT}$"` #无分支
javaname_path=`find $WORKSPACE/target/ -maxdepth 1 -type f | egrep "\.${GET_RESULT}$"` #获取jar名称 11.war
javaname_all=`echo $javaname_path | awk -F'/' '{print $NF}'` #获取jar名称 11
javaname=`echo $javadir| awk -F'-' '{print $4}'` #取出环境(生产或者测试)prod
environment=`echo $javadir | awk -F'-' '{print $3}'` #获取namespace
namespace_name=$environment`echo $javadir | awk -F'-' '{print $1}'` #dns域名
#dnsname="xkim"
dnsname=$environment$javaname case "$GET_RESULT" in
war|jar|gz|js)
replace_content $GET_RESULT
;;
*)
echo "未知"
;;
esac

jenkins 调用 k8s api的更多相关文章

  1. 调用k8s api遇到CERTIFICATE_VERIFY_FAILED的问题解决方法

    前言 python3.5.6版本,django1.1.12版本 最近要调用k8s接口,k8s接口的使用方法请参考官网的说明:戳我 调用k8s接口时,遇到 CERTIFICATE_VERIFY_FAIL ...

  2. 2.Jenkins结合k8s完成Jenkins slave功能

    1.构建镜像 下载基础镜像,这里使用openvz的包,下载地址为:https://wiki.openvz.org/Download/template/precreated,下载centos7的镜像 下 ...

  3. 在kubernetes 集群内访问k8s API服务

    所有的 kubernetes 集群中账户分为两类,Kubernetes 管理的 serviceaccount(服务账户) 和 useraccount(用户账户).基于角色的访问控制(“RBAC”)使用 ...

  4. 给 K8s API “做减法”:阿里巴巴云原生应用管理的挑战和实践

    作者 | 孙健波(天元)  阿里巴巴技术专家本文整理自 11 月 21 日社群分享,每月 2 场高质量分享,点击加入社群. 早在 2011 年,阿里巴巴内部便开始了应用容器化,当时最开始是基于 LXC ...

  5. Unity在Android和iOS中如何调用Native API

    本文主要是对unity中如何在Android和iOS中调用Native API进行介绍. 首先unity支持在C#中调用C++ dll,这样可以在Android和iOS中提供C++接口在unity中调 ...

  6. C#调用windows API的一些方法

    使用C#调用windows API(从其它地方总结来的,以备查询) C#调用windows API也可以叫做C#如何直接调用非托管代码,通常有2种方法: 1.  直接调用从 DLL 导出的函数. 2. ...

  7. 使用Python调用Flickr API抓取图片数据

    Flickr是雅虎旗下的图片分享网站,上面有全世界网友分享的大量精彩图片,被认为是专业的图片网站.其API也很友好,可以实现多种功能.这里我使用了Python调用其API获得了大量的照片数据.需要注意 ...

  8. WebApi系列~通过HttpClient来调用Web Api接口

    回到目录 HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api ...

  9. C#调用Windows API函数截图

    界面如下: 下面放了一个PictureBox 首先是声明函数: //这里是调用 Windows API函数来进行截图 //首先导入库文件 [System.Runtime.InteropServices ...

随机推荐

  1. WebApiTestHelpPage

    这是个什么鬼,第一次见到的时候,我也不知道就花几天时间看了下它的代码 在网上搜索WebApiTestHelpPage会出来很多相关页面   但是它们都是介绍怎么用的,要么就是怎么添加注释   它是怎么 ...

  2. JavaScript unshift()怎样添加数据的?

    var a = new Array(); a.unshift("red", "green"); a.unshift("black"); 这个 ...

  3. 前端日报-20160527 underscore 源码解读

    underscore 源码解读 API文档浏览器 JavaScript 中加号操作符细节 抛弃 jQuery,拥抱原生 JS 从 0 开始学习 GitHub 系列之「加入 GitHub」 js实现克隆 ...

  4. ci 3.0 默认路由放在子文件夹 无法访问的解决办法

      比方说你想配置默认路由为: $route['default_controller'] = 'index/home'; ci3.0之前是可以放在 controllers中的子文件夹中的,但是到了ci ...

  5. 献给java求职路上的你们

    为了更好的树立知识体系,我附加了相关的思维导图,分为pdf版和mindnote版.比如java相关的导图如下: 由于时间仓促,有些地方未写完,后面会继续补充.如有不妥之处,欢迎及时与我沟通. 相关概念 ...

  6. Linux 网络流量查看 Linux ip traffic monitor

    Network monitoring on Linux This post mentions some linux command line tools that can be used to mon ...

  7. Oracle Sequence Cache 参数说明

    转自 http://blog.csdn.net/tianlesoftware/article/details/5995051 之前整理的一篇文章: ORACLE SEQUENCE 介绍 http:// ...

  8. error MSB3552: Resource file "**/*.resx" cannot be found. [/ConsoleApp1.csproj]

    问题场景: 练习在docker下操作netcore,镜像为centos7,安装完netcore sdk 2.2后,执行操作: dotnet new consoledotnet run 出现报错: /u ...

  9. numpy深入理解剖析

    http://www.scipy-lectures.org/advanced/advanced_numpy/index.html

  10. Windows ->> 解决Windows 10下面无法多用户同时远程桌面

    解决Windows 10下面无法多用户同时远程桌面 https://pc4u.org/how-to-allow-multiple-rdp-sessions-windows-10-without-mod ...