
点击上方蓝字⭐️关注“DevOps云学堂”,接收最新技术实践
今天是「DevOps云学堂」与你共同进步的第 44天
实践环境升级基于K8s和ArgoCD
使用 ArgoCD 和 Tekton 在 OpenShift 上创建端到端 DevOps 管道的分步指南
在云原生开发领域,持续集成和持续交付(CI/CD)已成为无缝构建、测试和部署应用程序的关键组件。随着 Kubernetes和容器化的兴起,开发人员需要高效的工具来有效管理他们的 CI/CD 管道。Tekton 是一个强大的开源框架,专为云原生 CI/CD 工作流程而设计。
Tekton 是一个 Kubernetes 原生框架,专注于提供一种声明性且可扩展的方法来构建 CI/CD 系统。Tekton 作为持续交付基金会 (CDF) 旗下的开源项目而诞生,它利用 Kubernetes API 并利用自定义资源定义 (CRD) 来定义管道资源、任务和工作区。它为您的 CI/CD 工作流程带来了可扩展性、可移植性和可重复性的优势,使其成为云原生环境的绝佳选择。
主要特点和概念
构建代码、运行测试或部署应用程序。任务可以跨管道组合和重用,从而促进模块化和代码共享。编排任务以创建端到端 CI/CD 工作流程的方法。使用 Tekton,您可以定义包括多个阶段、并行执行和条件分支的复杂管道。任务的输入和输出。它们可以包括源代码存储库、容器映像或管道执行所需的任何其他工件。Tekton 使您能够将资源定义和管理为 Kubernetes CRD。任务之间共享文件。它们提供了一种在 CI/CD 工作流程的不同阶段之间传递数据和工件的机制。工作空间可确保隔离性和可重复性,从而更轻松地管理复杂的管道。
5. 一个任务可以由多个步骤组成,管道也可以由多个任务组成。任务可以并行或顺序运行。

ArgoCD 在 OpenShift 中有一个本地支持,称为 OpenShift GitOps,它基于 ArgoCD。
Argo CD 是 Kubernetes 的声明式持续交付工具,使开发人员能够跨多个集群自动化应用程序部署。它遵循 GitOps 理念,其中应用程序的所需状态在 Git 存储库中定义,Argo CD 确保实际状态持续与所需状态匹配。通过利用 Kubernetes 自定义资源,Argo CD 提供了一种声明式的应用程序部署方法,使管理复杂的配置和回滚变得更加容易。
ArgoCD 的主要特点
Argo CD,应用程序的所需状态在 Git 存储库中定义,允许您使用熟悉的 Git 工作流程管理部署。这种方法为部署过程带来了版本控制、可审核性和协作,从而更容易跟踪更改并维护可靠的应用程序状态。Kubernetes 清单(例如 YAML 文件)来定义应用程序的所需状态。这种声明式方法消除了部署过程中手动干预的需要,确保了不同环境之间的一致性和可重复性。自动协调期望状态和实际状态之间的任何差异。它检测 Git 存储库中的更改并相应地触发部署、回滚或更新,确保您的应用程序始终保持最新状态。多个 Kubernetes 集群的管理。它提供所有集群的统一视图,允许您从单个控制平面将应用程序部署到多个环境。这种集中式方法提高了运营效率并简化了复杂基础设施的管理。轻松回滚到特定应用程序版本。通过利用 Git 存储库中存储的版本历史记录,您可以轻松恢复到以前的状态或进展到新版本,从而在管理部署方面提供灵活性和敏捷性。
让我们动手吧!

让我们解释一下架构
.Netcore应用程序的示例管道第一个存储库包含应用程序代码和 tekton 资源。第二个存储库定义了 ArgoCD 资源webhook的触发器,tekton就会开始克隆,构建源代码,构建docker镜像,并push到registry。将更改提交到其他存储库,以便推送镜像标签ArgoCD 将与您的应用程序的最新更改同步,这可能是副本计数、最新映像、回滚等方面的更改。OpenShift Gitops OpenShift PipelinesOperatorHub 并在 OpenShift 中安装 OpenShift Gitops 和 OpenShift 中的 OpenShift Pipelines
Quay.io中创建您的帐户,然后创建一个如下所示的存储库并将其命名为 dotnetcore。
2. 进入账户设置,点击生成新的加密密码,更改quay 的密码。

