目录
一、前提环境
1、nginx
https://blog.csdn.net/qq_42815754/article/details/82980326
2、Docker
百度
3、gitlab
Docker配置 Gitlab Jenkins java 项目自动化部署(一)Gitlab
4、jenkins
Docker配置 Gitlab Jenkins java 项目自动化部署(二)Jenkins
PS:只要一、二章的基础的配置安装
二、配置
1、vue项目准备
首先本地测试打包(验证确保这个项目是一个能正常运行的)
npm run build
cmd 到项目的目录输入命令后, 能够生成 一个 dist 文件夹,下图的黄色文件夹。该文件夹不需要上传gitlab ,只是一个测试,成功后删掉即可
2、代码上传gitlab
3、 创建宿主文件夹
我的 jenkins_home 映射的 是本地 /var/jenkins_mount(前提是你的jenkins已经安装好)
#创建文件夹
mkdir /var/jenkins_mount/web/autp-vue
#给权限
chmod 777 /var/jenkins_mount/web/autp-vue
4、 创建Dockerfile
在 /var/jenkins_mount/web/autp-vue 目录下创建
FROM nginx
WORKDIR /web/autp-vue
LABEL maintaniner="cjw"
COPY dist/ /usr/share/nginx/html/
COPY nginx.conf /etc/nginx/nginx.conf
FROM nginx #引用nginx 会在生成镜像的时候 生成一个
WORKDIR /web/autp-vue #创建工作空间
LABEL maintaniner="cjw"
COPY dist/ /usr/share/nginx/html/ #映射到nginx的前端虚拟路径
COPY nginx.conf /etc/nginx/nginx.conf #映射到nginx的配置
5、创建 nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include 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"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name 172.0.0.1;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ @router;
index index.html index.htm;
}
location @router {
rewrite ^.*$ /index.html last;
}
#这里添加一个反向映射,反射到springCloud的网关,如果不需要就去掉
location /inner/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8084/autp/inner/;
}
#location / {
# root html;
# index index.html index.htm;
#}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
上面的反向映射是指向gateway这里的,如果只是简单的springboot项目,则反向映射到其项目前缀即可
两个文件配置好
6、Jenkins配置
a、安装插件 nodejs
b.配置全局工具配置
PS:如果这里没有版本号可以选择的话,参考以下链接调整
https://blog.csdn.net/qq_33381971/article/details/89423977
c.新建任务
d.源码管理
把gitlab的仓库路径填入
c.构建触发器
去到gitlab配置webhook,把上面两个复制填上
d.构建环境
e.构建
这里分开两个shell处理
echo $PATH
node -v
npm -v
echo "修改依赖环境"
npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver
echo "添加依赖"
npm install
echo "项目打包生成dist文件夹"
npm run build
#!/bin/bash
source /etc/profile
#操作/项目路径(Dockerfile存放的路劲)
BASE_PATH=/var/jenkins_home/web/autp-vue
SERVER_NAME=autp-vue
#容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
#镜像id
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')
echo "复制 /var/jenkins_home/workspace/autp-vue/dist 到 /var/jenkins_home/web/autp-vue "
cp -r /var/jenkins_home/workspace/autp-vue/dist /var/jenkins_home/web/autp-vue
# 构建docker镜像
function build(){
if [ -n "$IID" ]; then
echo "存在$SERVER_NAME镜像,IID=$IID"
else
echo "不存在$SERVER_NAME镜像,开始构建镜像"
echo "命令 cd $BASE_PATH"
cd $BASE_PATH
echo "命令 docker build -t $SERVER_NAME ."
docker build -t $SERVER_NAME .
fi
}
# 运行docker容器
function run(){
build
if [ -n "$CID" ]; then
echo "存在$SERVER_NAME容器,CID=$CID,重启docker容器 ..."
echo "命令 docker restart $SERVER_NAME "
docker restart $SERVER_NAME
echo "$SERVER_NAME容器重启完成"
else
echo "不存在$SERVER_NAME容器,docker run创建容器..."
echo "命令 docker run -p 9000:80 -d -v /var/jenkins_mount/web/autp-vue:/web/autp-vue --name autp-vue autp-vue"
docker run -p 9000:80 -d -v /var/jenkins_mount/web/autp-vue:/web/autp-vue --name autp-vue autp-vue
echo "$SERVER_NAME容器创建完成"
fi
}
#入口
run
保存确认
三、测试
第一次构建会比较长时间
中间一堆日志省略。。。。。。。。
查看docker ps
页面输入IP:9000,成功打开(如果打开后,后台代码的接口访问404,则是nginx.conf 中的路由配置没对。自己核对下项目前缀和IP地址,请勿使用localhost,写上具体IP)
最后的代码一提交,自动化部署代码。
自动化更新部署成功,有其它的问题欢迎探讨