gitlab ci/cd 服务自动化探索

一、     为了优化公司服务部署流程, 减少不必要的登录服务器操作, 实现提交代码直接部署最短部署路径, 我们选择了gitlab的ci/cd。

    当前公司的部署流程繁琐, 以我负责的项目来说, 上线的步骤是:   

    1. 提交代码到gitlab

    2. 登录服务器, 到项目文件夹下拉取代码

    3. 使用supervisorctl 重启项目

使用gitlab的ci/cd之后就可以, 节省后两步的操作,把它们交给gitlab 的ci/cd执行, 这样就可以“少做少错”

二、我们使用的工具:

    1. gitlab代码仓库

    2.docker容器技术

    3.gitlab-runner应该属于gitlab的一个配套插件

    4. 我们的项目

自动化部署的流程:

    1.提交代码gitlab, 触发ci/cd逻辑

    2.gitlab 根据gitlab-ci.yml中的命令,通知gitlab-runner进行构建部署

三、工具安装(注意:gitlab和gitlab-runner是两台不同的服务器)

    1、gitlab 安装:  https://about.gitlab.com/installation/(官网文档)

    2、docker安装: https://docs.docker.com/install/#releases(官网文档, 英语不好的注意左侧导航条, 选择对应操作系统)

    3、gitlab-runner安装: https://docs.gitlab.com/runner/install/(官网文档, 注意图片中的位置)


图一    

这里是各个操作系统安装gitlab-runner教程

四、对于工具的安装教程,都是其官网提供的, 我们就不做过多的演示,这里我演示一下gitlab-runner注册的过程

    1、我们需要找到gitlab中某个项目的ci/cd的设置界面


2   


3

然后点击展开runner找到圈出来的url和token,在gitlab-runner注册时需要使用, 如图4

4

然后我们去在gitlab-runner中注册:

zm@zmdeMacBook-Pro: ~$ gitlab-runner register   # 开始注册                                                     

WARNING: Running in user-mode.  # 提示可以不管

WARNING: Use sudo for system-mode: 

WARNING: $ sudo gitlab-runner...

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):  # 输入我们在gitlab中获取的url

http://wechatservers.com/

Please enter the gitlab-ci token for this runner:  # 输入token

5KUa3rVrYsRmPzp7CoeL

Please enter the gitlab-ci description for this runner: # 描述

[zmdeMacBook-Pro.local]: cs

Please enter the gitlab-ci tags for this runner (comma separated): # tag,可以不填写直接回车;这个是用来标记runner, 可以指定使用哪个runner进行构建部署

cs  # 我们输入的是cs

Registering runner... succeeded                    runner=5KUa3rVr

Please enter the executor: docker, parallels, shell, virtualbox, docker+machine, docker-ssh, ssh, docker-ssh+machine, kubernetes:

shell   # 执行器选择shell, 一开始选择了docker,在部署完之后我找不到container放在哪里了, 这块以后再补

Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!


这样我们就完成了gitlab-runner的注册, 我可以回到gitlab页面看一下


5

这样我们有了个gitlab-runner, tag为cs, 状态为不可用

因为我们没有运行gitlab-runner, 我们可以使用

gitlab-runner run

这样就运行正常了


6


五、.gitlab-ci.yml和dockerfile

.gitlab-ci.yml文件和dockerfile文件需要放在项目中,在第一层目录切勿深藏。

.gitlab-ci.yml是gitlab-runner管理项目的配置文件,告诉gitlab-runner怎么做

主要用到了这个几个关键字

stages

before_script

variable

script

tags

stages:阶段

定义使用的阶段和使用顺序, 比如有两个阶段, 一个是构建docker images,另一个是运行docker container, 这样我们就需要定义这个两个阶段里每个阶段都需要干什么, 那个阶段在前那个阶段在后

variable:变量

我们可以定义变量以供在整个job(每次自动部署gitlab runner都会启动一个job)工作期间使用

script:脚本

这个gitlal-runner执行的脚本

before_script: 脚本前

在执行脚本前执行什么, 可以这么理解但是看了文档之后好像不是这个意思, 留坑;

tags:标签

用来指定某个gitlab-runner运行项目

olny: 

用来表明将要运行的分支和标记名称


.gitlab-ci.yml内容:

variables:

  PROJECT_NAME: cs  # 文件名

DOCKER_REGISTRY: wechatservers.com:5000  # docker私有仓库

IMAGE_NAME: "${DOCKER_REGISTRY}/${PROJECT_NAME}"  # 镜像名

  LOG_DIR: "/data/logs/"  # 日志地址

stages:  # 阶段设置

  - build

   - deploy

build: 

  stage: build # 阶段build

script: # 脚本

    - docker build -t "${IMAGE_NAME}:lastest" .

- docker image tag "${IMAGE_NAME}:lastest" "${IMAGE_NAME}:$CI_COMMIT_SHA"

- docker push "${IMAGE_NAME}:lastest"

- docker push "${IMAGE_NAME}:$CI_COMMIT_SHA"

dev_deploy:

  stage: deploy

tags:

    - dev

variables:

    profile_path: "/data/profile.env"  # 存放环境变量的文件

    port: "503"

  before_script:

    - docker stop "${PROJECT_NAME}_1" && docker rm "${PROJECT_NAME}_1" || true   # 尝试停止并删除容器

script:

    - sleep 2

- docker run --rm -v $LOG_DIR:$LOG_DIR  --env-file ${profile_path} "${IMAGE_NAME}:${CI_COMMIT_SHA}" python manage.py migrate --settings=settings.settings   # 

- docker run -d -p "${port}:8000" -v $LOG_DIR:$LOG_DIR --name "${PROJECT_NAME}_1" --env-file "${profile_path}" "${IMAGE_NAME}:${CI_COMMIT_SHA}"  # 创建容器

only:

refs:

      - /^feature\/dev-.*$/   # 使用正则匹配要部署分支

tags:

    - dev-runner  # 指定gitlab-run

这时候就可以提交代码了

如果成功则会看到这样的界面

7

你也可以在左侧的列表中job看到,执行情况


8

对于私有http仓库, 需要加入insecure-registries到/etc/docker/daemon.json(因系统而异)

"insecure-registries": [

        "wechatservers:5000"

    ]

对于docker权限问题,你可以使用 https://docs.docker.com/install/linux/linux-postinstall/ 解决


8

到此结束

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,547评论 4 374
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,787评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,175评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,752评论 0 223
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,169评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,056评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,195评论 2 321
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,980评论 0 214
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,724评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,872评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,344评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,667评论 3 264
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,379评论 3 245
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,202评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,992评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,189评论 2 286
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,987评论 2 279

推荐阅读更多精彩内容