doc-test

Jenkins配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173

cd $DOCKER_WORKSPACE/$JOB_NAME


# 创建docker mongo.yml文件(执行一次就好了)
tee mongo.yml <<-'EOF'

version: "3.5"

services:

mongo:
image: mongo
environment:
- MONGO_INITDB_DATABASE=yapi
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=root
ports:
- target: 27017
published: 27017
mode: host
volumes:
- mongo_data_db:/data/db
networks:
middleware:
deploy:
replicas: 1
update_config:
parallelism: 1
restart_policy:
condition: on-failure

volumes:
mongo_data_db:

networks:
middleware:
external: true

EOF

# 启动
docker stack up -c mongo.yml data


# 自定义配置文件 config.json
# 其中管理员账号在下面配置,密码默认为ymfe.org
tee config.json <<-'EOF'

{
"port": "3000",
"adminAccount": "admin",
"timeout":120000,
"db": {
"servername": "_MONGO_SERVER_NAME",
"DATABASE": "yapi",
"port": 27017,
"user": "root",
"pass": "root",
"authSource": "admin"
}
}

EOF

# 自定义配置文件 docker-entrypoint.sh
tee docker-entrypoint.sh <<-'EOF'
#!/bin/bash

# set -eo pipefail

declare -A PAGE_PARAMS=(

["_MONGO_SERVER_NAME"]="mongo"

)

for index in "${!PAGE_PARAMS[@]}";

do

ENV_VAL=`eval echo '$'${index}`

[ -z "${ENV_VAL}" ] && ENV_VAL=${PAGE_PARAMS[$index]}

echo "text repeat: ${index}-->${ENV_VAL}"
echo "$(/bin/sed "s!${index}!${ENV_VAL}!g" /yapi/config.json)" > /yapi/config.json;

done

exec "$@"

EOF

# 创建Dockerfile文件
tee Dockerfile <<-'EOF'

FROM node:12-alpine as builder
WORKDIR /yapi
RUN apk add --no-cache wget python3 make
ENV VERSION=1.9.3
RUN wget https://github.com/YMFE/yapi/archive/v${VERSION}.zip
RUN unzip v${VERSION}.zip && mv yapi-${VERSION} vendors
RUN cd vendors && npm install --production --registry https://registry.npm.taobao.org

FROM node:12-alpine
MAINTAINER 183461750@qq.com
ENV TZ="Asia/Shanghai"
ENV MONGO_SERVER_NAME=mongo
WORKDIR /yapi/vendors
COPY --from=builder /yapi/vendors /yapi/vendors
COPY config.json ../config.json
COPY docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
RUN echo -e http://mirrors.ustc.edu.cn/alpine/v3.15/main/ > /etc/apk/repositories
RUN apk add --no-cache bash
EXPOSE 3000
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["node", "server/app.js"]

EOF

# app构建版本号
export app_version='1.0'

# 构建镜像
docker build -t $JOB_NAME:$app_version .

# 上传镜像到私服
docker tag $JOB_NAME:$app_version registry.docker.com:5000/$JOB_NAME:$app_version
docker push registry.docker.com:5000/$JOB_NAME:$app_version

# 创建docker yapi.yml文件
tee $JOB_NAME.yml <<-'EOF'

version: "3.5"

services:

$JOB_NAME:
image: registry.docker.com:5000/$JOB_NAME:${app_version}
ports:
- target: 3000
published: 3000
mode: host
environment:
MONGO_SERVER_NAME: mongo
depends_on:
- mongo
volumes:
- yapi_log:/home/vendors/log
- ./config.json:/yapi/config.json
networks:
middleware:
deploy:
replicas: 1
update_config:
parallelism: 1
restart_policy:
condition: on-failure

volumes:
yapi_log:

networks:
middleware:
external: true

EOF

# 启动
docker stack up -c $JOB_NAME.yml open_app