1. 程式人生 > >記第一次在正式環境做自動化部署操作

記第一次在正式環境做自動化部署操作

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

 

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

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