美文网首页工具
gitlab ci/cd 服务自动化探索

gitlab ci/cd 服务自动化探索

作者: becareofzm | 来源:发表于2018-10-11 19:14 被阅读40次

一、     为了优化公司服务部署流程, 减少不必要的登录服务器操作, 实现提交代码直接部署最短部署路径, 我们选择了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

到此结束

相关文章

网友评论

    本文标题:gitlab ci/cd 服务自动化探索

    本文链接:https://www.haomeiwen.com/subject/fqabaftx.html