Skip to content

Commit 64c137f

Browse files
author
李聚章
committed
添加部署文件
1 parent 1d0b7ee commit 64c137f

File tree

6 files changed

+280
-0
lines changed

6 files changed

+280
-0
lines changed

Jenkinsfile

+129
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
@Library('devops') _
2+
3+
pipeline {
4+
agent {label 'jenkins-slave-jnlp'}
5+
environment { // https://stackoverflow.com/questions/53541489/updating-environment-global-variable-in-jenkins-pipeline-from-the-stage-level
6+
NAME="admin-tmpl"
7+
NAMESPACE="oppc-rcyj-web"
8+
SERVER_PORT="80"
9+
}
10+
11+
options {
12+
// timestamps() //日志会有时间
13+
skipDefaultCheckout() //删除隐式checkout scm语句
14+
// disableConcurrentBuilds() //禁止并行,会列队式等前面的任务完才进行下一个任务
15+
timeout(time: 1, unit: 'HOURS') //流水线超时设置1h
16+
}
17+
18+
stages {
19+
stage('Init'){
20+
steps {
21+
script{
22+
// 【测试环境】变量
23+
env.INGRESS_HOST='admin-tmpl-test.rencaiyoujia.cn'
24+
env.INGRESS_TLS_SECRET="rencaiyoujia-tls-secret"
25+
env.REPLICAS="1" //deployment的副本数
26+
KUBECONTEXT = "k8s-test-admin" //测试环境k8s
27+
NPM_RUN_BUILD_CMD="npm run build:test"
28+
DOCKERFILE_NAME="Dockerfile"
29+
30+
// 【生产环境】变量
31+
if( "${BRANCH_NAME}"== "master"){
32+
env.INGRESS_HOST='admin-tmpl.rencaiyoujia.com'
33+
env.INGRESS_TLS_SECRET="rencaiyoujia-tls-secret"
34+
env.REPLICAS="2"
35+
KUBECONTEXT="k8s-prod-admin" //生产环境k8s
36+
NPM_RUN_BUILD_CMD="npm run build:prod"
37+
DOCKERFILE_NAME="Dockerfile"
38+
}
39+
40+
// 【开发环境】变量
41+
if( "${BRANCH_NAME}"== "dev"){
42+
env.INGRESS_HOST='admin-tmpl-dev.rencaiyoujia.cn'
43+
env.INGRESS_TLS_SECRET="rencaiyoujia-tls-secret"
44+
env.REPLICAS="1"
45+
KUBECONTEXT="k8s-dev-admin" //开发环境k8s
46+
NPM_RUN_BUILD_CMD="npm run build:dev"
47+
DOCKERFILE_NAME="Dockerfile"
48+
}
49+
}
50+
}
51+
}
52+
stage('Checkout') {
53+
steps {
54+
checkout scm
55+
}
56+
}
57+
stage('npm打包') {
58+
steps {
59+
script{
60+
// sh 'npm config set registry https://registry.npm.taobao.org'
61+
sh 'npm install --registry=https://registry.npm.taobao.org'
62+
sh "${NPM_RUN_BUILD_CMD}"
63+
}
64+
}
65+
}
66+
stage('DockerBuild') {
67+
steps {
68+
script{
69+
sh "rm -rf docker/dist;mv dist docker"
70+
devops.docker(env.NAME,dockerfile:"docker/${DOCKERFILE_NAME}",context:"docker").build().push()
71+
}
72+
}
73+
}
74+
75+
stage('Test') {
76+
steps {
77+
echo 'Testing..'
78+
}
79+
}
80+
81+
stage('Deploy') {
82+
parallel {
83+
stage('deploy ingress') {
84+
when {
85+
expression { env.INGRESS_HOST != null }
86+
}
87+
steps{
88+
sh """envsubst < k8smanifests/svc.yaml | kubectl --context ${KUBECONTEXT} apply -f - ;\
89+
envsubst < k8smanifests/ingress.yaml | kubectl --context ${KUBECONTEXT} apply -f - ;\
90+
"""
91+
}
92+
}
93+
stage('Deploy') {
94+
steps{
95+
sh """envsubst < k8smanifests/deploy.yaml ;\
96+
envsubst < k8smanifests/deploy.yaml | kubectl --context ${KUBECONTEXT} apply -f - ;\
97+
"""
98+
}
99+
}
100+
}
101+
}
102+
103+
}
104+
105+
106+
post{
107+
success{
108+
script{
109+
devops.dingtalk(env.NAME,env.DOCKERIMAGE,"构建成功 ✅")
110+
}
111+
}
112+
failure{
113+
script{
114+
devops.dingtalk(env.NAME,env.DOCKERIMAGE,"构建失败 ❌")
115+
}
116+
}
117+
unstable{
118+
script{
119+
devops.dingtalk(env.NAME,env.DOCKERIMAGE,"不稳定构建 ✅")
120+
}
121+
}
122+
aborted{
123+
script{
124+
devops.dingtalk(env.NAME,env.DOCKERIMAGE,"暂停或中断 ❌")
125+
}
126+
}
127+
}
128+
129+
}

