美文网首页工具
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