使用argo workflow 实现springboot 项目的CI、CD-制作cd argo workflow 模版

Workflow 结构

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: springboot-service-workflow-
spec:
  entrypoint: springboot-workflow
  • apiVersion: argoproj.io/v1alpha1kind: Workflow:这定义了这是一个 Argo Workflow 类型的资源,表示这个文件用于定义一个工作流。

  • metadata.generateName: springboot-service-workflow-:这个字段为工作流生成一个唯一的名称。generateName 表示 Argo 会在每次创建工作流时,为该工作流添加一个随机的后缀,以确保工作流名称的唯一性。

  • spec.entrypoint: springboot-workflow:指定工作流的入口点,即从哪个模板开始执行。在这个例子中,工作流会从 springboot-workflow 模板开始执行。

Templates 定义

接下来的部分定义了工作流中的多个步骤 (steps),这些步骤会按顺序执行。

创建 Kubernetes 服务 (create-service)

- name: create-service
  resource:
    action: apply
    manifest: |
      apiVersion: v1
      kind: Service
      metadata:
        name: springboot-service
      spec:
        selector:
          app: springboot-app
        ports:
          - protocol: TCP
            port: 8080
            targetPort: 8080
        type: NodePort  # 可以根据需要修改为 LoadBalancer 或 NodePort

  • name: create-service:这个步骤的名称。
  • resource:
    • action: apply:表示使用 kubectl apply 命令应用 Kubernetes 资源,创建一个服务。
    • manifest: 这是一个 Kubernetes Service 的 YAML 定义,描述了服务的配置。
    • apiVersion: v1 和 kind: Service:表示这个资源是一个 Kubernetes 服务。
    • metadata.name: springboot-service:服务的名称是 springboot-service。
      • spec:
        • selector: 用于选择应用的 Pod。这里的选择器选择标签为 app: springboot-app 的 Pod。
        • ports: 定义服务的端口,服务监听 8080 端口,并将请求转发到目标端口 8080。
        • type: NodePort:指定服务类型为 NodePort,这意味着服务将暴露在 Kubernetes 节点的一个端口上,便于从外部访问应用。你可以根据需要将其改为 LoadBalancer 或 ClusterIP,具体取决于你的网络需求。

启动 Spring Boot 容器 (springboot-container)


- name: springboot-container
  container:
    name: springboot-app
    image: my-image:v1  # 替换成你的 Docker 镜像
    command: [ "java" ]  # 显式指定命令为 `java`
    args: [ "-jar", "arthas-study.jar" ]  # 显式指定 `arthas-study.jar` 文件作为参数
    ports:
      - containerPort: 8080
    env:
      - name: SPRING_PROFILES_ACTIVE
        value: "prod"
  metadata:
    labels:
      app: springboot-app

完整workflow内容

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: springboot-service-workflow-
spec:
  entrypoint: springboot-workflow
  templates:
    - name: springboot-workflow
      steps:
        - - name: create-service
            template: create-service
        - - name: start-springboot-container
            template: springboot-container

    - name: create-service
      resource:
        action: apply
        manifest: |
          apiVersion: v1
          kind: Service
          metadata:
            name: springboot-service
          spec:
            selector:
              app: springboot-app
            ports:
              - protocol: TCP
                port: 8080
                targetPort: 8080
            type: NodePort  # 可以根据需要修改为 LoadBalancer 或 NodePort

    - name: springboot-container
      container:
        name: springboot-app
        image: my-image:v1  # 替换成你的 Docker 镜像
        command: [ "java" ]  # 显式指定命令为 `java`
        args: [ "-jar", "arthas-study.jar" ]  # 显式指定 `arthas-study.jar` 文件作为参数
        ports:
          - containerPort: 8080
        env:
          - name: SPRING_PROFILES_ACTIVE
            value: "prod"
      metadata:
        labels:
          app: springboot-app

在这里插入图片描述

可以看到springboot项目已经运行成功。

kubectl get svc -n argo

在这里插入图片描述

http://192.168.56.115:32356/user/1

在这里插入图片描述

上一篇:对传统加密算法降维打击?!——量子计算