记第一次在正式环境做自动化部署操作

/ 运维 / 没有评论 / 122浏览

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

-------------------------------------------------------------------------------------------------

以上就是完整一套我的自动部署流程;