docker/Dockerfile

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
FROM nginx:1.14-alpine
2+
3+
ARG PROJECT_DIR="dist"
4+
5+
COPY --chown=nginx:nginx ${PROJECT_DIR} /usr/share/nginx/html/release
6+
COPY default.conf /etc/nginx/conf.d/
7+
WORKDIR /usr/share/nginx/html/release

docker/default.conf

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
server {
2+
listen 80;
3+
server_name localhost;
4+
5+
client_max_body_size 100m;
6+
client_body_buffer_size 128k;
7+
proxy_connect_timeout 5;
8+
proxy_send_timeout 1800;
9+
proxy_read_timeout 1800;
10+
proxy_buffer_size 4k;
11+
proxy_buffers 4 32k;
12+
proxy_busy_buffers_size 64k;
13+
proxy_temp_file_write_size 64k;
14+
auth_basic "status";
15+
16+
location / {
17+
root /usr/share/nginx/html/release;
18+
index index.html index.htm;
19+
try_files $uri $uri/ /index.html; #VUE项目,配置路由(必须)
20+
}
21+
22+
location ^~ /assessh5 {
23+
alias /usr/share/nginx/html/release; # inflow uni-app H5编译文件的目录,index.html所在目录
24+
try_files $uri $uri/ /index.html last;
25+
index index.html index.htm;
26+
}
27+
28+
# location /inflow {
29+
# try_files $uri $uri/ /inflow/index.html;
30+
# root /usr/share/nginx/html/inflow/;
31+
# index index.html;
32+
# }
33+
34+
error_page 500 502 503 504 /50x.html;
35+
location = /50x.html {
36+
root /usr/share/nginx/html;
37+
}
38+
}

k8smanifests/deploy.yaml

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
labels:
5+
app: ${NAME}
6+
name: ${NAME}
7+
namespace: ${NAMESPACE}
8+
spec:
9+
replicas: ${REPLICAS}
10+
selector:
11+
matchLabels:
12+
app: ${NAME}
13+
strategy:
14+
rollingUpdate:
15+
maxSurge: 1
16+
maxUnavailable: 0
17+
type: RollingUpdate
18+
template:
19+
metadata:
20+
labels:
21+
app: ${NAME}
22+
spec:
23+
containers:
24+
- name: ${NAME}
25+
image: ${DOCKERIMAGE}
26+
imagePullPolicy: IfNotPresent
27+
ports:
28+
- name: http
29+
containerPort: ${SERVER_PORT}
30+
protocol: TCP
31+
livenessProbe:
32+
failureThreshold: 3
33+
httpGet:
34+
path: /
35+
port: ${SERVER_PORT}
36+
scheme: HTTP
37+
periodSeconds: 5
38+
successThreshold: 1
39+
timeoutSeconds: 3
40+
readinessProbe:
41+
failureThreshold: 3
42+
httpGet:
43+
path: /
44+
port: ${SERVER_PORT}
45+
scheme: HTTP
46+
periodSeconds: 5
47+
successThreshold: 1
48+
timeoutSeconds: 3
49+
startupProbe:
50+
httpGet:
51+
path: /
52+
port: ${SERVER_PORT}
53+
scheme: HTTP
54+
failureThreshold: 60
55+
periodSeconds: 10
56+
timeoutSeconds: 3
57+
resources:
58+
requests:
59+
cpu: 100m
60+
memory: 128Mi
61+
limits:
62+
cpu: "1"
63+
memory: 1500Mi
64+
imagePullSecrets:
65+
- name: aliyun-registry-secret
66+
- name: aliyun-registry-vpc-secret

k8smanifests/ingress.yaml

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
apiVersion: extensions/v1beta1
2+
kind: Ingress
3+
metadata:
4+
annotations:
5+
kubernetes.io/ingress.class: nginx
6+
nginx.ingress.kubernetes.io/client-body-buffer-size: 128k
7+
nginx.ingress.kubernetes.io/proxy-body-size: 100m
8+
nginx.ingress.kubernetes.io/proxy-buffer-size: 4k
9+
nginx.ingress.kubernetes.io/proxy-connect-timeout: "5"
10+
nginx.ingress.kubernetes.io/proxy-read-timeout: "1800"
11+
nginx.ingress.kubernetes.io/proxy-send-timeout: "1800"
12+
name: ${NAME}
13+
namespace: ${NAMESPACE}
14+
spec:
15+
rules:
16+
- host: ${INGRESS_HOST}
17+
http:
18+
paths:
19+
- backend:
20+
serviceName: ${NAME}
21+
servicePort: ${SERVER_PORT}
22+
path: /
23+
tls:
24+
- hosts:
25+
- ${INGRESS_HOST}
26+
secretName: ${INGRESS_TLS_SECRET}

k8smanifests/svc.yaml

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: ${NAME}
5+
namespace: ${NAMESPACE}
6+
spec:
7+
ports:
8+
- name: http
9+
port: ${SERVER_PORT}
10+
protocol: TCP
11+
targetPort: ${SERVER_PORT}
12+
selector:
13+
app: ${NAME}
14+
type: ClusterIP

0 commit comments

Comments
 (0)