乐趣区

DevOps-基于Walle的小型持续集成实战六基于Walle发布前端ReactAngular应用

本章用于讲解如何在 walle 下构建和运行前端应用。主要包含 React,Angular 应用,以 Nginx+Docker 运行(Vue 方式不讲,大家自行研究)

新建项目

项目中心 > 项目管理 > 新建项目

以下是一份配置好的项目表

分组 项目 参考 备注
基本配置 项目名称 dev- 我的 JavaDemo 项目 随便填写,名称不要太长(不好看),最好把环境卸载最前,例如 dev(开发环境)
基本配置 环境 开发环境 提前在环境管理配置好即可
基本配置 Git Repo git@gitlab.xxx.com:xxx/react-demo.git Git 仓库地址
目标集群 目标集群 192.168.0.122 提前配置服务器管理
目标集群 目标集群部署路径 /data/walle-build/react-demo 实际运行的环境
目标集群 目标集群部署仓库 /data/walle-run 会存放多个版本编译后的项目
目标集群 目标集群部署仓库版本保留数 5 可以回滚的版本数

配置脚本

前端生态下基本脚本区别较大,但拥有共通性,此处以 Angular 为例

基本脚本

任务配置 – 部署包含文件

包含方式

docker-compose.yml
nginx.conf
dist

该方式用于描述从源码包到发布包中,排除 / 包含的内容。一般 java 使用 target 即可

任务配置 – 自定义全局变量

# 运行目录
# 运行目录
NG_PATH=/data/walle-tool/node-v10.5.0-linux-x64/lib/node_modules/@angular/cli/bin
PORT=2222
ENV=test
SERVER_NAME=idp-server-ui-test

【Angular to Docker】

任务配置 – 高级任务 -Deploy 前置任务

pwd
echo "开始初始化"
npm install \@angular/cli\@6.0.8 -g || echo "安装失败"

任务配置 – 高级任务 -Deploy 后置任务

pwd
unzip -q node_modules.zip
echo "${NG_PATH}/ng -v"
${NG_PATH}/ng -v || echo "环境检查失败"
${NG_PATH}/ng build  --prod --configuration=${ENV}
sed -i 's/${container_port}/'${PORT}'/g' docker-compose.yml 
sed -i 's/${container_name}/'${SERVER_NAME}'/g' docker-compose.yml 

任务配置 – 高级任务 -Release 前置任务

docker-compose -p ${SERVER_NAME}  -f ${WEBROOT}/docker-compose.yml down || echo "服务不存在"
docker stop ${SERVER_NAME} || echo "服务不存在"
docker rm ${SERVER_NAME} || echo "服务不存在"
rm -rf ${WEBROOT}

任务配置 – 高级任务 -Release 后置任务

docker-compose -p ${SERVER_NAME}  up -d
echo "服务启动完成"

项目 – nginx.conf 配置

# gzip 设置
gzip on;
gzip_vary on;

gzip_comp_level 6;
gzip_buffers 16 8k;

gzip_min_length 1000;
gzip_proxied any;
gzip_disable "msie6";
#gzip_http_version 1.0;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

server {
  listen       80;
  server_name  localhost;

  #charset koi8-r;
  #access_log  /var/log/nginx/host.access.log  main;

  location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
    # 其作用是按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。try_files $uri /index.html;
  }

  #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   /usr/share/nginx/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;
  #}
}

项目 – docker-compose.yml 配置

version: '2'
services:
  # 服务名称
  nginx:
    # 镜像: 版本
    image: nginx:latest
    container_name: ${container_name}
    # 映射容器 80 端口到本地 80 端口
    ports:
     - "${container_port}:80"
    # 数据卷 映射本地文件到容器
    volumes:
    # 映射 nginx.conf 文件到容器的 /etc/nginx/conf.d 目录并覆盖 default.conf 文件
     - ./nginx.conf:/etc/nginx/conf.d/default.conf
    # 映射 build 文件夹到容器的 /usr/share/nginx/html 文件夹
     - ./dist/idp-server-ui:/usr/share/nginx/html
    # 覆盖容器启动后默认执行的命令。command: /bin/bash -c "nginx -g'daemon off;'"

环境准备

参考文档:https://segmentfault.com/a/11…

退出移动版