作为 Code Stream 管理员或开发人员,您可以使用 Code Stream 和 VMware Tanzu Kubernetes Grid Integrated Edition(以前称为 VMware Enterprise PKS)自动将软件应用程序部署到 Kubernetes 集群。此用例提到其他方法,这些方法可用于自动执行应用程序的发布。

在此用例中,您将创建包含两个阶段的管道,并使用 Jenkins 生成和部署应用程序。

  • 第一个阶段是进行开发。此阶段使用 Jenkins 从 GitHub 存储库中的分支提取代码,然后生成、测试并发布该代码。
  • 第一个阶段是进行部署。此阶段运行需要关键用户批准的用户操作任务,然后管道才可以将应用程序部署到 Kubernetes 集群。
将应用程序部署到 Kubernetes 集群的工作流概览

开发工具、开发实例和管道 YAML 文件必须可用,以便管道可以生成、测试、发布和部署应用程序。管道会将应用程序部署到 AWS 上的 Kubernetes 集群开发实例和生产实例。

将应用程序发布到 Kubernetes 集群的工作流。

可用于自动执行应用程序的发布的其他方法是:

  • 可以使用 Code Stream 本地构建功能和 Docker 构建主机,而不必使用 Jenkins 来构建应用程序。
  • 可以将应用程序部署到 Amazon Web Services (AWS) 集群,而不必部署到 Kubernetes 集群。

有关使用 Code Stream 本地构建功能和 Docker 主机的更多信息,请参见:

前提条件

  • 验证要部署的应用程序代码是否驻留在工作 GitHub 存储库中。
  • 验证您是否具有 Jenkins 工作实例。
  • 验证您是否具有工作电子邮件服务器。
  • Code Stream 中,创建连接到电子邮件服务器的电子邮件端点。
  • Amazon Web Services (AWS) 上设置两个分别用于开发和生产的 Kubernetes 集群,管道会将应用程序部署到这两个集群。
  • 验证 GitHub 存储库是否包含管道的 YAML 代码,或者验证是否包含定义环境的元数据和规范的 YAML 文件。

过程

  1. Code Stream 中,单击端点 > 新建端点,然后创建 Jenkins 端点以在管道中用于从 GitHub 存储库提取代码。
    用于生成和测试应用程序以及将应用程序发布到 Kubernetes 集群的 Jenkins 端点。
  2. 要创建 Kubernetes 端点,请单击新建端点
    1. 创建用于 Kubernetes 开发集群的端点。
    2. 创建用于 Kubernetes 生产集群的端点。
    用于将应用程序部署到 Kubernetes 集群的 Kubernetes 端点。
  3. 创建一个管道以用于将应用程序(例如 Wordpress)的容器部署到 Kubernetes 开发集群,并设置管道的输入属性。
    1. 要使管道能够识别 GitHub 中会触发管道的代码提交,请在管道中单击输入选项卡并选择自动注入属性
    2. 添加名为 GIT_COMMIT_ID 的属性,然后单击该属性旁边的星标。
      当管道运行时,管道执行将显示 Git 触发器返回的提交 ID。
    已设置了 Git 输入属性的 Kubernetes 管道。
  4. 添加通知以在管道成功或失败时发送电子邮件。
    1. 在管道中,单击通知选项卡,然后单击添加
    2. 要添加在管道完成运行时发送的电子邮件通知,请依次选择电子邮件完成。然后选择电子邮件服务器,输入电子邮件地址,并单击保存
    3. 要添加在管道失败时发送的另一个电子邮件通知,请选择失败,然后单击保存
    管道电子邮件通知和选择电子邮件服务器。
  5. 向管道添加开发阶段,并添加生成、测试和发布应用程序的任务。然后验证每个任务。
    1. 要生成应用程序,请添加使用 Jenkins 端点的 Jenkins 任务,并从 Jenkins 服务器运行生成作业。然后,要使管道能够提取代码,请按以下格式输入 Git 分支:${input.GIT_BRANCH_NAME}
    2. 要测试应用程序,请添加使用同一个 Jenkins 端点的 Jenkins 任务,并从 Jenkins 服务器运行测试作业。然后输入与上述相同的 Git 分支。
    3. 要发布应用程序,请添加使用同一个 Jenkins 端点的 Jenkins 任务,并从 Jenkins 服务器运行发布作业。然后输入与上述相同的 Git 分支。
    包含生成应用程序任务的详细信息的 Kubernetes 管道。
  6. 向管道添加部署阶段,然后添加需要批准才能部署应用程序的任务,并添加将应用程序部署到 Kubernetes 集群的另一个任务。然后验证每个任务。
    1. 要指定需要批准才能部署应用程序,请添加一个用户操作任务,添加必须批准该任务的用户的电子邮件地址,并输入消息。然后启用发送电子邮件
    2. 要部署应用程序,请添加一个 Kubernetes 任务。然后,在 Kubernetes 任务属性中,选择您的 Kubernetes 开发集群,选择创建操作,并选择本地定义负载源。然后选择本地 YAML 文件。
  7. 添加可使 Code Stream 能够使用 Git 触发器的 Git Webhook,该触发器会在开发人员提交代码时触发管道。
    用于触发 Kubernetes 管道的 Git Webhook。
  8. 要测试管道,请转到 GitHub 存储库,更新应用程序 YAML 文件,并提交更改。
    1. Code Stream 中,验证是否显示该提交。
    1. 单击触发器 > Git > 活动
    2. 查找管道的触发器。
    3. 单击仪表板 > 管道仪表板
    4. 在管道仪表板上,在最新的成功更改区域中找到 GIT_COMMIT_ID。
  9. 检查管道代码并验证是否显示相应更改。

