当前位置: 首页 > 科技观察

Tekton实战——Tekton与Argocd的梦幻联动

时间:2023-03-11 21:45:28 科技观察

前面的系列文章基本介绍了Tekton相关的知识。如果你仔细阅读并实践过,相信你对Tekton有了一定的掌握。在实际工作中,Tekton可以完成CICD的所有工作,并没有被强制分为CI工具或CD工具。在今天的文章中,我们将CI和CD分开,让Tekton专注于CI,CD交给Argocd。使用Tekton+Argocd模式,我们只需要将之前部署的任务改成Argocd来完成即可。原来的deploy任务改成改变镜像信息推送到Gitlab。于是整体步骤变成:拉取代码编译构建,构建镜像并推送改变helmchart的value.yaml中的镜像信息,推送到仓库argocd监控chart仓库的变化,以及更新应用程序。不熟悉的可以去官网(https://argo-cd.readthedocs.io/en/stable/)学习,也可以在《运维开发故事》公众号搜索Argocd相关文章。将HelmChart保存到Gitlab因为Argocd是基于GitOps的实现,所以它也是基于Git来用它来部署应用程序。创建一个devops-helm-chart仓库,如下:然后将具体的HelmChart推送到仓库中。在Argocd上部署应用(一)添加仓库(二)部署应用并改造TektonPipeline上面已经准备好了基本的需求,下面开始真正的改造。创建和更改HelmChart的Task顾名思义,Argocd是基于Git进行应用程序生命周期管理的,所以我们的应用程序更改最好是基于Git,这样整个过程是可追溯的。apiVersion:tekton.dev/v1alpha1kind:Taskmetadata:name:deploy-to-gitlabspec:workspaces:-name:source-name:kubernetesconfigmountPath:/root/.kubeparams:-name:IMAGE-name:TAG-name:GIT_USERNAME-名称:GIT_PASSWORD-名称:CHART_GITLAB_URL-名称:GIT_NAME默认:joker-名称:GIT_EMAIL默认:cooolops@163.com-名称:CHART_DIR步骤:-名称:run-change-helm-chart图片:registry.cn-hangzhou.aliyuncs.com/cooolops/helm-kubectl-curl-git-jq-yq:最新工作目录:$(workspaces.source.path)脚本:|gitremoteset-urloriginhttp://$(params.GIT_USERNAME):$(params.GIT_PASSWORD)@$(params.CHART_GITLAB_URL)gitconfig--globaluser.name"$(params.GIT_NAME)"gitconfig--globaluser.email"$(params.GIT_EMAIL)"gitclonehttp://$(params.GIT_USERNAME):$(params.GIT_PASSWORD)@$(params.CHART_GITLAB_URL)/opt/devops-cdcd/opt/devops-cd/$(参数.CHART_DIR)gitpullyqw--inplacevalues.yaml'image.repository'"$(params.IMAGE)"yqw--inplacevalues.yaml'image.tag'"$(params.TAG)"gitcommit-am'imageupdate'gitpush修改Tekton管道。任务已经在上面准备好了。下面是Pipeline的改造。workspaces-name:rd-repo-pvc-name:docker-configparams:#定义代码仓库-name:git_url-name:revisiontype:stringdefault:"master"-name:gitInitImagetype:stringdefault:"registry.cn-hangzhou.aliyuncs.com/cooolops/tekton-git-init:v0.29"#定义图像参数-名称:pathToDockerfile描述:构建上下文的路径,由Kaniko使用-在工作空间中default:.-名称:imageUrl描述:图像存储库的URL-名称:imageTag描述:应用于构建图像的标签默认值:最新-名称:git_username类型:字符串默认值:root-名称:git_password类型:字符串-名称:chart_gitlab_url类型:字符串默认值:192.168.205.130/root/devops-helm-chart.git-名称:git_name类型:字符串默认值:joker-名称:git_emailtype:stringdefault:coolops@163.com-name:chart_dirtype:stringdefault:coolops-rd-name:app_nametype:string#确定代号扫描-name:sonar_usernametype:stringdefault:admin-name:sonar_passwordtype:stringdefault:admin-name:sonar_urltype:stringtasks:#添加任务到流水线中-name:clonetaskRef:name:git-cloneworkspaces:-name:outputworkspace:rd-repo-pvcparams:-name:urlvalue:$(params.git_url)-名称:修订值:$(params.revision)-名称:gitInitImage值:$(params.gitInitImage)-名称:unit-testworkspaces:#传工作区-name:sourceworkspace:rd-repo-pvctaskRef:name:unit-testrunAfter:-clone-name:build-push-imageparams:-name:pathToDockerfilevalue:$(params.pathToDockerfile)-name:imageUrlvalue:$(params.imageUrl)-name:imageTagvalue:$(tasks.clone.results.commit)taskRef:name:build-push-imagerunAfter:-unit-testworkspaces:#传送工作空间-name:源工作空间:rd-repo-pvc-名称:dockerconfig工作空间:docker-config-名称:deploy-to-gitlabtaskRef:名称:deploy-to-gitlab参数:-名称:IMAGE值:$(params.imageUrl)-名称:TAG值:$(tasks.clone.results.commit)-名称:GIT_USERNAME值:$(params.git_username)-名称:GIT_PASSWORD值:$(params.git_password)-名称:CHART_GITLAB_URL值:$(params.chart_gitlab_url)-名称:GIT_NAME值:$(params.git_name)-名称:GIT_EMAIL值:$(params.git_email)-名称:CHART_DIR值:$(params.chart_dir)工作区:-名称:源工作区:rd-repo-pvcrunAfter:-build-push-image-名称:sonar-scannerwhen:-输入:$(params.revision)operator:invalues:-testtaskRef:name:sonar-扫描仪参数:-名称:SONAR_USERNAME值:$(params.sonar_username)-名称:SONAR_PASSWORD值:$(params.sonar_password)-名称:SONAR_URL值:$(params.sonar_url)-名称:APP_NAME值:$(params.app_name)workspaces:-name:sourceworkspace:rd-repo-pvc修改PipelineRun上面已经把Pipeline准备好了,下面就我创建一个PipelineRun进行测试apiVersion:tekton.dev/v1beta1kind:PipelineRunmetadata:名称:devops-hello-world-pipeline-runspec:pipelineRef:名称:rd-argocd-pipelineparams:-名称:修订值:测试-名称:git_url值:http://192.168.205.130/root/devops-hello-world.git-名称:imageUrl值:registry.cn-hangzhou.aliyuncs.com/cooolops/devops-hello-world-名称:imageTag值:latest-名称:pathToDockerfile值:Dockerfile-名称:git_password值:Joker@123456-名称:app_name值:devops-hello-world-名称:sonar_username值:admin-名称:sonar_password值:Joker@123456-名称:sonar_url值:http://sonarqube.coolops。cn工作区:-名称:rd-repo-pvcvolumeClaimTemplate:规范:accessModes:-ReadWriteOncestorageClassName:本地资源:请求:存储:1Gi-名称:docker-configsecret:secretName:docker-configserviceAccountName:tekton-build-sa然后在TektonDashboard上可以看到操作完成,如下:Chart仓库中的value.yaml也进行了相应的更改,如下:Argocd有也对application做了相应的修改,更新如下:至此,整个pipeline的拆分和使用就完成了。终于,Tekton系列文章基本告一段落了。整个系列用了将近2个月,从最基础的安装,再慢慢到理论知识,还有最后的不同实践,不知道大家掌握了多少?分享是另一种学习,也是我非常推荐的一种学习方式。毕竟自学和自己写还是有很大距离的。从学习到分享,你可以不断加深对知识的印象,很好地整理自己的知识体系。当然希望对大家有所帮助。