gitlab与docker的集成

作者: GoddyWu | 来源:发表于2018-06-27 18:04 被阅读254次

    gitlab 是非常好的代码管理工具,支持私有化部署。现在代码交付都以docker镜像的标准,那么两者如何结合起来呢、?当然官方有很多方式,建议详细阅读此文章的参考文档部分。

    ⚠️注意:因为代码库中包含楼主的个人信息,所有暂不开放。但是所有代码都会在此文章展示。

    使用工具

    • gitlab.com
    • 阿里云
    • hub.docker.com
    • docker

    思路

    1).gitlab-ci.yml
    这个是gitlab官方的CI/CD文件,我们将会使用它实现代码的打包和docker镜像的打包操作。
    2)阿里云
    本来吧,楼主打算私有部署能外网访问的docker registry,然而没钱养不起云主机公网ip,官方的仓库访问速度、上传速度啥的又很慢,穷途末路之际发现了阿里云有免费的容器镜像服务,开心😄地址是:https://cr.console.aliyun.com 阿里云的仓库本身支持自动生成docker image,详见方法1。

    实操

    注意,只有方法一强依赖阿里云的仓库,方法二和方法三本质不需要,任何镜像仓库都可以。

    方法一:(阿里云驱动)

    1)创建gitlab代码仓库,示例:https://gitlab.com/goddy-test/docker-ali-nginx
    2)在代码仓库添加Dockerfile文件,示例:

    FROM hub.c.163.com/library/nginx
    
    COPY html /usr/share/nginx/html
    
    3)打开阿里云仓库,创建镜像仓库

    此时我们发现缺少一个gitlab私有token

    4)创建gitlab token
    5)配置相关内容,就可以使用啦

    方法二:(gitlab驱动)

    此方法核心使用的是docker-in-docker的镜像
    1)创建阿里的镜像仓库


    创建完即可查看仓库地址
    2)编辑项目代码
    这里楼主使用一个简单的python项目,文件如下:
    #test.py
    from flask import Flask
    app = Flask(__name__)
    
    @app.route('/')
    def test():
        return 'hello world, 王聪明!'
    
    @app.route('/h/<username>')
    def hello(username):
        return 'Hello ' + username + '!'
    
    if __name__ == '__main__':
        app.run(host="0.0.0.0", debug=True)
    

    3)创建Dockerfile

    FROM python:3.4-alpine
    ADD . /code
    WORKDIR /code
    CMD ["python", "test.py"]
    

    4)配置.gitlab-ci.yaml文件

    variables:
      image: "registry.cn-hangzhou.aliyuncs.com/goddy-test/gitlab-ci-test"
      tag: $CI_COMMIT_SHA
    
    stages:
      - build
      - deploy
    
    docker-build:
      stage: build
      image: docker:stable
      services:
        - docker:dind
      only:
        - master
        - dev
      script:
        - docker login registry.cn-hangzhou.aliyuncs.com -u *** -p ***
        - docker build -t $image:$tag .
        - docker push $image:$tag
        - echo "$image:$tag"
    
    注意tag取得是CI_COMMIT_SHA,也可以使用其他变量。(项目展示的只是前8位,点击copy才是全部的)

    5)其他变量

    然后就push到gitlab repository里就ok了。

    方法三:(非私有化部署)

    如果你是用的非私有化部署的gitlab,即使用的gitlab.com。那么可以存储至gitlab官方提供的Docker Container Registry.

    1)打开项目Registry
    2)登陆并上传 (自定义tag)
    $ docker login registry.gitlab.com
    $ docker build -t registry.gitlab.com/goddy-test/gitlab-ci-test:tag .
    $ docker push registry.gitlab.com/goddy-test/gitlab-ci-test:tag
    

    参考文档

    相关文章

      网友评论

        本文标题:gitlab与docker的集成

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