结果

恭喜!您已自动执行软件应用程序到 Kubernetes 集群的部署。

示例: 将应用程序部署到 Kubernetes 集群的示例管道 YAML

对于此示例中使用的管道类型,YAML 类似于以下代码:

apiVersion: v1
kind: Namespace
metadata:
  name: ${input.GIT_BRANCH_NAME}
  namespace: ${input.GIT_BRANCH_NAME}
---  
apiVersion: v1
data:
  .dockercfg: eyJzeW1waG9ueS10YW5nby1iZXRhMi5qZnJvZy5pbyI6eyJ1c2VybmFtZSI6InRhbmdvLWJldGEyIiwicGFzc3dvcmQiOiJhRGstcmVOLW1UQi1IejciLCJlbWFpbCI6InRhbmdvLWJldGEyQHZtd2FyZS5jb20iLCJhdXRoIjoiZEdGdVoyOHRZbVYwWVRJNllVUnJMWEpsVGkxdFZFSXRTSG8zIn19
kind: Secret
metadata:
  name: jfrog
  namespace: ${input.GIT_BRANCH_NAME}
type: kubernetes.io/dockercfg
---   
apiVersion: v1
kind: Service
metadata:
  name: codestream
  namespace: ${input.GIT_BRANCH_NAME}
  labels:
    app: codestream
spec:
  ports:
    - port: 80
  selector:
    app: codestream
    tier: frontend
  type: LoadBalancer 
---
apiVersion: extensions/v1
kind: Deployment
metadata:
  name: codestream
  namespace: ${input.GIT_BRANCH_NAME}
  labels:
    app: codestream
spec:
  selector:
    matchLabels:
      app: codestream
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: codestream
        tier: frontend
    spec:
      containers:
      - name: codestream
        image: cas.jfrog.io/codestream:${input.GIT_BRANCH_NAME}-${Dev.PublishApp.output.jobId}
        ports:
        - containerPort: 80
          name: codestream
      imagePullSecrets:
      - name: jfrog
      

后续步骤

要将软件应用程序部署到 Kubernetes 生产集群,请再次执行相应步骤并选择生产集群。

要了解有关将 Code Stream 与 Jenkins 集成的更多信息,请参见如何将 Code Stream 与 Jenkins 集成