【GitOps系列】从零上手GitOps

这篇具有很好参考价值的文章主要介绍了【GitOps系列】从零上手GitOps。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

GitOps 介绍

传送门: https://blog.csdn.net/zfw_666666/article/details/126158696

如何将业务代码构建为容器镜像?

前提:需要对Docker容器技术有一定的了解。

#业务代码示例:
root@node1:~# cat app.py 
from flask import Flask
import os
app = Flask(__name__)
app.run(debug=True)

@app.route('/')
def hello_world():
    return 'Hello, my v1 version docker images!! ' + os.getenv("HOSTNAME") + ''
一、编写dockerfile
root@node1:~# cat Dockerfile 
# syntax=docker/dockerfile:1

FROM python:3.8-slim-buster

RUN apt-get update && apt-get install -y procps vim apache2-utils && rm -rf /var/lib/apt/lists/*

WORKDIR /app

RUN pip3 install Flask==2.3.0 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

COPY app.py .

ENV FLASK_ENV=development

CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]

二、构建
$ docker build -t hello-world-flask .

三、验证
$ docker run -d -p 8000:5000 hello-world-flask:latest

四、推送至个人仓库
docker image tag ...
docker push ...
docker pull ccr.ccs.tencentyun.com/app-public/hello-world-flask-amd:latest

如何将容器镜像部署到K8s?

前提:需要本地有k8s集群环境及对k8s资源对象有一定的了解。

1.编写Manifest
root@node1:~# cat flask-dp.yaml 
apiVersion: v1
kind: Service
metadata:
  labels:
    app: hello-world-flask
  name: hello-world-flask
spec:
  ports:
  - port: 5000
    protocol: TCP
    targetPort: 5000
  selector:
    app: hello-world-flask

---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: hello-world-flask
  name: hello-world-flask
spec:
  replicas: 2
  selector:
    matchLabels:
      app: hello-world-flask
  template:
    metadata:
      labels:
        app: hello-world-flask
    spec:
      containers:
      - image: ccr.ccs.tencentyun.com/app-public/hello-world-flask-amd:latest
        imagePullPolicy: IfNotPresent
        name: hello-world-flask
        resources:
          limits:
            cpu: 100m
          requests:
            cpu: 100m

2.查看和访问 Pod
root@node1:~# kubectl get pods,svc |grep flask
pod/hello-world-flask-9d8967487-68kzq              1/1     Running     1 (2d2h ago)   2d3h
pod/hello-world-flask-9d8967487-mbwn9              1/1     Running     1 (2d2h ago)   2d3h
service/hello-world-flask    ClusterIP   10.233.47.55    <none>        5000/TCP            2d6h

root@node1:~# curl http://10.233.47.55:5000
Hello, my v1 version docker images!! hello-world-flask-9d8967487-68kzq

K8s如何实现自动扩容和自愈?

1.传统的扩容和自愈

在 VM 时代,我们的业务以进程的方式运行在虚拟机上,并由虚拟机对外提供服务。随着业务规模的扩大,我们需要支撑更多的访问流量,这时业务扩容就成了首先要考虑的问题。
在公有云环境下,VM 架构最典型的一种扩容方式是 弹性伸缩组。 意思是通过对虚拟机内存、CPU 等监控指标配置伸缩阈值,实现动态地自动伸缩。此外,我们一般还会结合虚拟机镜像、负载均衡器等云产品一并使用,如下图所示。
【GitOps系列】从零上手GitOps,CI/CD,# Kubernetes,CLOUD NATIVE,git,ci/cd
在这个架构中,负载均衡器是集群的唯一入口,它在接受访问流量后,一般会将流量通过加权轮训的方式转发到后端集群。负载均衡器一般是直接使用云厂商的产品,有一些团队也会自建高可用的 Nginx 作为集群入口。为了保证伸缩组节点的业务一致性,弹性伸缩组的所有 VM 都使用同一个虚拟机镜像。
其次,要在 VM 粒度实现业务自愈,常见的方案是使用 Crontab 定时检查业务进程或者通过守护进程的方式来运行,例如 Node PM2。
但是,这种架构有一些显而易见的缺陷。最大的问题有两个:(1)扩容慢;(2)负载均衡无法感知业务健康情况。

2.k8s自愈机制

你希望自愈解决什么问题?
我想,你可能最希望自愈能够帮我们解决服务自动重启的问题。也就是说,当业务进程意外中断,或者节点产生故障时,系统可以快速识别,自动重启并恢复服务。其次,你可能还会希望自愈能够自动转移故障,也就是让业务不健康的节点不接收流量,保证用户体验。
听起来是不是很棒,而 K8s 的自动自愈功能都可以帮你解决上面的这些问题,运维童鞋终于能摆脱 7*24 小时 Oncall 了。

【自愈演示】

现阶段,只需要知道三件事:
1. Pod 会被 Deployment 控制器管理起来,例如创建和销毁等;
2. Service 相当于弹性伸缩组的负载均衡器,它能以加权轮训的方式将流量转发到多个 Pod 副本上;
3. Ingress 相当于集群的外网访问入口。此处博主使用的是Traefik ingressroute

用svc去不断请求
root@node1:~# while true; do sleep 2; curl http://10.233.47.55:5000; echo -e '\n'$(date);done
Hello, my v1 version docker images!! hello-world-flask-9d8967487-mbwn9
Thu Jul 13 17:06:26 CST 2023
Hello, my v1 version docker images!! hello-world-flask-9d8967487-68kzq
Thu Jul 13 17:06:28 CST 2023
Hello, my v1 version docker images!! hello-world-flask-9d8967487-mbwn9
Thu Jul 13 17:06:30 CST 2023
Hello, my v1 version docker images!! hello-world-flask-9d8967487-68kzq
Thu Jul 13 17:06:32 CST 2023

root@node1:~# kubectl exec -it hello-world-flask-9d8967487-mbwn9 -- bash -c "killall python3"
模拟其中的一个 Pod 宕机,观察返回内容。会发现所有的请求流量都被转发到了没有故障的 Pod, 也就是说,故障成功地被转移了!等待几秒钟后pod重启恢复后,重新加入到了负载均衡接收外部流量。

梳理一下全过程。首先, K8s 感知到了业务 Pod 故障,立刻进行了故障转移并隔离了有故障的 Pod,并将请求转发到了其他健康的 Pod 中。随后重启了有故障的 Pod,最后将重启后的 Pod 加入到了负载均衡并开始接收外部请求。这些过程都是自动化完成的。

3.k8s弹性扩容

前提:自动扩容依赖于 K8s Metric Server 提供的监控指标,首先确保本地k8s环境中已经安装了。

一、通过 kubectl autoscale 命令来为 Deployment 创建自动扩容策略
root@node1:~# cat flask-hpa.yaml 
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: hello-world-flask
spec:
  maxReplicas: 10
  minReplicas: 2
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: hello-world-flask
  targetCPUUtilizationPercentage: 10   #CPU 使用率阈值

注:
要使自动扩容生效,还需要为刚才部署的 hello-world-flask Deployment 设置资源配额,可以通过patch或者yaml中配置
root@node1:~# kubectl patch deployment hello-world-flask --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/resources", "value": {"requests": {"memory": "100Mi", "cpu": "100m"}}}]'

二、模拟业务高峰期场景,使用 ab 命令来创建并发请求
root@node1:~# ab -c 10 -n 5000 http://10.233.47.55:5000/

root@node1:~# kubectl get pods |grep flask
hello-world-flask-9d8967487-68kzq              1/1     Running       1 (2d2h ago)   2d4h
hello-world-flask-9d8967487-9mkg8              1/1     Terminating   0              36s
hello-world-flask-9d8967487-dsk7m              1/1     Terminating   0              21s
hello-world-flask-9d8967487-jcnwz              1/1     Terminating   0              36s
hello-world-flask-9d8967487-mbwn9              1/1     Running       1 (2d2h ago)   2d4h
hello-world-flask-9d8967487-rj2wp              0/1     Terminating   0              6s
hello-world-flask-9d8967487-srrk6              0/1     Terminating   0              6s
hello-world-flask-9d8967487-zjrtw              1/1     Terminating   0              21s

可以通过参数 --watch 表示持续监听 Pod 状态变化。在 ab 压力测试的过程中,会不断创建新的 Pod 副本, 这说明 K8s 已经感知到了 Pod 的业务压力,并且正在自动进行横向扩容。

如何借助GitOps实现应用秒级自动发布和回滚?

1.传统 K8s 应用发布流程
  • 使用 kubectl set image 命令;
  • 修改本地的 Manifest,kubectl apply -f xx.yaml
  • 修改集群内 Manifest kubectl edit deploy xxx -n xx
2.从零搭建 GitOps 发布工作流

通俗来说,GitOps 就是以 Git 版本控制为理念的 DevOps 实践。
我们会将 Manifest 存储在 Git 仓库中作为期望状态,一旦修改并提交了 Manifest ,那么 GitOps 工作流就会 自动比对 Git 仓库和集群内工作负载的实际差异,并进行部署。

官网:https://fluxcd.io/flux/get-started/

要实现 GitOps 工作流,首先我们需要一个能够帮助我们监听 Git 仓库变化,自动部署的工具。此处以 FluxCD 为例一步步构建出一个 GitOps 工作流。

1.安装fluxcd
root@node1:~# kubectl apply -f https://ghproxy.com/https://raw.githubusercontent.com/lyzhang1999/resource/main/fluxcd/fluxcd.yaml

root@node1:~# kubectl get all -n flux-system
NAME                                               READY   STATUS    RESTARTS       AGE
pod/helm-controller-65d97f86f-hct7z                1/1     Running   4 (2d4h ago)   2d7h
pod/image-automation-controller-75cc9d6964-v9vpk   1/1     Running   3 (2d4h ago)   2d7h
pod/image-reflector-controller-6c99d4c47b-m8blb    1/1     Running   1 (2d4h ago)   2d7h
pod/kustomize-controller-6595b7976c-zqgrz          1/1     Running   1 (2d4h ago)   2d7h
pod/notification-controller-56f8f7f86b-cc786       1/1     Running   5 (2d4h ago)   2d7h
pod/source-controller-846457b955-7hzfc             1/1     Running   1 (2d4h ago)   2d7h

NAME                              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/notification-controller   ClusterIP   10.233.11.156   <none>        80/TCP    2d7h
service/source-controller         ClusterIP   10.233.4.62     <none>        80/TCP    2d7h
service/webhook-receiver          ClusterIP   10.233.47.213   <none>        80/TCP    2d7h

NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/helm-controller               1/1     1            1           2d7h
deployment.apps/image-automation-controller   1/1     1            1           2d7h
deployment.apps/image-reflector-controller    1/1     1            1           2d7h
deployment.apps/kustomize-controller          1/1     1            1           2d7h
deployment.apps/notification-controller       1/1     1            1           2d7h
deployment.apps/source-controller             1/1     1            1           2d7h

NAME                                                     DESIRED   CURRENT   READY   AGE
replicaset.apps/helm-controller-65d97f86f                1         1         1       2d7h
replicaset.apps/image-automation-controller-75cc9d6964   1         1         1       2d7h
replicaset.apps/image-reflector-controller-6c99d4c47b    1         1         1       2d7h
replicaset.apps/kustomize-controller-6595b7976c          1         1         1       2d7h
replicaset.apps/notification-controller-56f8f7f86b       1         1         1       2d7h
replicaset.apps/source-controller-846457b955             1         1         1       2d7h
2.本地创建fluxcd目录并创建deploy
$ mkdir fluxcd-demo && cd fluxcd-demo
➜ fluxcd-demo (main) ✔ cat deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: hello-world-flask
  name: hello-world-flask
spec:
  replicas: 2
  selector:
    matchLabels:
      app: hello-world-flask
  template:
    metadata:
      labels:
        app: hello-world-flask
    spec:
      containers:
      - image: ccr.ccs.tencentyun.com/app-public/hello-world-flask-amd:v1.0
        name: hello-world-flask
        imagePullPolicy: IfNotPresent
        resources:
          limits:
            cpu: 100m
          requests:
            cpu: 100m

最后,在 Github 或 Gitlab 中创建 fluxcd-demo 仓库。为了方便测试,需要将仓库设置为公开权限,主分支为 Main,并将我们创建的 Manifest 推送至远端仓库:
https://github.com/Hugh-yw/fluxcd-demo
3.为 FluxCD 创建仓库连接信息
root@node1:~# cat fluxcd-repo.yaml 
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: GitRepository
metadata:
  name: hello-world-flask
spec:
  interval: 5s
  ref:
    branch: main
  url: https://github.com/Hugh-yw/fluxcd-demo

:
要将 URL 字段修改为你实际仓库的地址并使用 HTTPS 协议,branch 字段设置 main 分支。这里的 interval 代表每 5 秒钟主动拉取一次仓库并把它作为制品存储。
4.检查 GitRepository 对象
root@node1:~# kubectl get gitrepository
NAME                URL                                      AGE    READY   STATUS
hello-world-flask   https://github.com/Hugh-yw/fluxcd-demo   2d7h   True    stored artifact for revision 'main/2c93e18e9700373a4fd29eb533ecf447b4765b57'
5.为 FluxCD 创建部署策略
root@node1:~# cat fluxcd-kustomize.yaml
apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
kind: Kustomization
metadata:
  name: hello-world-flask
spec:
  interval: 5s
  path: ./
  prune: true
  sourceRef:
    kind: GitRepository
    name: hello-world-flask
  targetNamespace: default

注:
interval 参数表示 FluxCD 会每 5 秒钟运行一次工作负载差异对比;
path 参数表示 deployment.yaml 位于仓库的根目录中。
FluxCD在对比期望状态和集群实际状态的时候,如果发现差异就会触发重新部署。

资源检查:
root@node1:~# kubectl get kustomization
NAME                AGE    READY   STATUS
hello-world-flask   2d7h   True    Applied revision: main/2c93e18e9700373a4fd29eb533ecf447b4765b57
6.体验gitops自动发布
1.代码提交
$ git add -A && git commit -m "Update image tag to v1"
$ git push origin main

root@node1:~# kubectl get pods --show-labels|grep flask
hello-world-flask-7d78848d75-ht6fk                     1/1     Running       0              36s     app=hello-world-flask,pod-template-hash=7d78848d75
hello-world-flask-7d78848d75-mqgl9                     1/1     Running       0              31s     app=hello-world-flask,pod-template-hash=7d78848d75
hello-world-flask-9d8967487-68kzq                      1/1     Terminating   1 (2d4h ago)   2d6h    app=hello-world-flask,pod-template-hash=9d8967487
hello-world-flask-9d8967487-mbwn9                      1/1     Terminating   1 (2d4h ago)   2d6h    app=hello-world-flask,pod-template-hash=9d8967487

2.查看触发重新部署的事件
root@node1:~# kubectl describe kustomization hello-world-flask
Name:         hello-world-flask
Namespace:    default
Labels:       <none>
Annotations:  <none>
API Version:  kustomize.toolkit.fluxcd.io/v1beta2
Kind:         Kustomization
Metadata:
  Creation Timestamp:  2023-07-11T04:07:02Z
  Finalizers:
    finalizers.fluxcd.io
  Generation:  1
  Managed Fields:
    API Version:  kustomize.toolkit.fluxcd.io/v1beta2
    Fields Type:  FieldsV1
    fieldsV1:
      f:metadata:
        f:finalizers:
          .:
          v:"finalizers.fluxcd.io":
    Manager:      gotk-kustomize-controller
    Operation:    Update
    Time:         2023-07-11T04:07:02Z
    API Version:  kustomize.toolkit.fluxcd.io/v1beta2
    Fields Type:  FieldsV1
    fieldsV1:
      f:status:
        f:conditions:
        f:inventory:
          .:
          f:entries:
        f:lastAppliedRevision:
        f:lastAttemptedRevision:
        f:observedGeneration:
    Manager:      gotk-kustomize-controller
    Operation:    Update
    Subresource:  status
    Time:         2023-07-11T04:07:02Z
    API Version:  kustomize.toolkit.fluxcd.io/v1beta2
    Fields Type:  FieldsV1
    fieldsV1:
      f:spec:
        .:
        f:force:
        f:interval:
        f:path:
        f:prune:
        f:sourceRef:
          .:
          f:kind:
          f:name:
        f:targetNamespace:
    Manager:         kubectl-create
    Operation:       Update
    Time:            2023-07-11T04:07:02Z
  Resource Version:  40288002
  UID:               d4c061f3-fd9a-4c2f-8791-1b71e739bc51
Spec:
  Force:     false
  Interval:  5s
  Path:      ./
  Prune:     true
  Source Ref:
    Kind:            GitRepository
    Name:            hello-world-flask
  Target Namespace:  default
Status:
  Conditions:
    Last Transition Time:  2023-07-13T11:34:17Z
    Message:               Applied revision: main/2f35a6700aa47aa6872b595dc75acc9dea4a6f04
    Reason:                ReconciliationSucceeded
    Status:                True
    Type:                  Ready
  Inventory:
    Entries:
      Id:                   default_hello-world-flask_apps_Deployment
      V:                    v1
  Last Applied Revision:    main/2f35a6700aa47aa6872b595dc75acc9dea4a6f04   #最新commitid
  Last Attempted Revision:  main/2f35a6700aa47aa6872b595dc75acc9dea4a6f04
  Observed Generation:      1
Events:
  Type    Reason                   Age                     From                  Message
  ----    ------                   ----                    ----                  -------
  Normal  ReconciliationSucceeded  45s (x37589 over 2d4h)  kustomize-controller  (combined from similar events): Reconciliation finished in 53.523094ms, next run in 5s

3.验证是否已更新
root@node1:~# curl http://10.233.47.55:5000
Hello, my first docker images! hello-world-flask-7d78848d75-mqgl9

通过上面的配置,我们让 FluxCD 自动完成了监听修改、比较和重新部署三个过程。

7.体验gitops自动回滚
要回滚 fluxcd-demo 仓库,首先需要找到上一次的提交记录。我们可以使用 git log 来查看它:
commit 2f35a6700aa47aa6872b595dc75acc9dea4a6f04 (HEAD -> main, origin/main)
Author: ywcheng 
Date:   Thu Jul 13 19:33:56 2023 +0800

    Update image tag to latest

commit 2c93e18e9700373a4fd29eb533ecf447b4765b57
Author: ywcheng 
Date:   Tue Jul 11 12:54:31 2023 +0800

    Update image tag to v1.0
--------------------------------------------------------------------
➜ fluxcd-demo (main) ✔ git reset --hard 2c93e18e9700373a4fd29eb533ecf447b4765b57
HEAD is now at 2c93e18 Update image tag to v1.0
➜ fluxcd-demo (main) ✔ git push origin main -f
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:Hugh-yw/fluxcd-demo.git
 + 2f35a67...2c93e18 main -> main (forced update)

再次查看触发器的events:
root@node1:~# kubectl describe kustomization hello-world-flask
......
  Inventory:
    Entries:
      Id:                   default_hello-world-flask_apps_Deployment
      V:                    v1
  Last Applied Revision:    main/2c93e18e9700373a4fd29eb533ecf447b4765b57
  Last Attempted Revision:  main/2c93e18e9700373a4fd29eb533ecf447b4765b57
  Observed Generation:      1
Events:
  Type    Reason                   Age                       From                  Message
  ----    ------                   ----                      ----                  -------
  Normal  ReconciliationSucceeded  3m43s (x37649 over 2d4h)  kustomize-controller  (combined from similar events): Reconciliation finished in 40.521018ms, next run in 5s

root@node1:~# curl http://10.233.47.55:5000
Hello, my v1 version docker images!! hello-world-flask-9d8967487-7j5n8

到这里,我们就成功体验了GitOps 工作流基础环节的发布和回滚实现(小部分)。

参考资料:https://time.geekbang.org/column/intro/100312001?tab=catalog文章来源地址https://www.toymoban.com/news/detail-563135.html

到了这里,关于【GitOps系列】从零上手GitOps的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【CI/CD技术专题】「Docker实战系列」本地进行生成镜像以及标签Tag推送到DockerHub

    背景介绍 Docker镜像构建成功后,只要有docker环境就可以使用,但必须将镜像推送到Docker Hub上去。创建的镜像最好要符合Docker Hub的tag要求,因为在Docker Hub注册的用户名是liboware,最后利用docker push命令推送镜像到公共仓库。 前提概要 你需要在Docker hub注册用户:到官网注册账

    2024年02月10日
    浏览(58)
  • 【业务功能115】微服务-springcloud-springboot-Kubernetes-k8s集群-Kubesphere实现DevOps流水线-CI/CD-SonarQube- Jenkins

    dev 怎么开发 ops 怎么运维 参考项目链接:https://github.com/kubesphere/devops-maven-sample 持续集成是指软件个人的部分向软件整体部分交付,频繁进行集成以便更快地发现其中错误。 CI需要具备这些: 全面的自动化测试 这是实践持续集成持续部署的基础,同时,选择合适的自动化测

    2024年02月04日
    浏览(86)
  • Kubernetes 集群管理、Pod 创建、Service 的创建、ConfigMap等 Kubernetes Up and Running Writing Cloud Native Apps

    作者:禅与计算机程序设计艺术 本文通过介绍下述的内容和知识点,介绍了云原生应用开发的 Kubernetes 基础知识。 涉及的内容包括 Kubernetes 集群管理、Pod 创建、Service 的创建、ConfigMap 和 Secret 等关键组件的介绍;Kubernetes 工作流程的概述;基于角色的访问控制(RBAC)、网络

    2024年02月09日
    浏览(41)
  • GitOps 工具 Argo CD 实战教程

    Argo CD 是一个为 Kubernetes 而生的,遵循声明式 GitOps 理念的持续部署工具。Argo CD 可在 Git 存储库更改时自动同步和部署应用程序。 Argo CD 遵循 GitOps 模式,使用 Git 仓库作为定义所需应用程序状态的真实来源,Argo CD 支持多种 Kubernetes 清单: kustomize helm charts ksonnet applications js

    2024年02月05日
    浏览(32)
  • CI/CD工具中的CI和CD的含义

    CI/CD 是现代软件开发方法中广泛使用的一种方法。其中,CI 代表持续集成(Continuous Integration),CD 则有两层含义,一是持续交付(Continuous Delivery),二是持续部署(Continuous Deployment)。下面是这些术语的详细解释: 持续集成(Continuous Integration):CI 是一种开发实践,开发人

    2024年02月07日
    浏览(47)
  • 【Mysql系列】从零开始学MySQL:Docker部署快速上手

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月06日
    浏览(38)
  • 【基于 GitLab 的 CI/CD 实践】01、GitLab CI/CD 基础概念

    目录 一、为什么要做 CI/CD ? 1.1 背景-传统的应用开发发布模式 问题 1.2 持续集成与持续交付 持续集成(CI) 持续交付(CD) 持续部署(CD) 1.3 CI/CD 的价值体现 1.4 推荐常用的 CI/CD 工具 Jenkins GitLab 二、GitLab CI/CD 功能简介 2.1 GitLab 内置持续集成功能 持续集成(CI) 连续交付(

    2024年02月16日
    浏览(65)
  • 【CI/CD】Rancher CD过程--20230906

    HARBOR_PASSWORD:密码 HARBOR_USER:工号 K8S_TOKEN:Bearer + rancher key K8S_WORKLOAD_URL:选择【View in API】的URL,并非workload的URL。 如果是新版rancher,则使用/g回去旧版界面。 选择workload,进入【View in API】 right panel click edit Move to buttom , and click “Show Request” Copy the highlight area from “-d”

    2024年02月09日
    浏览(40)
  • Jenkins CI/CD

    1、 Jenkins CI/CD 流程图 说明:这张图稍微更形象一点,上线之前先把代码git到版本仓库,然后通过Jenkins 如Java项目通过maven去构建,这是在非容器之前,典型的自动化的一个版本上线流程。那它有哪些问题呢? 如:它的测试环境,预生产环境,测试环境。会存在一定的兼容性

    2024年02月05日
    浏览(45)
  • CI/CD部署

    CI和CD是软件开发中持续集成和持续交付的缩写。 CI代表持续集成(Continuous Integration),是一种实践,旨在通过自动化构建、测试和代码静态分析等过程,频繁地将代码变更合并到共享存储库中。其目的是快速发现和修复代码问题,确保开发团队对软件产品持续交付。其中,

    2024年02月19日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包