1.需要用到的软件:jenkins,docker,docker-compose,maven
2.软件搭建工作略过,直接说配置过程,这次涉及到的后端是java打成的jar包,前端vue打成的静态文件;
3.首先git clone前后端项目.git地址使用ssh
这样可以保证每次自动构建的时候不需要输入git账号密码,详细怎么配置使用ssh方式clone这里不想细说;
4.java通过maven构建成jar包,jar包直接放到镜像使用命令即可启动,这里我们编写dockerfile文件;
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD ./target/api.jar /app/api.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom", "-Duser.timezone=G MT+08", "-jar","/app/api.jar","--spring.profiles.active=prod"]
该命令中,将生成的jar包复制到指定目录,然后设置启动镜像时执行启动java命令;
5.配置docker-compose.yml:
version: '3.3'
services:
anguo_db:
image: postgres
container_name: anguo_db
restart: always
environment:
POSTGRES_PASSWORD: 123456
POSTGRES_DB: anguo
#POSTGRES_USER: anguo
ports:
- 5555:5432
volumes:
- ./data:/var/lib/postgresql/data/
anguo_java:
build:
context: ./anguo_air_quality_early_warning
dockerfile: ./dockerfile
#image: anguo
container_name: anguo_java
restart: always
depends_on:
- anguo_db
links:
- anguo_db
volumes:
- ./logs:/logs
- ./app/:/app/
expose:
- 8080
anguo_nginx:
image: nginx
command: nginx -g "daemon off;"
restart: always
ports:
- 63401:80
depends_on:
- anguo_java
links:
- anguo_java
container_name: anguo_nginx
volumes:
- ./default.conf:/etc/nginx/conf.d/default.conf
- ./html/dist:/usr/share/nginx/html/
配置中使用了挂载命令,将jar包和日志文件夹挂在出来,links是连接其他镜像进行通信,dpends_on是依赖其他镜像顺序启动;volumes是挂载目录,左边为相对路径的宿主机右边是镜像目录
6.注意事项:
(1)挂载后的目录权限为root,这里我手动chown -R dev.dev 更改了文件夹用户和用户组,否则没有权限,此处不知道是否为操作有误才会出现root权限;
(2)挂载出来的app文件夹需要提前将jar包放到里面,否则启动失败;nginx的配置文件同理;
(3)这里我将jar包文件挂载出来,是因为后续自动部署时将构建的新jar包直接拷贝到文件夹后重启java镜像即可,也可以直接重新构建所有镜像的方式,不过相对较慢;
7.编写自动部署时的前后端可执行文件:
后端:javastart.sh
#!/bin/bash
cd anguo_air_quality_early_warning
git pull origin develop
mvn clean package -Dmaven.test.skip=true
cp ./target/api.jar ../app/api.jar
docker-compose restart anguo_java
前端:webstart.sh (该处需要注意,第一次最好使用npm install,否则可能会产生依赖下载补全导致构建失败)
#!/bin/bash
export PATH=/home/dev/node-v8.10.0-linux-x64/bin:$PATH
cd anguo-air
git pull origin master
cnpm install
cnpm run generate
cd ../html/
rm -rf *
cd -
mv dist ../html/
docker-compose restart anguo_nginx
nginx配置: (该处java程序中,需要指定访问路径为 /api)
server {
listen 80;
server_name localhost;
client_max_body_size 20m;
location / {
root /usr/share/nginx/html/;
index index.html;
}
location /api {
proxy_pass http://anguo_java:8080/api;
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_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
}
8.展示一下项目文件存放位置:
9.配置jenkins:
上面的jenkins项目地址和秘钥填入gitlab中:
位置:项目中->setting->Integrations->Push events
-------------------------------------------------------------------------------------------------
以上就是完整一套我的自动部署流程;