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 }'`

posted @   奔驴儿2  阅读(227)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示