我正在参加「启航计划」

传统应用发布形式

开发人员:在开发环境完结代码编写,单元测验,测验经过后提交到代码库房

运维人员:把项目布置到测验环境,供QA团队测验,测验经过后,布置生成环境

测验人员:进行测验,测验完结后通知运维布置出产环境

缺陷

  1. 项目在早期就存在错误,但到最后集成的时候才发现
  2. 需求手动操作,易错率高
  3. 开发与运维需求及时沟通 有了以上缺陷,那么就有了CI/CD

CI/CD

继续集成(CI):

  1. 兼并开发人员正在编写的所有代码
  2. 一天内进行多次兼并和提交代码
  3. 从存储库或出产环境中进行构建和主动化测验,确保没有集成问题并及早发现任何问题

继续交给(CD):

  1. 能够经过将更改主动推送到发布体系来随时将软件发布到出产环境中
  2. 继续布置,并主动将更改推送到出产中

GitLab内置CI/CD

运转流水线任务

Job

在文件中能够界说一个或多个作业,每个作业具有仅有的称号,每个作业是独立履行的,每个作业至少包括一个script

stages:

用于界说作业能够运用的阶段,而且是全局界说,同一个阶段的作业并行运转,不同阶段按顺序运转

only:

用分支战略来约束jobs构建

script:

项目中package中的脚本

environment:

界说此作业完结布置的环境称号

下面是每个jobs的具体变量

Keyword Required Description
script yes Runner履行的指令或脚本
image no 所运用的docker镜像,查阅运用docker镜像
services no 所运用的docker服务,查阅运用docker镜像
stage no 界说job stage(默认:test
type no stage的别号(已弃用)
variables no 界说job等级的变量
only no 界说一列git分支,并为其创立job
except no 界说一列git分支,不创立job
tags no 界说一列tags,用来指定挑选哪个Runner(一起Runner也要设置tags)
allow_failure no 允许job失败。失败的job不影响commit状况
when no 界说何时开端job。能够是on_successon_failurealways或许manual
dependencies no 界说job依靠关系,这样他们就能够互相传递artifacts
cache no 界说应在后续运转之间缓存的文件列表
before_script no 重写一组在作业前履行的指令
after_script no 重写一组在作业后履行的指令
environment no 界说此作业完结布置的环境称号
coverage no 界说给定作业的代码覆盖率设置

配置.gitlab-ci.yml

stages:
  - deploy_dev
  - deploy_test
  - deploy_production
deploy_dev:
  stage: deploy_dev
  environment:
    name: dev
  only:
    - dev
  script:
    - rsync -av . ${WORKSPACE_PATH} && cd ${WORKSPACE_PATH}
    - npm run build:dev
    - ansible-playbook ansible-deploy.yml --extra-vars "hosts=cloud_ui_test projectDir=${WORKSPACE_DIST_PATH} projectName=${PROJECT_NAME} webRootPath=/opt/devroot/"
deploy_test:
  stage: deploy_test
  environment:
    name: test
  only:
    - master
  script:
    - rsync -av . ${WORKSPACE_PATH} && cd ${WORKSPACE_PATH}
    - npm run build:stage
    - ansible-playbook ansible-deploy.yml --extra-vars "hosts=cloud_ui_test projectDir=${WORKSPACE_DIST_PATH} projectName=${PROJECT_NAME} webRootPath=${WEB_ROOT_PATH}"
deploy_production:
  stage: deploy_production
  only:
    - production
  when: manual
  script:
    - npm install
    - npm run build:prod
    - ansible-playbook ansible-deploy.yml --extra-vars "hosts=dvs-front-prod projectDir=${PROJECT_PATH} projectName=xianglin-cloud-ui/${PROJECT_NAME} webRootPath=/opt/"

上面这个.yml文件,咱们首先界说了三个阶段,deploy_dev布置到dev环境,而且拉去的是dev分支代码; deploy_test布置到test环境,拉去的是master分支代码,deploy_production拉取production分支代码,履行完后需求手动操作

前端要懂的继续集成与继续布置 (CI CD)

构建流程

前端要懂的继续集成与继续布置 (CI CD)
履行成功后布置到服务器