首页 > 其他分享 >Tekton应用CI/CD配置

Tekton应用CI/CD配置

时间:2023-01-25 15:34:09浏览次数:46  
标签:CI git name image dev CD Tekton params resources

下面的Pipeline配置中使用了镜像标签自动生成、代码构建和镜像推送、应用镜像部署三个任务。也可以根据各自持续集成和交付的需求添加诸如代码质量检查、自动化测试等任务,不断完善持续集成和交付系统。

Java语言配置示例

通过Maven工具构建Java代码。为了提高构建效率,需要为Maven本地仓库配置持久存储,否则会导致每次运行Maven都需要远程下载依赖包。

在Tekton的最佳实践中,鼓励对Task的重用,这样可以减少维护功能重复的Task。下面的镜像标签自动生成与应用镜像部署任务可以在其他Pipeline中重用。

基于Java代码的CI/CD配置示例如下:

# 为Maven本地仓库配置持久存储,容量大小根据Maven本地存储库大小而定
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: maven-repo-local
spec:
  accessModes:
   - "ReadWriteOnce"
  resources:
    requests:
      storage: "20Gi"
---
# 配置Git仓库地址和分支
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: git-resource-helloworld-java-spring
spec:
  type: git
  params:
   - name: url
      value: https://github.com/knativebook/helloworld-java-spring.git
   - name: revision
      value: master
---
# 配置镜像地址(镜像标签不用配置,创建时自动生成)
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: image-resource-helloworld-java-spring
spec:
  type: image
  params:
   - name: url
      value: docker.io/{username}/helloworld-java-spring
---
# 此Task为镜像自动生成标签(重用Task)
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: generate-image-tag
spec:
  resources:
    outputs:
     - name: builtImage
        type: image
  results:
   - name: timestamp
      description: Current timestamp
  steps:
   - name: get-timestamp
      image: bash:latest
      script: |
        #!/usr/bin/env bash
        ts='date "+%Y%m%d-%H%M%S"'
        echo "Current Timestamp: ${ts}"
        echo "Image URL: $(resources.outputs.builtImage.url):${ts}"
        echo $(resources.outputs.builtImage.url):${ts} | tr-d "\n" | tee
          $(results.timestamp.path)
      volumeMounts:
       - name: localtime
          mountPath: /etc/localtime
  volumes:
   - name: localtime
      hostPath:
        path: /usr/share/zoneinfo/Asia/Shanghai
---
# 此Task创建代码,然后将代码推送到Docker Registry
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: mavn-build-and-push
spec:
  params:
   - name: imageUrl
      type: string
  resources:
    inputs:
     - name: git-source
        type: git
  steps:
   - name: maven-compile
      image: maven:3.6.1-jdk-8-alpine-private
      workingDir: "$(resources.inputs.git-source.path)"
      command: ['/usr/bin/mvn']
      args:
       - 'clean'
       - 'install'
       - '-D maven.test.skip=true'
      volumeMounts:
       - name: maven-repository
          mountPath: /root/.m2
   - name: build-and-push
      image: gcr.io/kaniko-project/executor:debug-v0.24.0
      env:
       - name: "DOCKER_CONFIG"
          value: "/tekton/home/.docker/"
      command:
       - /kaniko/executor
      args:
       ---dockerfile=$(resources.inputs.git-source.path)/Dockerfile
       ---destination=$(params.imageUrl)
       ---context=$(resources.inputs.git-source.path)
       ---log-timestamp
      volumeMounts:
       - name: localtime
          mountPath: /etc/localtime
  volumes:
   - name: localtime
      hostPath:
        path: /usr/share/zoneinfo/Asia/Shanghai
   - name: maven-repository
      persistentVolumeClaim:
        claimName: maven-repo-local
---
# 此Task通过kubectl命令向本地Kubernetes集群部署应用(重用Task)
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: deployment
spec:
  params:
   - name: imageUrl
      type: string
   - name: appName
      type: string
  steps:
   - name: create-ksvc
      image: bash:latest
      command:
       - /bin/sh
      args:
       --c
       - |
          cat <<EOF > /workspace/knative-ksvc.yaml
            apiVersion: serving.knative.dev/v1
            kind: Service
            metadata:
              name: $(params.appName)
              namespace: default
              labels:
                application: $(params.appName)
                tier: application
            spec:
              template:
                metadata:
                  annotations:
                    autoscaling.knative.dev/class: kpa.autoscaling.knative.dev
                    autoscaling.knative.dev/metric: concurrency
                    autoscaling.knative.dev/minScale: "1"
                  labels:
                    application: $(params.appName)
                    tier: application
                spec:
                  containers:
                 - image: $(params.imageUrl)
                    imagePullPolicy: IfNotPresent
                    env:
                     - name: TARGET
                        value: "Tekton Sample"
                    ports:
                     - containerPort: 80
          EOF
   - name: run-kubectl
      image: lachlanevenson/k8s-kubectl:v1.17.12
      command: ['kubectl']     
      args:
       - "apply"
       - "-f"
       - "/workspace/knative-ksvc.yaml"