3.记下密码
git clone git@github.com:SaifRehman/dotnetcore-ci-ocp-pipeline.git
dotnetcore的项目。oc new-project dotnetcore
Secret 将 quay 链接到 openshift。oc create secret docker-registry quay-secret --docker-server=quay.io --docker-username=<QUAY_USERNAME> --docker-password=<ENCRYPTED_PASSWORD>
github 令牌密钥,允许 tekton 将更改提交/推送到您的 github。apiVersion: v1
kind: Secret
metadata:
name: git-user-pass
annotations:
tekton.dev/git-0: https://github.com
type: kubernetes.io/basic-auth
stringData:
username: <github user>
password: <github personal access token>
oc apply -f secret.yaml
5. 将 Secrets 链接到管道服务帐户
$ oc secret link pipeline quay-secret
$ oc secret link pipeline git-user-pass
k8s/pipeline.yaml,并替换为您的 github 存储库,替换第 10 行和 22 行

7. 应用 Tekton 资源。导航到 k8s 文件夹并运行以下命令。
$ oc apply -f dotnetcore-api-pvc.yaml
$ oc apply -f el-route.yaml
$ oc apply -f eventlistener.yaml
$ oc apply -f git-update-deployment-task.yaml
$ oc apply -f pipeline.yaml
$ oc apply -f triggerbinding.yaml
$ oc apply -f triggertemplate.yaml
8.这将创建所有 tekton 资源并创建一个 web hook URL,通过查看其路由来复制 webhook url
$ oc get route

就我而言,它是el-dotnetcore-api-dotnetcore.apps.cluster-l8wqt.l8wqt.sandbox952.opentlc.com。复制此路线并导航到您的 github 存储库,导航到设置,然后导航到 webhook
9. 单击添加 webhook 创建 webhook

你的管道已经设置好了!!! 要检查导航到管道并转到您各自的项目,以查看您的管道

$ oc adm policy add-cluster-role-to-user cluster-admin -z openshift-gitops-argocd-application-controller -n openshift-gitops
2.克隆存储库,并将其推送到您自己的存储库
$ git clone git@github.com:SaifRehman/dotnetcore-gitops.git
3.创建一个ArgoCD应用程序,指向您创建的存储库。
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: vote-app-dev
namespace: openshift-gitops
spec:
destination:
namespace: vote-app-dev
server: https://kubernetes.default.svc
project: default
source:
path: environments/dev
repoURL: <your-gitops-cloned-repo>
targetRevision: main
syncPolicy:
automated:
prune: true
selfHeal: false
syncOptions:
- CreateNamespace=true
4.应用yaml配置
$ oc apply -f argo.yaml
路由和密码登录 ArgoCD,如下所示。用户名是admin。$ oc get route -n openshift-gitops
$ oc extract secret/openshift-gitops-cluster -n openshift-gitops --to=-
登录后,您可以看到 ArgoCD 部署的应用程序。


$ git commit -am "new changes"
$ git push

2. 这将使用 Tekton 自动启动 CI。

3.等待一定时间CI完成
4. 导航到您的GitHub,您会注意到 tekton 已将最新更改推送到您的 GitOps 存储库。

5. 您可以等待 3 分钟让 ArgoCD 自动同步您的存储库的最新更改,也可以手动单击 Argo 上的同步。

原文链接:https://medium.com/@s4saif.121/creating-end-to-end-gitops-pipeline-on-openshift-using-argocd-and-tekton-aa14166281e2
往期推荐
KubeLinter:如何检查K8s清单文件和Helm图表
A/B测试: 如何使用Argo Rollouts 进行渐进式交付
综合指南·构建 Kubernetes 应用程序
第⑦期DevOps训练营·倒计时
Argo CD和Rollouts 2023年用户调查结果