由于代码修改频繁,每次修改后都需要手动部署,为了节省部署时间,特此研究一下git的ci部署。完成后的效果,每次git commit后,代码都会通过git popline自动部署
一.对gitlab-ci的一些简单介绍
1.gitlab-ci为什么能运行。每当你push/merge一次,gitlab-ci都会检查项目下有没有.gitlab-ci.yml文件,如果有,它会执行你在里面编写的脚本,类似于你在服务器中一行行运行命令,从下载,编译,到部署运行
2.通过在项目根目录下配置.gitlab-ci.yml文件,可以控制ci流程的不同阶段,例如install/检查/编译/部署服务器
3.但是执行ci得需要一个环境,gitlab-ci提供了指定ci运行平台的机制,它提供了一个叫gitlab-runner的软件,只要在对应的平台(机器或docker)上下载并运行这个命令行软件,并输入从gitlab交互界面获取的token,就可以把当前机器和对应的gitlab-ci流程绑定。
4.gitlab-ci的所有流程都是可视化的,每个流程节点的状态可以在gitlab的交互界面上看到,包括执行成功或失败。因为它的执行看上去就和多节管道一样,所以我们通常用“pipelines”来称呼它
5.pipeline不仅能被动触发,也是可以手动触发的。
二.进行部署
1.在项目根目录新建.gitlab-ci.yml,并复制如下内容
before_script: # 先进行登录
- /usr/bin/docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
build-master: # 编译主分支
stage: build
tags:
- docker-qb
script:
- /usr/bin/docker build -t "$CI_REGISTRY/$CI_REGISTRY_IMAGE:1.0.0" .
- /usr/bin/docker push "$CI_REGISTRY/$CI_REGISTRY_IMAGE:1.0.0"
only:
- master
build: #拉取代码并进行编译
stage: build
tags:
- docker-qb
script:
- /usr/bin/docker build --pull -t "$CI_REGISTRY/$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" .
- /usr/bin/docker push "$CI_REGISTRY/$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
except:
- master
deployK8s: #对远程k8s进行操作
stage: deploy
tags:
- docker-qb
script:
- 'curl -X PUT -H "Content-Type: application/yaml" -H "Cookie: KuboardUsername=yanfa; KuboardAccessKey=$KUBOARD_AK" -d "{\"kind\":\"deployments\",\"namespace\":\"testdata\",\"name\":\"questionbank\"}" "http://kuboard-dev.kube.com/kuboard-api/cluster/dev/kind/CICDApi/yanfa/resource/restartWorkload"'
2.在git中设置对应的变量值,与第一步中script中的值相对应