---
# 此Pipeline用于串联各Task
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
  name: helloworld-java-spring-pipeline
spec:
  resources:
   - name: git-source-p
      type: git
   - name: builtImage-p
      type: image
  params:
   - name: application
      type: string
  tasks:
   - name: generate-image-url
      taskRef:
        name: generate-image-tag
      resources:
        outputs:
         - name: builtImage
            resource: builtImage-p
   - name: mavnbuild-and-push
      taskRef:
        name: mavn-build-and-push
      runAfter:
       - generate-image-url
      resources:
        inputs:
         - name: git-source
            resource: git-source-p
      params:
       - name: imageUrl
          value: "$(tasks.generate-image-url.results.timestamp)"
   - name: deployment
      taskRef:
        name: deployment
      runAfter:
       - mavnbuild-and-push
      params:
       - name: appName
          value: $(params.application)
       - name: imageUrl
          value: "$(tasks.generate-image-url.results.timestamp)"
---
# 此PipelineRun为Pipeline传递相应资源参数并触发Pipeline运行
# PipelineRun可以手工创建或通过Dashborad UI创建
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
  name: helloworld-java-spring-pipeline-run
spec:
  pipelineRef:
    name: helloworld-java-spring-pipeline
  params:
 - name: application
    value: helloworld-java-spring
  resources:
 - name: git-source-p
    resourceRef:
      name: git-resource-helloworld-java-spring
 - name: builtImage-p
    resourceRef:
      name: image-resource-helloworld-java-spring
  serviceAccountName: docker-git-sa
  timeout: 0h10m0s

标签:CI,git,name,image,dev,CD,Tekton,params,resources
From: https://www.cnblogs.com/muzinan110/p/17066989.html

相关文章

  • Argo CD应用管理
    一个云原生应用程序通常包含多种Kubernetes资源类型,例如Deployment、ReplicaSet、Pod、PersistVolume、Service等,但在Kubernetes的原生能力下,并没有一个完整的概念可以直观......
  • Argo CD应用的更新和回滚
    ArgoCD是用于Kubernetes的声明式GitOps应用持续交付工具,相比于传统的DevOps应用持续交付模型,GitOps模型下的应用更新和回滚更加高效,那么在使用ArgoCD更新、交付应用之前,......
  • Argo CD核心概念及架构设计
    ArgoCD的核心概念Application(应用):一组Kubernetes资源清单的统一定义,属于CRD(CustomResourceDefinition,定制资源定义)资源。Applicationsourcetype(应用的源仓库类型):目......
  • Argo CD安装配置
    安装ArgoCD单独为ArgoCD创建命名空间argocd,命令如下所示。$kubectlcreatenamespaceargocdnamespace/argocdcreated使用以下命令将ArgoCD部署到argocd命名空间下......
  • 0315-Java学习-091-【答疑解惑】Failed to configure a DataSource: 'url' attribute
    一、问题现象 创建了一个springboot项目后,运行项目提示信息如下所示 相应的文本信息如下: Description:FailedtoconfigureaDataSource:'url'attributei......
  • 输出十六进制整数ABCDEF对应的十进制整数,所占域宽为15。
    备注:printf可以使用使用格式控制串“%md”输出域宽为m的十进制整数。参考代码:#include<stdio.h>intmain(){  printf("%15d\n",0XABCDEF);  return0;}0XABCDEF......
  • 2023牛客寒假算法基础集训营1 个人题解(ACDHKL)
    A.WorldFinal?WorldCup!(I)题意:给10场比赛的点球输赢情况,奇数为A队点球,偶数为B队点球思路:用两个变量x,y来分别存A队当前赢的场次和B队当前赢的场次然后就就扫......
  • 2021 ACL Parameter-efficient Multi-task Fine-tuning for Transformers via Shared
    Parameter-efficientMulti-taskFine-tuningforTransformersviaSharedHypernetworks阅读这篇文章的目的是为了了解hypernet,相关代码https://github.com/rabeehk/hyp......
  • 个人写的双缓冲 CDC绘图函数
    voidCDRImageStatic::ShowImg(CDC*dc,CRectrect){CBitmapbmp;bmp.CreateCompatibleBitmap(dc,m_nWidth,m_nHeight);CBitmap*pOld=NULL;CDCmemDC;memDC.......
  • CInternetSession::OpenURL
    PSSIDNumber:172551ArticleLastModifiedon3/7/2005Theinformationinthisarticleappliesto:TheMicrosoftFoundationClasses(MFC),whenusedwith:Micr......