前置需求
- Makefile(可选)
- Gitlab-CICD
- Docker registry
- Dockerfile
- Git
- 钉钉通知(可选)
工作需求
通过Gitlab-CICD实现提交代码打Tag自动构建镜像并上传置私有库并通知相关人员
实现思路
Gitlab存储代码,通过branch和tag来构建不同环境所需要的镜像,通过CICD来完成自动构建和推送,Dockerfile构建镜像,Makefile实现不同docker需求如:build,test,deploy等等,通过webhook通知相关人员。
具体部署
Dockerfile
#Dockefile按照个人需求去编写,这里不多讲
FROM ubuntu:16.04
ENV TZ=Asia/Shanghai
COPY sources.list /etc/apt/sources.list
COPY bootstrap.sh /bootstrap.sh
RUN apt-get update \
&& apt-get update \
& ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone \
&& apt-get -y install python \
&& apt-get -y install python-pip \
&& apt-get -y install net-tools \
&& apt-get -y install psmisc \
&& apt-get -y install vim \
CMD ["/bootstrap.sh"]
Makefile
#建议使用IDE编写,其他容易出错
#镜像构建是否需要使用缓存由个人镜像需求决定
.PHONY: build
NAME=test
REGISTRY_URL= test/$(NAME)
REGISTRY_2_URL = test/$(NAME)
VERSION = v1,0
BASE_VERSION = latest
build:
docker build --no-cache -t $(REGISTRY_URL):$(BASE_VERSION) .
docker tag $(REGISTRY_URL):$(BASE_VERSION) $(REGISTRY_URL):$(VERSION)
docker tag $(REGISTRY_URL):$(BASE_VERSION) $(REGISTRY_2_URL):$(BASE_VERSION)
docker tag $(REGISTRY_URL):$(BASE_VERSION) $(REGISTRY_2_URL):$(VERSION)
clean:
docker image rmi $(REGISTRY_URL):$(BASE_VERSION)
deploy:
docker push $(REGISTRY_URL):$(BASE_VERSION)
docker push $(REGISTRY_URL):$(VERSION)
docker push $(REGISTRY_2URL):$(BASE_VERSION)
docker push $(REGISTRY_2_URL):$(VERSION)
test:
docker run -d --name $(REGISTRY_URL):$(BASE_VERSION)
bash:
docker exec -it $NAME bash
Git Branch && Tag
# 这里的Branch和Tag是按照git flow工作流来定义的
develop为开发分支
release分发布分支
master为主分支
tag为生产分支
可以通过Gitlab-Web或者git命令行操作
不同分支在不同runner上执行,runner是gitlab-cicd执行端,为二进制文件
注意:runner代表的是一个服务器级别,不是项目级别。
不同分支在不同runner上执行,实现不同需求。
提高开发效率
Gitlab-CICD
variables:
DOCKER_USER: testuser
DOCKER_PASSWORD: testpassword
DOCKER_REGISTRY_URL: https://test_url
NAME=imagename
stages:
- deploy
- test
deploy_build_tag_image:
stage: deploy
only:
- tags
script:
- sudo make VERSION=$CI_COMMIT_REF_NAME
- sudo make deploy VERSION=$CI_COMMIT_REF_NAME
- sudo docker images |grep $NAME
- sudo curl -u $DOCKER_USER:$DOCKER_PASSWORD $DOCKER_REGISTRY_URL/v2/$NAME/tags/list |jq .
- echo "update $CI_COMMIT_REF_NAME"
tags:
- runner-test
when: manual
钉钉通知相关人员
钉钉创建群+机器人,获取webhooks
gitlab配置webhook事件通知
通知内容为git commit信息