CI&CD
Git代码仓库
Drone
关联GOGS
Jenkins安装
Jenkins问题
JDK及Maven安装
插件安装
创建示例项目
CI流程
Tekton安装
tekton yaml文件
dashboard yaml文件
trigger yaml文件
Tekton使用(demo)
ArgoCD安装
ArgoCD使用
Tekton结合ArgoCD流水线
git-clone.yaml
docker-build.yaml
git-docker-build-pipline.yaml
helm-change-config.yaml
webhook触发器
本文档使用MrDoc发布
返回首页
-
+
Tekton结合ArgoCD流水线
2023年6月17日 20:56
admin
#资料 https://zhuanlan.zhihu.com/p/425524512 --- #官方Task仓 https://hub.tekton.dev/tekton/task/git-clone --- #[国内镜像仓库](http://baodoc.frp.bao-server.club:22080/project/35/621/ "国内镜像仓库") --- #流水线共有以下几个任务: ####- Git Clone:clone仓库,提供工作区用于镜像构建。 ####- Build Image:借助容器中构建镜像技术,如kaniko来构建镜像,并push到指定仓库。 ####- Helm Git Clone:拉取 helm仓库 ####- Change Config:修改 helm仓库中的values.yaml配置文件 ####- Git Push Config:上传 helm更新后的配置文件,触发argoCD --- #一、创建Task ####接下来会介绍对每一个任务的功能实现细节,在此之前还需要介绍一个tekton的资源对象`workspaces`,在CI过程中多个任务share同一个工作区,所以依赖一个能够在多个任务(也就是pod)间共享的存储,而`workspaces`资源对象正是为每一个Task抽象出一个文件系统,但需要在`TaskRun`中指定其实现方式:包括`Configmap`、`Secret`、`PVC`;如果不需要在多个任务间共享则可以使用`pv`、`emptyDir`的形式。 --- ## Git Clone ####这一步是将目标代码仓库代码拉取到工作区,共包含下述几个任务参数: - url: git仓库地址 - revision:git clone的分支 --- ####同时依赖至少两个`workspaces`: - source:用于存放代码的工作区,使用pvc实现存储。 - ssh-directory:一个保存了`ssh私钥`和`known_hosts`的`Secret`,使其能够有目标git仓库的权限。 ##[git-clone.yaml 详情](http://baodoc.frp.bao-server.club:22080/project/56/618/ "git-cli.yaml 详情") --- ## Build Image ####任务的主要功能是构建镜像并push到指定的镜像仓库,任务参数如下: - image:构建之后的目标镜像 - insecure_registry:harbor ip及端口 ####同时依赖至少两个`workspaces`: - source:用于存放代码的工作区,使用pvc实现存储。 - dockerconfig:一个保存了docker的auth配置信息的`configmap`,使其能够有push镜像仓库的权限。 ##[docker-build.yaml 详情](http://baodoc.frp.bao-server.club:22080/project/56/620/ "docker-build.yaml 详情") --- ## Helm Git Clone ####将git-clone.yaml中的url换成helm仓库的url即可 ##[git-clone.yaml 详情](http://baodoc.frp.bao-server.club:22080/project/56/618/ "git-cli.yaml 详情") --- ## Change Config ####在镜像build完成且推送镜像仓库成功后,需要取更新应用声明文件里的镜像地址,目前是借助`yq`工具修改指定名称文件的`deployment`资源定义文件里镜像,需要自己写`yq`的表达式。 - CONTEXT:工作区需要更改的git项目目录,这个git必须是argocd监听的项目 - CONFIG_FILE:deployment资源定义文件名,必须是位于argocd设置的`path`下 - EXPRESSION:yq表达式,例如在`pipelineRun`传入`(.spec.template.spec.containers.[]|select(.name == \"api\").image)|=`,这个表达式的意思就是找到名称为`api`容器并将image字段替换为`=`后的新镜像,在后面定义`pipeline`时,我们时直接将`pipelineRun`传入的`IMAGE`和`EXPRESSION`参数组合成:`$(params.EXPRESSION)\"$(params.IMAGE)\"`传入到该任务,这样完整的yq表达式为`(.spec.template.spec.containers.[]|select(.name == \"api\").image)|="新构建的镜像"` ####只依赖`source`这一个workspace。 ##[helm-change-config.yaml](http://baodoc.frp.bao-server.club:22080/project/56/625/ "helm-change-config.yaml") --- ## Git Push Config ####这一步就是提交应用声明文件的更改。 - SUBDIR:argocd监听git项目目录名 - BRANCH:argocd监听git项目的分支 ####[git-push-config.yaml](git-push-config.yaml) ####和`Git Clone`一样依赖两个`workspaces`:`srouce`、`ssh-directory` --- ## Deploy ####借助argocd的客户端来执行同步过程, - APP_NAME:Argocd的APP名称 - BRANCH:Argocd监听项目的分支 [deploy-argocd.yaml](deploy-argocd.yaml) ####在这个任务中需要制定argocd-server的服务地址,还需要能够操作argocd的用户名和密码,这些可以不作为变量,直接hardcode在模版中 ---- #二、创建Pipeline ##[git-docker-build-pipline.yaml 详情](http://baodoc.frp.bao-server.club:22080/project/56/622/ "git-docker-build-pipline.yaml") #三、创建Trigger ##[Trigger触发器创建详情](http://baodoc.frp.bao-server.club:22080/project/56/623/ "Trigger触发器创建详情")
分享到: