我正在参加「启航计划」
传统应用发布形式
开发人员:在开发环境完结代码编写,单元测验,测验经过后提交到代码库房
运维人员:把项目布置到测验环境,供QA团队测验,测验经过后,布置生成环境
测验人员:进行测验,测验完结后通知运维布置出产环境
缺陷
- 项目在早期就存在错误,但到最后集成的时候才发现
- 需求手动操作,易错率高
- 开发与运维需求及时沟通 有了以上缺陷,那么就有了CI/CD
CI/CD
继续集成(CI):
- 兼并开发人员正在编写的所有代码
- 一天内进行多次兼并和提交代码
- 从存储库或出产环境中进行构建和主动化测验,确保没有集成问题并及早发现任何问题
继续交给(CD):
- 能够经过将更改主动推送到发布体系来随时将软件发布到出产环境中
- 继续布置,并主动将更改推送到出产中
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_success ,on_failure ,always 或许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分支代码,履行完后需求手动操作
构建流程
履行成功后布置到服务器