hc - cicd
Pycharm/Gitlab-server
我们用PyCharm写python程序, 用公司公用的Gitlab server(当然也可以自建)做代码的同步/版本管理
gitlab-runner
然后在docker平台/k8s平台部署gitlab-runner, 它以docker-dind方式, 有pipeline/job的时候, 它从Gitlab server上将代码拿下来, 起一个兄弟容器(sidecar容器), 并将代码交给它, 由它完成镜像的构建, 最后交给宿主机docker去完成push-to-harbor或直接部署
docker上的gitlab-runner
PROD [root@whdcbosd001 ~]# docker ps -a |grep gitlab
da4bc9c4144a gitlab/gitlab-runner:latest "/usr/bin/dumb-init …" 9 months ago Up 8 weeks gitlab-runner
PROD [root@whdcbosd001 ~]#
k8s上的gitlab-runner
[root@k8s-master ~]# kubectl -n gitlab get all
NAME READY STATUS RESTARTS AGE
pod/k8s-runner-gitlab-runner-865f7ccc7-tfwb6 1/1 Running 1 15d
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/k8s-runner-gitlab-runner 1/1 1 1 27d
NAME DESIRED CURRENT READY AGE
replicaset.apps/k8s-runner-gitlab-runner-865f7ccc7 1 1 1 27d
[root@k8s-master ~]#
harbor
我们自建harbor私有镜像仓库, 来存储镜像(工件)
kubectl自定义镜像
我们自己制作kubectl镜像, 将k8s的config包含进去, 使其可以随时启动并操作k8s集群
[root@k8s-node1 albert-kubectl]# ll
total 16
-rw-r--r-- 1 root root 5568 Nov 8 08:45 admin.conf
-rw-r--r-- 1 root root 218 Nov 8 08:39 Dockerfile
-rw-r--r-- 1 root root 276 Nov 8 06:31 kubernetes.repo
[root@k8s-node1 albert-kubectl]# cat Dockerfile
FROM centos:centos7
# Install kubectl
COPY kubernetes.repo /etc/yum.repos.d/kubernetes.repo
RUN yum install kubectl -y
# Enable kubectl connect to albert_k8s
RUN mkdir /root/.kube
COPY admin.conf /root/.kube/config
[root@k8s-node1 albert-kubectl]#
完成的CICD通道展示
# 通用镜像
image: docker
# 使用docker-dind方式(sidecar of gitlab-runner)来操作docker-ce
services:
- docker:18.09.7-dind
# 有4个阶段
stages:
- clean
- build
- push
- deploy
# 第1步, 清理旧的容器和镜像
step1:
stage: clean
script:
- docker rmi harbor.albert.com/albert/albert_grafana_check_alerts
# 第2步, 打新的镜像
step2:
stage: build
script:
- docker build -t harbor.albert.com/albert/albert_grafana_check_alerts .
# 第3步, 推送新镜像到harbor(要先登陆一下)
step3:
stage: push
script:
- docker login --username=$ALBERT_HARBOR_USERNAME --password=$ALBERT_HARBOR_PASSWORD harbor.albert.com
- docker push harbor.albert.com/albert/albert_grafana_check_alerts
# 第4步, 使用新的镜像重新部署
# 删除k8s中已存在的replicaset, 它及其pods会自动重建
step4:
image: harbor.albert.com/albert/albert-kubectl
stage: deploy
script:
- kubectl -n albert delete replicaset `kubectl -n albert get replicaset |grep albert-grafana-check-alerts |awk '{ print $1 }'`
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)