注意看vuetest
(1)添加变量
This project is parameterized 模块下
Add Parameter
选择变量类型,比如单选Choice Parameter
设置参数
test2
poc
(2)使用变量
在jenkins Build with Parameters下面选择对应环境变量和分支
#!/bin/bash
commitId=$(git rev-parse refs/remotes/origin/${branch}^{commit})
echo "commitId:$commitId"
#echo "cp -rf /home/finance/App/vuetest/node_modules/. ./node_modules"
#cp -rf /home/finance/App/vuetest/node_modules/. ./node_modules
echo "sudo npm install"
sudo npm rebuild node-sass
sudo npm install
if [ $? -ne 0 ]; then
echo "npm install failed"
exit 1
else
echo "npm install succeed"
fi
echo "sudo npm run build:${env}"
sudo npm run build:${env}
if [ $? -ne 0 ]; then
echo "npm run build failed"
exit 1
else
echo "npm run build succeed"
fi
echo "mkdir -p ./doc/base/enviroment/${env}-admin/dist"
mkdir -p ./doc/base/enviroment/${env}-admin/dist
echo "cp -rf dist/* ./doc/base/enviroment/${env}-admin/dist"
cp -rf dist/* ./doc/base/enviroment/${env}-admin/dist
docker build -t harbor.maip.io/test/vuetest:${env}$commitId ./doc/base/enviroment/${env}-admin
if [ $? -ne 0 ]; then
echo "docker build failed"
exit 1
else
echo "docker build succeed"
fi
docker push harbor.maip.io/test/vuetest:${env}$commitId
if [ $? -ne 0 ]; then
echo "docker push failed"
exit 1
else
echo "docker push succeed"
firm -rf ./doc/base/enviroment/${env}-admin/dist
sed -ri "s!(test/vuetest:).+!test/vuetest:${env}$commitId!" ./doc/base/enviroment/${env}-admin/k8s_deploy.yaml
kubectl delete -f ./doc/base/enviroment/${env}-admin/k8s_deploy.yaml
kubectl apply -f ./doc/base/enviroment/${env}-admin/k8s_deploy.yaml
备注文件 看备注
# .sh文件
#!/bin/bash
commitId=$(git rev-parse refs/remotes/origin/${branch}^{commit})
# 获取对应分支的commitID
echo "commitId:$commitId"
#echo "cp -rf /home/finance/App/vuetest/node_modules/. ./node_modules"
#cp -rf /home/finance/App/vuetest/node_modules/. ./node_modules
echo "sudo npm install"
# 重构一下node-sass依赖
sudo npm rebuild node-sass
# 加载依赖
sudo npm install
# 判断依赖是否加载完成
# $?是shell变量,表示"最后一次执行命令"的退出状态.0为成功,非0为失败.
# -ne 不等于,如:if ["$a" -ne "$b" ]
# 如果任务失败 exit 1 强制退出
if [ $? -ne 0 ]; then
echo "npm install failed"
exit 1
else
echo "npm install succeed"
fi
echo "sudo npm run build:${env}"
# 执行打包命令 build:test 环境变量 test
sudo npm run build:${env}
# 判断是否成功
if [ $? -ne 0 ]; then
echo "npm run build failed"
exit 1
else
echo "npm run build succeed"
fi
echo "mkdir -p ./doc/base/enviroment/${env}-admin/dist"
# 创建多节文件夹 -p多级的意思
# 这里当前目录是项目目录
# ./doc/base/enviroment/下面环境变量-根据不同环境变量打不同的包
# dev-admin 下面有
# dist 打包文件
# Dockerfile
# 如果是Nginx配置 就会有nginx.conf文件
# 如果是 k8s 就会有k8s的 yaml文件 比如命名:k8s_deploy.yaml
mkdir -p ./doc/base/enviroment/${env}-admin/dist
echo "cp -rf dist/* ./doc/base/enviroment/${env}-admin/dist"
# 强制拷贝 打包后的文件 (dist文件下面所有文件) 到 目标目录下面,方便打docker
cp -rf dist/* ./doc/base/enviroment/${env}-admin/dist
# docker build -t name 目录 生成镜像
# arbor.maip.io/test/ocrweb:${env}$commitId 镜像名
# ./doc/base/enviroment/${env}-admin 目标文件
docker build -t harbor.maip.io/test/ocrweb:${env}$commitId ./doc/base/enviroment/${env}-admin
# 判断是否成功
if [ $? -ne 0 ]; then
echo "docker build failed"
exit 1
else
echo "docker build succeed"
fi
# 成功后 将镜像推送到镜像仓库 执行docker
docker push harbor.maip.io/test/ocrweb:${env}$commitId
if [ $? -ne 0 ]; then
echo "docker push failed"
exit 1
else
echo "docker push succeed"
fi
# 成功后 删除临时目录
rm -rf ./doc/base/enviroment/${env}-admin/dist
#将 ./doc/base/enviroment/${env}-admin/k8s_deploy.yaml文件中 test/ocrweb:镜像id改成 test/ocrweb:${env}$commitId 新的id
sed -ri "s!(test/ocrweb:).+!test/ocrweb:${env}$commitId!" ./doc/base/enviroment/${env}-admin/k8s_deploy.yaml
# 删除 k8s指定资源
kubectl delete -f ./doc/base/enviroment/${env}-admin/k8s_deploy.yaml
# 新建、更新
kubectl apply -f ./doc/base/enviroment/${env}-admin/k8s_deploy.yaml
k8s_deploy.yaml k8s配置
apiVersion: v1
kind: ConfigMap
metadata:
name: vuetest-config
namespace: poc-admin
labels:
app: vuetest
data:
default.conf: |
server {
listen 80;
server_name *.maip.test;
location / {
root /home/data;
index index.html;
}
}
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: vuetest
name: vuetest
namespace: poc-admin
spec:
selector:
matchLabels:
app: vuetest #{{appname}}
template:
metadata:
labels:
app: vuetest #{{appname}}
version: v1
log-index: applog-vuetest-poc-admin
spec:
tolerations:
- key: "special.repo"
operator: "Equal"
value: "true"
effect: "NoSchedule"
containers:
- name: vuetest
image: harbor.maip.io/test/vuetest:daacd5f23asdfaf
imagePullPolicy: IfNotPresent
livenessProbe:
initialDelaySeconds: 30
periodSeconds: 30
tcpSocket:
port: 80
ports:
- containerPort: 80
name: web
volumeMounts:
- name: vuetest-config
mountPath: /etc/nginx/conf.d
resources: #资源需要替换
limits:
cpu: "1"
memory: 2048Mi
requests:
cpu: "300m"
memory: 1024Mi
volumes:
- name: vuetest-config
configMap:
name: vuetest-config
---
apiVersion: v1
kind: Service
metadata:
labels:
app: vuetest #{{appname}}
name: vuetest-service #{{appname}}-service
namespace: poc-admin
spec:
ports:
- name: http
port: 80
targetPort: 80
selector:
app: vuetest #{{appname}}
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: vuetest-service
namespace: poc-admin
annotations:
kubernetes.io/ingress.class: "ai"
spec:
rules:
- host: adminweb-exp.msxf.com
http:
paths:
- path:
backend:
serviceName: vuetest-service
servicePort: 80
Dockerfile 配置
FROM nginx:1.18.0
USER root
RUN mkdir -p /home/data
COPY dist /home/data/
WORKDIR /home/data
如果是 jenkins nginx
jenkins配置
#!/bin/bash containerName="robotContainer" commitId=$(git rev-parse refs/remotes/origin/${branch}^{commit}) # 获取对应分支的commitID echo "commitId:$commitId" #echo "cp -rf /home/finance/App/vuetest/node_modules/. ./node_modules" #cp -rf /home/finance/App/vuetest/node_modules/. ./node_modules echo "sudo npm install" # 重构一下node-sass依赖 sudo npm rebuild node-sass # 加载依赖 sudo npm install # 判断依赖是否加载完成 # $?是shell变量,表示"最后一次执行命令"的退出状态.0为成功,非0为失败. # -ne 不等于,如:if ["$a" -ne "$b" ] # 如果任务失败 exit 1 强制退出 if [ $? -ne 0 ]; then echo "npm install failed" exit 1 else echo "npm install succeed" fi echo "sudo npm run build:${env}" # 执行打包命令 build:test 环境变量 test sudo npm run build:${env} # 判断是否成功 if [ $? -ne 0 ]; then echo "npm run build failed" exit 1 else echo "npm run build succeed" fi echo "mkdir -p ./doc/base/enviroment/${env}-admin/dist" # 创建多节文件夹 -p多级的意思 # 这里当前目录是项目目录 # ./doc/base/enviroment/下面环境变量-根据不同环境变量打不同的包 # dev-admin 下面有 # dist 打包文件 # Dockerfile # 如果是Nginx配置 就会有nginx.conf文件 # 如果是 k8s 就会有k8s的 yaml文件 比如命名:k8s_deploy.yaml mkdir -p ./doc/base/enviroment/${env}-admin/dist echo "cp -rf dist/* ./doc/base/enviroment/${env}-admin/dist" # 强制拷贝 打包后的文件 (dist文件下面所有文件) 到 目标目录下面,方便打docker cp -rf dist/* ./doc/base/enviroment/${env}-admin/dist # docker build -t name 目录 生成镜像 # arbor.maip.io/test/ocrweb:${env}$commitId 镜像名 # ./doc/base/enviroment/${env}-admin 目标文件 docker build -t harbor.maip.io/test/ocrweb:${env}$commitId ./doc/base/enviroment/${env}-admin # 判断是否成功 if [ $? -ne 0 ]; then echo "docker build failed" exit 1 else echo "docker build succeed" fi # 成功后 将镜像推送到镜像仓库 执行docker docker push harbor.maip.io/test/ocrweb:${env}$commitId if [ $? -ne 0 ]; then echo "docker push failed" exit 1 else echo "docker push succeed" fi # 成功后 删除临时目录 rm -rf ./doc/base/enviroment/${env}-admin/dist function runImage(){ # ansible 这个是个插件 需要配置host 设置免密登陆 # host在 nginx上配置 ansible ${host} -m shell -a "docker pull harbor.maip.io/test/ocrweb:${env}$commitId" ansible ${host} -m shell -a "docker stop ${containerName}" ansible ${host} -m shell -a "docker rm ${containerName}" # 创建文件 ansible ${host} -m shell -a "mkdir -p /home/data/log/" # 运行镜像 # /home/data/:/home/data/ 服务器的路径:docker的路径 映射关系 #/home/data/log/:/opt/nginx/logs/dialogue-robot.msxf.lo/access_log 服务器目录:docker日志目录 docker重启 日志都没了 # -p 9088:9012 端口映射 服务器9088 :docker 9102 # harbor.maip.io/test/ocrweb:${env}$commitId 镜像名称 ansible ${host} -m shell -a "docker run --name ${containerName} -d -v /home/data/:/home/data/ -v /home/data/log/:/opt/nginx/logs/dialogue-robot.msxf.lo/access_log -p 9088:9012 --network host -it harbor.maip.io/test/ocrweb:${env}$commitId" } runImage
worker_processes auto; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; server_tokens off; #log_format main '$remote_addr - $remote_user [$time_local] ' # '"$request" $status $bytes_sent ' # '"$http_referer" "$http_user_agent" ' # '"$gzip_ratio"'; log_format main '$http_x_forwarded_for | $time_local | $status | $body_bytes_sent | $gzip_ratio | ' '$request_method | $scheme | $server_protocol | $server_name | $server_port | ' '$request_uri | $request_time | $content_length | $http_referer | $http_user_agent | ' '$remote_addr | $remote_port | $remote_user | $http_cookie | $hostname | ' '$upstream_status | $upstream_addr | $upstream_http_host | $upstream_response_time'; #charset utf-8; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 300m; sendfile on; underscores_in_headers on; tcp_nopush on; keepalive_timeout 0; tcp_nodelay on; client_body_buffer_size 512k; fastcgi_intercept_errors on; proxy_connect_timeout 90; proxy_read_timeout 180; proxy_send_timeout 180; proxy_buffer_size 256k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; proxy_temp_file_write_size 256k; proxy_intercept_errors on; server_name_in_redirect off; proxy_hide_header X-Powered-By; gzip on; gzip_min_length 100; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 9; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; #error_page 400 401 402 403 404 405 408 410 412 413 414 415 500 501 502 503 506 = http://www.msfinance.cn/error2.aspx; map $http_upgrade $connection_upgrade { default upgrade; '' close; } include domains/*; #######default server#### server { listen 9012; server_name localhost; access_log /opt/nginx/logs/dialogue-robot.msxf.lo/access_log main; error_log /opt/nginx/logs/dialogue-robot.msxf.lo/error_log notice; add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X-Requested-With; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; root /usr/share/nginx/html/; location / { try_files $uri $uri/ /index.html; } location ~.*\.(js|css|jpg|png|jpeg|gif|mp4|svg|woff|ico|tff)$ { expires 30d; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }