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
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)其他变量
- gitlab - variables
- shell变量
- $(date +"%Y%m%d-%H%M%S")
- windows变量
- %CI_JOB_STAGE
然后就push到gitlab repository里就ok了。
方法三:(非私有化部署)
如果你是用的非私有化部署的gitlab,即使用的gitlab.com。那么可以存储至gitlab官方提供的Docker Container 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