前面做过jenkins发布nodejs项目,使用ssh插件,这回没有使用ssh插件。

1、将项目、发布动作、主机作为参数,配置参数化构建

2、配置拉取git仓库项目

3、构建环境选项nodejs

4、编写构建脚本

url="harbor.wehgc.com:10443/library"opt="/opt/kubernetes/bin/kubectl"value=`ssh root@$host "$opt -n wehgc get deploy $project" |tail -1|awk '{print \$1}'`VER=`ssh root@$host "cd /home/lucky-front/$project;grep $url $project.yaml|cut -d ":" -f 4"`     ##这个$VER是取docker镜像的标签export NODE_HOME=/var/jenkins_home/node-v14.15.4-linux-x64export PATH=$PATH:$NODE_HOME/binexport PATH=$PATH:/root/.npm-global/binupdate(){#    npm install -g cnpm --registry=https://registry.npm.taobao.org    cnpm install #安装cnpm    cnpm run build #构建项目    ssh root@$host "rm -rf /home/lucky-front/$project/$project"    scp -r $WORKSPACE/$project root@$host:/home/lucky-front/$project/    ssh root@$host "cd /home/lucky-front/$project;sed -i 's#$VER#$BUILD_ID.1#g' $project.yaml"    ##这里面是表示每次更新后将标签更改为$BUILD_ID.    ssh root@$host "cd /home/lucky-front/$project;docker build -t $url/$project:$BUILD_ID.1 ."    ssh root@$host "docker login -u "admin" -p "GJ9JwGl0jL" $url"    ssh root@$host "docker push $url/$project:$BUILD_ID.1"    [ -n "$value" ] && ssh root@$host "$opt -n wehgc set image deployment $project $project=$url/$project:$BUILD_ID.1" || ssh root@$host "cd /home/lucky-front/$project;$opt apply -f $project.yaml"  }    case $Status  in  Deploy)    echo "Status:$Status"               update    ;;  Rollback)      echo "Status:$Status"      ssh root@$host "kubectl -n wehgc rollout history deploy $project"      ssh root@$host "kubectl -n wehgc rollout undo deploy $project"      ;;  *)  exit      ;;esac

5、在执行构建之前要在主机的

/home/lucky-front/$project目录创建好以下三个文件

Dockerfile文件

[root@master trucpal]# cat Dockerfile FROM ubuntu:latestRUN apt-get updateRUN apt-get install -y vimRUN apt-get install -y nginxRUN apt-get install -y net-toolsCOPY nginx.conf /etc/nginx/nginx.confRUN ln -sf /dev/stdout /var/log/nginx/access.log &&     ln -sf /dev/stderr /var/log/nginx/error.logRUN mkdir /usr/local/wwwCOPY $project /usr/local/www/$projectENV TZ=Asia/Shanghai RUN set -eux; \     ln -snf /usr/share/zoneinfo/$TZ /etc/localtime;     echo $TZ > /etc/timezoneWORKDIR /homeCMD ["nginx","-g","daemon off;"]

yaml文件

[root@master trucpal]# cat trucpal.yaml apiVersion: v1kind: Servicemetadata:  name: trucpal  namespace: wehgcspec:  ports:  - nodePort: 31280    port: 1280    protocol: TCP    targetPort: 1280  selector:    app: trucpal  type: NodePort---apiVersion: apps/v1kind: Deploymentmetadata:  name: trucpal  namespace: wehgcspec:  replicas: 1  selector:    matchLabels:      app: trucpal  template:    metadata:      labels:        app: trucpal    spec:      containers:      - image: harbor.wehgc.com:10443/library/trucpal:5.1        imagePullPolicy: Always        name: trucpal        ports:        - containerPort: 1280          protocol: TCP      imagePullSecrets:      - name: registry-pull-secret

nginx.conf文件

[root@master trucpal]# cat nginx.conf worker_processes  2;pid        /var/run/nginx.pid;events {    worker_connections  1024;}http {    include       /etc/nginx/mime.types;    default_type  application/octet-stream;    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                      '$status $body_bytes_sent "$http_referer" '                      '"$http_user_agent" "$http_x_forwarded_for"';    sendfile        on;    #tcp_nopush     on;    keepalive_timeout  65;    #gzip  on;    client_header_buffer_size 32k;    large_client_header_buffers 4 32k;    include /etc/nginx/conf.d/*.conf;     server {       listen       1280;       server_name  127.0.0.1;        root   /usr/local/www/trucpal;        location ~ .*\.(htm|html|gif|jpg|jpeg|png|ico|css|js|txt|flv|doc)$ {        error_page 405 =200 $uri;        }        index  index.html;       charset utf-8;        location / {            try_files $uri $uri/ @router;            index  index.html;        }       location @router {        rewrite ^.*$ /index.html last;    }        }     }

6、这里的逻辑说明一下,因为这是要发布到k8s里面的,所以Dockerfile是要构建docker镜像的,nginx配置文件是Dockerfile里面写明要拷到容器里面的,yaml文件是用来在k8s里面使用Kubectl apply执行的

©著作权归作者所有:来自51CTO博客作者草根追逐的原创作品,如需转载,请注明出处,否则将追究法律责任

每一份赞赏源于懂得

赞赏

0人进行了赞赏支持

更多相关文章

  1. Oracle BLOB类型的数据如何查看和下载?
  2. Oracle如何使用spool导出utf8字符集的文本文件
  3. Windows 7平台静默安装11.2.0.4软件及静默建库
  4. Linux下自动清理超过指定大小文件的方法
  5. 17年未修复的Firefox本地文件窃取漏洞分析
  6. 【linux】循序渐进学运维-基础篇-Linux系统目录
  7. 在Linux中创建 本地yum源
  8. 【linux】循序渐进学运维-基础篇-操作系统初始化
  9. 【linux】循序渐进学运维-基础篇-文件权限管理

随机推荐

  1. android studio 中一些比较好的插件
  2. Android HDMI( 三)
  3. Android 中文 API (102)—— CursorAdapter
  4. Nexus one (Android(安卓)2.1升级Android
  5. 系出名门Android(5) - 控件(View)
  6. Android网络应用接口
  7. Bitmap的加载和Cache
  8. Android 属性动画简介
  9. Android 创建android Splash界面以及避免
  10. android:theme="@android:style/Theme.Li