Tekton实践篇-Tekton和Argocd的梦幻联动

简介: Tekton实践篇-Tekton和Argocd的梦幻联动

前面的一系列文章基本已经把Tekton相关的知识介绍完了,如果你认真的看完并且实践过,相信你对Tekton已经有一定的掌握了。


在实际的工作中,Tekton可以完成CICD的所有工作,并没有强制的将它划分为CI工具或者CD工具。在今天的文章中,我们就会将CI和CD进行分开,让Tekton专注于CI,CD则交给Argocd。


640.png


要使用Tekton+Argocd模式,只需要把我们之前deploy的task变成由Argocd完成即可。而原先的deploy的task改成更改镜像信息并推送到Gitlab。


所以整体步骤变成如下:


  • 拉代码
  • 编译构建,构建镜像并推送
  • 更改helm chart的value.yaml中的镜像信息,推送到仓库
  • argocd监控到chart仓库变化,更新应用


前提:自己部署好Argocd,如果对Argocd不熟悉可以到官网(https://argo-cd.readthedocs.io/en/stable/)进行学习,也可以在《运维开发故事》公众号搜索Argocd相关文章进行学习。


将Helm Chart保存到Gitlab


因为Argocd是基于GitOps的实现,所以用它来部署应用也是基于Git。


创建一个devops-helm-chart的仓库,如下:


640.png


让后将具体的Helm Chart推送到仓库。


在Argocd上部署应用


(1)添加仓库


640.png


(2)部署应用


640.png


改造Tekton Pipeline


上面已经把基本需要的东西准备好了,下面就开始真正的改造了。


创建更改Helm Chart的Task


顾名思义,Argocd是基于Git来进行应用的生命周期管理,所以我们的应用变更最好也是基于Git,这样整个流程是可追溯的。


apiVersion: tekton.dev/v1alpha1
kind: Task
metadata:
  name: deploy-to-gitlab
spec:
  workspaces:
    - name: source
    - name: kubernetesconfig
      mountPath: /root/.kube
  params:
    - name: IMAGE
    - name: TAG
    - name: GIT_USERNAME
    - name: GIT_PASSWORD
    - name: CHART_GITLAB_URL
    - name: GIT_NAME
      default: joker
    - name: GIT_EMAIL
      default: coolops@163.com
    - name: CHART_DIR
  steps:
    - name: run-change-helm-chart
      image: registry.cn-hangzhou.aliyuncs.com/coolops/helm-kubectl-curl-git-jq-yq:latest
      workingDir: $(workspaces.source.path)
      script: |
        git remote set-url origin http://$(params.GIT_USERNAME):$(params.GIT_PASSWORD)@$(params.CHART_GITLAB_URL)
        git config --global user.name "$(params.GIT_NAME)"
        git config --global user.email "$(params.GIT_EMAIL)"
        git clone http://$(params.GIT_USERNAME):$(params.GIT_PASSWORD)@$(params.CHART_GITLAB_URL) /opt/devops-cd
        cd /opt/devops-cd/$(params.CHART_DIR)
        git pull
        yq w --inplace values.yaml 'image.repository' "$(params.IMAGE)"
        yq w --inplace values.yaml 'image.tag' "$(params.TAG)"
        git commit -am 'image update'
        git push


修改Tekton Pipeline


上面已经准备好了Task,下面就是对Pipeline进行改造,改造后如下:


apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
  name: rd-argocd-pipeline
spec:
  workspaces: # 声明 workspaces
    - name: rd-repo-pvc
    - name: docker-config
  params:
    # 定义代码仓库
    - name: git_url
    - name: revision
      type: string
      default: "master"
    - name: gitInitImage
      type: string
      default: "registry.cn-hangzhou.aliyuncs.com/coolops/tekton-git-init:v0.29"
    # 定义镜像参数
    - name: pathToDockerfile
      description: The path to the build context, used by Kaniko - within the workspace
      default: .
    - name: imageUrl
      description: Url of image repository
    - name: imageTag
      description: Tag to apply to the built image
      default: latest
    - name: git_username
      type: string
      default: root
    - name: git_password
      type: string
    - name: chart_gitlab_url
      type: string
      default: 192.168.205.130/root/devops-helm-chart.git
    - name: git_name
      type: string
      default: joker
    - name: git_email
      type: string
      default: coolops@163.com
    - name: chart_dir
      type: string
      default: coolops-rd
    - name: app_name
      type: string
    # 定义代码扫描
    - name: sonar_username
      type: string
      default: admin
    - name: sonar_password
      type: string
      default: admin
    - name: sonar_url
      type: string
  tasks: # 添加task到流水线中
    - name: clone
      taskRef:
        name: git-clone
      workspaces:
        - name: output
          workspace: rd-repo-pvc
      params:
        - name: url
          value: $(params.git_url)
        - name: revision
          value: $(params.revision)
        - name: gitInitImage
          value: $(params.gitInitImage)
    - name: unit-test
      workspaces: # 传递 workspaces
        - name: source
          workspace: rd-repo-pvc
      taskRef:
        name: unit-test
      runAfter:
        - clone
    - name: build-push-image
      params:
        - name: pathToDockerfile
          value: $(params.pathToDockerfile)
        - name: imageUrl
          value: $(params.imageUrl)
        - name: imageTag
          value: $(tasks.clone.results.commit)
      taskRef:
        name: build-push-image
      runAfter:
        - unit-test
      workspaces: # 传递 workspaces
        - name: source
          workspace: rd-repo-pvc
        - name: dockerconfig
          workspace: docker-config
    - name: deploy-to-gitlab
      taskRef:
        name: deploy-to-gitlab
      params:
        - name: IMAGE
          value: $(params.imageUrl)
        - name: TAG
          value: $(tasks.clone.results.commit)
        - name: GIT_USERNAME
          value: $(params.git_username)
        - name: GIT_PASSWORD
          value: $(params.git_password)
        - name: CHART_GITLAB_URL
          value: $(params.chart_gitlab_url)
        - name: GIT_NAME
          value: $(params.git_name)
        - name: GIT_EMAIL
          value: $(params.git_email)
        - name: CHART_DIR
          value: $(params.chart_dir)
      workspaces:
        - name: source
          workspace: rd-repo-pvc
      runAfter:
        - build-push-image
    - name: sonar-scanner
      when:
        - input: $(params.revision)
          operator: in
          values:
            - test
      taskRef:
        name: sonar-scanner
      params:
        - name: SONAR_USERNAME
          value: $(params.sonar_username)
        - name: SONAR_PASSWORD
          value: $(params.sonar_password)
        - name: SONAR_URL
          value: $(params.sonar_url)
        - name: APP_NAME
          value: $(params.app_name)
      workspaces:
        - name: source
          workspace: rd-repo-pvc


修改PipelineRun


上面已经把Pipeline准备好了,下面就i创建一个PipelineRun进行测试。


apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
  name: devops-hello-world-pipeline-run
spec:
  pipelineRef:
    name: rd-argocd-pipeline
  params:
    - name: revision
      value: test
    - name: git_url
      value: http://192.168.205.130/root/devops-hello-world.git    
    - name: imageUrl
      value: registry.cn-hangzhou.aliyuncs.com/coolops/devops-hello-world
    - name: imageTag
      value: latest
    - name: pathToDockerfile
      value: Dockerfile
    - name: git_password
      value: Joker@123456
    - name: app_name
      value: devops-hello-world
    - name: sonar_username
      value: admin
    - name: sonar_password
      value: Joker@123456
    - name: sonar_url
      value: http://sonarqube.coolops.cn
  workspaces:
    - name: rd-repo-pvc
      volumeClaimTemplate:
        spec:
          accessModes:
          - ReadWriteOnce
          storageClassName: local
          resources:
            requests:
              storage: 1Gi
    - name: docker-config
      secret:
        secretName: docker-config
  serviceAccountName: tekton-build-sa


然后在Tekton Dashboard上看到运行完成,如下:


640.png


Chart仓库中的value.yaml也进行了对应的更改,如下:


640.png


Argocd也对应用进行了对应的更新,如下:


640.png


到此整个流水线的拆分以及使用就完成了。


最后


到这里,Tekton系列文章基本告一段落了,整个系列耗时将近2个月,从最基础的安装,再慢慢到理论知识,以及最后的不同实践,不知道你掌握了多少?


分享是另一种学习,也是我比较推崇的一种学习方式,毕竟自己学和写出来还是有不少的距离,从学习到分享,可以不断的加深对知识的印象,也能很好的整理自己的知识体系,当然也希望对大家有所帮助。

相关文章
|
开发框架 .NET 网络性能优化
MCS-51单片机的基本结构
MCS-51单片机的基本结构
2567 1
|
JSON API 数据格式
5分钟构建API接口服务 | python小知识
Flask是python中轻量的web框架,Flask的两个核心模块除了模板渲染之外就是请求响应处理,其中请求响应处理是由 Werkzeug(WSGI 工具库)完成,而模板渲染是由Jinja(模板渲染库)完成。 Flask因为轻量灵活,用来构建API接口十分合适
11632 10
5分钟构建API接口服务 | python小知识
|
4月前
|
弹性计算
阿里云学生服务器免费领取:2026年最新学生优惠政策,先领300元无门槛代金券
2026年阿里云学生专享:完成学信网认证,免费领300元无门槛代金券,覆盖ECS、轻量服务器等主流云产品;券有效期1年,可全额抵扣订单,轻松实现0元上云!
|
3月前
|
人工智能 监控 调度
什么是异构算力管理平台?一文讲清核心概念、能力边界与应用价值
异构算力管理平台是面向大模型生产的“统一算力操作层”,实现CPU/GPU/NPU/FPGA等多芯、多集群、多环境算力的统一纳管、智能调度与闭环治理,提升资源利用率,支撑训推一体与AI规模化落地。
745 2
|
存储 前端开发 数据可视化
Grafana Loki,轻量级日志系统
本文介绍了基于Grafana、Loki和Alloy构建的轻量级日志系统。Loki是一个由Grafana Labs开发的日志聚合系统,具备高可用性和多租户支持,专注于日志而非指标,通过标签索引而非内容索引实现高效存储。Alloy则是用于收集和转发日志至Loki的强大工具。文章详细描述了系统的架构、组件及其工作流程,并提供了快速搭建指南,包括准备步骤、部署命令及验证方法。此外,还展示了如何使用Grafana查看日志,以及一些基本的LogQL查询示例。最后,作者探讨了Loki架构的独特之处,提出了“巨型单体模块化”的概念,即一个应用既可单体部署也可分布式部署,整体协同实现全部功能。
6091 70
Grafana Loki,轻量级日志系统
|
前端开发 Java 应用服务中间件
JVM进阶调优系列(1)类加载器原理一文讲透
本文详细介绍了JVM类加载机制。首先解释了类加载器的概念及其工作原理,接着阐述了四种类型的类加载器:启动类加载器、扩展类加载器、应用类加载器及用户自定义类加载器。文中重点讲解了双亲委派机制,包括其优点和缺点,并探讨了打破这一机制的方法。最后,通过Tomcat的实际应用示例,展示了如何通过自定义类加载器打破双亲委派机制,实现应用间的隔离。
|
存储 JSON 测试技术
【HarmonyOS Next开发】云开发-云数据库(二)
实现了云侧和端侧的云数据库创建、更新、修改等操作。这篇文章实现调用云函数对云数据库进行增删改查。
428 9
【HarmonyOS Next开发】云开发-云数据库(二)
|
存储 数据安全/隐私保护
基于51单片机的6位密码锁设计
该文档描述了一个基于AT89C52单片机的多功能电子密码锁系统设计,具备6位密码设置与修改功能,输入错误三次会锁定,并在LCD屏上以*号隐藏真实密码。系统包括矩阵键盘、LCD显示、AT24C02存储及报警系统,当密码错误时,会有蜂鸣器报警和LED灯闪烁。此外,还提供了密码重置(通过管理员密码131420)和输入错误提示。文中附有Proteus仿真及原理图,展示了开锁、重设密码和错误输入时的响应。
751 0
|
Java 应用服务中间件
SpringBoot 项目war包部署 配置外置tomcat方法
SpringBoot 项目war包部署 配置外置tomcat方法
569 0

热门文章

最新文章