本篇以redhat workshop的一个例子为蓝本

讲述从代码到镜像管理,再通过修改git,提交github Pull Request,完成gitOps的流程

Pipeline流程简述

避免贴冗长的代码,下面挨个对task简单说明下,文章最后会有验证环节继续看实际效果。

完整配置看这里:https://github.com/massivezh/tekton-cicd-demo/blob/main/Pipeline.yaml

第一部分:把应用代码统统变成docker镜像

  • clone-repo 克隆app代码
  • set-image-tag 提取commit的id,作为将来镜像的tag
  • build-n-push buildah构建镜像,并上传到docker hub
  • tag-to-latest 给镜像打上latest的tag

第二部分:gitOps的操作

  • clone-deploy-repo 克隆gitOps代码
  • patch-dev 更新dev环境镜像版本
  • commit-to-dev dev环境就直接push了
  • patch-prod 更新prod环境镜像版本
  • branch-to-prod 创建branch到git
  • pr-to-prod 创建Pull Request等待人工介入审批

可以看到上面gitOps流程里,dev环境直接push到main分支上,就触发ArgoCD直接部署了,

而prod环境要等PR merge到main上才能触发ArgoCD部署。

一些具体细节

其中大部分task在之前的系列中已经讲过了,不再赘述

这里做一些补充分别是准备各种用户名密码和Pull Request部分的操作

先是准备secrets

分别是docker hub,git,git rest api的登录凭据

这一部分很繁琐,实际运用过程中最好用vault之类的工具进行管理

docker凭据

  1. 使用docker login或者nerdctl login生成配置文件
  2. 再根据文件生成secret
kubectl create secret generic dockerconfig-secret --from-file=/root/.docker/config.json

git命令行工具凭据

按下面配置生成secret

kind: Secret
apiVersion: v1
metadata:
  name: git-basic-auth-secret
type: Opaque
stringData:
  .gitconfig: |
    [credential "https://github.com"]
      helper = store
  .git-credentials: |
    https://gitbot:xxxxx@github.com

git rest api凭据

由于最后Pull Request是使用的github-open-pr这个task使用github rest api操作,

所以需要单独创建一个secret包含TOKEN

kubectl create secret generic github --from-literal token="TTOKEN"

Pull Requets的处理

pull request最后是在github-open-pr这个task实现的

通过github rest api的post提交一个Pull Requets请求

可以用curl工具,也可以写段程序调用库

主要参数是在Body parameters里的这几个:

  • title 提交PR需要写的废话标题
  • body 提交PR需要写的废话内容
  • base 就是main分支,也是会触发ArgoCD执行的这个分支
  • head 前面步骤自动创建的branch,本文对应2f7d99,包含最新提交内容。

参考:https://docs.github.com/en/rest/pulls/pulls#create-a-pull-request#

结果验证

  1. 手动在app仓库改点东西,注意commit id最后几位是2f7d99
  2. tekla镜像出现问题怎么操作 tekla如何镜像_tekton

    tekla镜像出现问题怎么操作 tekla如何镜像_devops_02

  3. docker hub有构建完的镜像,分别有tag:2f7d99 和latest

tekla镜像出现问题怎么操作 tekla如何镜像_tekla镜像出现问题怎么操作_03

  1. 接下来看到main分支里dev环境配置已经更新(实际会触发ArgoCD部署最新版本)

tekla镜像出现问题怎么操作 tekla如何镜像_ci_04

  1. 而main分支的prod环境并没有更新

tekla镜像出现问题怎么操作 tekla如何镜像_tekla镜像出现问题怎么操作_05

  1. 原因就是创建了新的branch

tekla镜像出现问题怎么操作 tekla如何镜像_ci_06

  1. 然后更新在branch:2f7d99里了

tekla镜像出现问题怎么操作 tekla如何镜像_tekla镜像出现问题怎么操作_07

  1. 最后创建了Pull Request,待人工介入是否要merge到main分支

tekla镜像出现问题怎么操作 tekla如何镜像_ci_08

  1. 一旦手动介入确认了PR,merge到了main分支,最终会触发ArgoCD部署到prod环境。

与原始版本的一些出入

由于操作的环境不一样,演示的目的也不一样,与原始的demo有一点的改动

大致如下:

  1. 取消了trigger触发部分,简化流程(trigger请参考前几篇文章)
  2. 不使用gitea的内置仓库,而是使用github
  3. 不使用内置docker registry,而是使用docker hub
  4. 部分系统添加了登录认证处理
  5. 使用catalog的github-open-pr task替代自定义的task-create-pr