网络研讨会系列:使用 CircleCI 和 Argo CD 在 Kubernetes 上开发 GitOps 工具集

美元(注)

网友系列

本文补充了一系列关于使用 Kubernetes 进行 CI/CD 的网络研讨会(https://go.digitalocean.com/cicd-on-k8s)。该系列讨论如何采用云原生方法来构建、测试和部署应用程序,涵盖发布管理、云原生工具、服务网格和可与 Kubernetes 一起使用的 CI/CD 工具。

本教程包括系列的最后一期概念和命令,GitOps Tool Sets on Kubernetes with CircleCI 和 Argo CD

<$>[警告] **警告:**本教程中的程序仅用于示范目的,因此它们不遵循生产准备部署所需的最佳实践和安全措施。

[youtube ZxE1psdIpyY 480 854 ]

介绍

使用 Kubernetes 部署您的应用程序可以提供重要的基础设施优势,如灵活的扩展,分布式组件管理和应用程序的不同版本的控制。然而,随着控制的增加,可以增加 CI/CD 系统的合作代码开发,版本控制,更改日志和自动部署和回归的复杂性,特别难以手动管理。 为了应对这些困难,DevOps 工程师已经开发了几种 Kubernetes CI/CD 自动化方法,包括工具系统和称为 GitOps 的最佳实践。 GitOps 根据 Weaveworks2017 博客中提出的建议,使用 Git作为 CI/CD 流程的单一真理源,将代码更改整合到

有许多工具使用Git作为Kubernetes上的DevOps流程的焦点,包括 Gitkube由Hasura(https://hasura.io/)开发, Flux由Weaveworks开发,以及 Jenkins X,本系列的第二个网络研讨会的主题(https://andsky.com/tech/tutorials/webinar-series-kubernetes-package-management-with-helm-and-ci-cd-with-jenkins-x)。

CircleCI 使用 GitHubBitbucket存储库来组织应用程序开发,并在 Kubernetes 上自动构建和测试。通过与 Git 存储库集成,CircleCI 项目可以检测应用程序代码发生更改时,并自动测试它,通过电子邮件或其他通信工具(如 Slack发送更改和测试结果的通知。

Argo CD 作为 Kubernetes 的 Argo 工作流程管理引擎的子项目,提供持续交付工具,自动同步和部署您的应用程序,每次在您的 GitHub 存储库中进行更改时。 通过管理应用程序的部署和生命周期,它提供了解决方案,用于 Kubernetes 环境中的版本控制、配置和应用程序定义,以易于理解的用户界面来组织复杂的数据。 它可以处理多个类型的 Kubernetes 表现,包括 ksonnet 应用程序, Customize 应用程序, Helm 图表和 YAML/json 文件,并支持 GitHub, GitLitab 和 Bitbucket 的 Webhook 通知。

在这篇 CI/CD with Kubernetes系列的最后一篇文章中,您将通过以下方式尝试这些GitOps工具:

  • 设置管道触发器以使用 CircleCI 和 GitHub 自动化应用程序测试
  • 同步和部署来自 GitHub 存储库的应用程序与 Argo CD

到本教程结束时,您将了解如何使用 GitOps 工具集在 Kubernetes 上构建 CI/CD 管道。

前提条件

要遵循本教程,您将需要:

  • Ubuntu 16.04服务器,内含16GB的RAM或以上. 由于此教程仅用于演示目的,命令从root账户中运行. ** 注意该账户不受限制的特权不遵循为生产做好准备的最佳做法并可能影响你的系统。 ** 为此,建议在虚拟机或[数字海洋滴放 (https://www.digitalocean.com/products/droplets/)等测试环境中遵循这些步骤. (- ) * A [Docker Hub Counter] (https://hub.docker.com). 关于从多克枢纽开始的概况,请参见[这些指示] (https://docs.docker.com/docker-hub/). (- )* A [GitHub] (https://github.com) 帐户和关于GitHub的基本知识. 关于如何使用 GitHub 的入门, 请检查 如何在 GitHub 上创建拉出请求( https://andsky.com/tech/tutorials/how-to-create-a-pull-request-on-github) 教程 。
  • 熟悉 Kubernetes 概念 。 详情请参见[Kubernetes简介 (https://andsky.com/tech/tutorials/an-introduction-to-kubernetes). *。 一个有 [kubectl] (https://kubernetes.io/docs/tasks/tools/install-kubectl/]] 命令行工具的Kubernetes集群. 这个教程已经在模拟的Kubernetes集群上进行了测试,在本地环境中设置了Minikube,这个程序允许您在自己的机器上试用Kubernetes工具而无需设置真正的Kubernetes集群. 为了创建Minikube集群,遵循本系列第二作"Webinar"中的"Kubernetes套件管理与Helm"和"CI/CD与Jenkins X"(https://andsky.com/tech/tutorials/webinar-series-kubernetes-package-management-with-helm-and-ci-cd-with-jenkins-x). (- )

步骤 1 – 设置您的 CircleCI 工作流

在此步骤中,您将组建一个标准的 CircleCI 工作流程,其中包括三个任务:测试代码,构建图像,并将该图像推到 Docker Hub. 在测试阶段, CircleCI 将使用 pytest来测试样本 RSVP 应用程序的代码。

首先,让 CircleCI 访问您的 GitHub 帐户。 要做到这一点,请在您最喜欢的 Web 浏览器中导航到 https://circleci.com/:

CircleCI Landing Page

在页面右上方,你会发现一个 ** 登录 ** 按钮. 点击此按钮,然后点击 ** 登录 GitHub ** 在以下页面上。

Sign In to GitHub CircleCI Page

在这里输入您的用户名和密码允许CircleCI读取您的GitHub电子邮件地址,部署密钥和在您的存储库中添加服务链接,创建您的存储库列表,并将SSH密钥添加到您的GitHub帐户中。

一旦您查看了这些权限,请输入您的 GitHub 凭证,然后点击 ** 登录**. CircleCI 将与您的 GitHub 帐户集成,并将您的浏览器重定向到 CircleCI 欢迎页面:

Welcome page for CircleCI

现在你可以访问你的 CircleCI 仪表板,打开另一个浏览器窗口,并导航到 GitHub 存储库这个网页研讨会, https://github.com/do-community/rsvpapp-webinar4。 如果你被要求登录 GitHub,输入你的用户名和密码。 在这个存储库中,你会找到由 CloudYuga团队创建的 RSVP 应用程序样本。 对于本教程的目的,你将使用这个应用程序来展示 GitOps 工作流程。 通过点击屏幕右上方的 Fork 按钮,将此存储库转入你的 GitHub 帐户。

當你打開儲存庫時,GitHub 會重定向你到 https://github.com/your_GitHub_username/rsvpapp-webinar4. 在屏幕的左側,你會看到一個 Branch:master按鈕. 點一下這個按鈕來顯示這個項目的分支列表。 此處, master分支指應用程式的現行官方版本。 另一方面, dev分支是一個開發沙盒,在您可以測試變化之前,將其推進到官方版本中的 master分支。 選擇 dev分支。

现在你已经在这个演示库的开发部分,你可以开始设置一个管道 CircleCI 需要一个 YAML 配置文件在库中,它描述了它需要采取的步骤来测试你的应用程序。

要创建此配置文件,请单击创建新文件按钮,创建名为.circleci/config.yml的文件:

GitHub Create a new file Page

一旦你在GitHub中打开了这个文件,你就可以为CircleCI配置工作流程. 要了解这个文件的内容,你会将部分添加到部分。

 1[label .circleci/config.yml]
 2version: 2
 3jobs:
 4  test:
 5    machine:
 6      image: circleci/classic:201808-01
 7      docker_layer_caching: true
 8    working_directory: ~/repo
 9
10. . .

在上面的代码中,版本指的是您将使用的CircleCI的版本,jobs:test:意味着您正在为您的应用程序设置测试,而machine:image:指的是CircleCI将进行测试的位置,在这种情况下,基于circleci/classic:201808-01图像的虚拟机。

接下来,添加您希望 CircleCI 在测试过程中采取的步骤:

 1[label .circleci/config.yml]
 2. . .
 3    steps:
 4      - checkout
 5      - run:
 6          name: install dependencies
 7          command: |
 8            sudo rm /var/lib/dpkg/lock
 9            sudo dpkg --configure -a
10            sudo apt-get install software-properties-common
11            sudo add-apt-repository ppa:fkrull/deadsnakes
12            sudo apt-get update
13            sleep 5
14            sudo rm /var/lib/dpkg/lock
15            sudo dpkg --configure -a
16            sudo apt-get install python3.5
17            sleep 5
18            python -m pip install -r requirements.txt            
19
20      # run tests!
21      # this example uses Django's built-in test-runner
22      # other common Python testing frameworks include pytest and nose
23      # https://pytest.org
24      # https://nose.readthedocs.io
25
26      - run:
27          name: run tests
28          command: |
29            python -m pytest tests/test_rsvpapp.py              
30
31. . .

测试的步骤在步骤:之后列出,从 - checkout开始,该步骤会检查您的项目的源代码并将其复制到工作空间。接下来, - 运行:名称:安装依赖步骤会运行列出的命令来安装测试所需的依赖。在这种情况下,您将使用 Django Web 框架内置的测试运行器和测试工具pytest。在 CircleCI 下载这些依赖之后, - 运行:名称:运行测试步骤将指示 Circle 在您的应用程序上运行测试。

完成测试任务后,添加以下内容来描述构建任务:

 1[label .circleci/config.yml]
 2. . .
 3  build:
 4
 5    machine:
 6      image: circleci/classic:201808-01
 7      docker_layer_caching: true
 8    working_directory: ~/repo
 9
10    steps:
11      - checkout 
12      - run:
13          name: build image
14          command: |
15            docker build -t $DOCKERHUB_USERNAME/rsvpapp:$CIRCLE_SHA1 .            
16
17  push:
18    machine:
19      image: circleci/classic:201808-01
20      docker_layer_caching: true
21    working_directory: ~/repo
22    steps:
23      - checkout 
24      - run:
25          name: Push image
26          command: |
27            docker build -t $DOCKERHUB_USERNAME/rsvpapp:$CIRCLE_SHA1 .
28            echo $DOCKERHUB_PASSWORD | docker login --username $DOCKERHUB_USERNAME --password-stdin
29            docker push $DOCKERHUB_USERNAME/rsvpapp:$CIRCLE_SHA1	            
30
31. . .

如前所述,机器:图像:意味着CircleCI将基于指定的图像在虚拟机中构建应用程序。在步骤:下,您将再次找到 - checkout,然后是 - 运行:名称:构建图像。这意味着CircleCi将从您的Docker Hub存储库中的rs vpapp图像中构建一个Docker容器。在CircleCI接口中,您将设置$DOCKERHUB_USERNAME环境变量,该教程将在此YAML文件完成后涵盖。

完成构建任务后,任务将将结果的图像推到您的 Docker Hub 帐户。

最后,添加以下行来确定协调您之前定义的任务的工作流:

 1[label .circleci/config.yml]
 2. . .
 3workflows:
 4  version: 2
 5  build-deploy:
 6    jobs:
 7      - test:
 8          context: DOCKERHUB
 9          filters:
10            branches:
11              only: dev        
12      - build:
13          context: DOCKERHUB 
14          requires:
15            - test
16          filters:
17            branches:
18              only: dev
19      - push:
20          context: DOCKERHUB
21          requires:
22            - build
23          filters:
24            branches:
25              only: dev

这些行确保 CircleCI 以正确的顺序执行测试构建推送任务。背景:DOCKERHUB指的是测试将发生的背景,您将在完成此 YAML 文件后创建此背景。

现在你已经添加了.circleci/config.yml 文件的所有代码,其内容应该如下:

 1[label .circleci/config.yml]
 2version: 2
 3jobs:
 4  test:
 5    machine:
 6      image: circleci/classic:201808-01
 7      docker_layer_caching: true
 8    working_directory: ~/repo
 9
10    steps:
11      - checkout
12      - run:
13          name: install dependencies
14          command: |
15            sudo rm /var/lib/dpkg/lock
16            sudo dpkg --configure -a
17            sudo apt-get install software-properties-common
18            sudo add-apt-repository ppa:fkrull/deadsnakes
19            sudo apt-get update
20            sleep 5
21            sudo rm /var/lib/dpkg/lock
22            sudo dpkg --configure -a
23            sudo apt-get install python3.5
24            sleep 5
25            python -m pip install -r requirements.txt            
26
27      # run tests!
28      # this example uses Django's built-in test-runner
29      # other common Python testing frameworks include pytest and nose
30      # https://pytest.org
31      # https://nose.readthedocs.io
32
33      - run:
34          name: run tests
35          command: |
36            python -m pytest tests/test_rsvpapp.py              
37
38  build:
39
40    machine:
41      image: circleci/classic:201808-01
42      docker_layer_caching: true
43    working_directory: ~/repo
44
45    steps:
46      - checkout 
47      - run:
48          name: build image
49          command: |
50            docker build -t $DOCKERHUB_USERNAME/rsvpapp:$CIRCLE_SHA1 .            
51
52  push:
53    machine:
54      image: circleci/classic:201808-01
55      docker_layer_caching: true
56    working_directory: ~/repo
57    steps:
58      - checkout 
59      - run:
60          name: Push image
61          command: |
62            docker build -t $DOCKERHUB_USERNAME/rsvpapp:$CIRCLE_SHA1 .
63            echo $DOCKERHUB_PASSWORD | docker login --username $DOCKERHUB_USERNAME --password-stdin
64            docker push $DOCKERHUB_USERNAME/rsvpapp:$CIRCLE_SHA1	            
65
66workflows:
67  version: 2
68  build-deploy:
69    jobs:
70      - test:
71          context: DOCKERHUB
72          filters:
73            branches:
74              only: dev        
75      - build:
76          context: DOCKERHUB 
77          requires:
78            - test
79          filters:
80            branches:
81              only: dev
82      - push:
83          context: DOCKERHUB
84          requires:
85            - build
86          filters:
87            branches:
88              only: dev

一旦您已将此文件添加到您的存储库的 dev分支,请返回 CircleCI 仪表板。

接下来,您将创建一个 CircleCI 背景,以容纳您在上一个 YAML 文件中描述的工作流程所需的环境变量。在屏幕的左侧,您将找到一个 SETTINGS 按钮. 点击此,然后在 ORGANIZATION 标题下选择 Contexts

Create Context Screen for CircleCI

然后,CircleCI 会要求您提供该背景的名称。输入 DOCKERHUB,然后单击 Create. 创建背景后,选择 DOCKERHUB 背景,然后单击 ** Add Environment Variable** 按钮。

Add Environment Variable Screen for CircleCI

然后添加另一个环境变量,但这一次,将其命名为DOCKERHUB_PASSWORD,并用您的 Docker Hub 密码填写 Value字段。

当你为你的 **DOCKERHUB ** 背景创建两个环境变量时,为测试 RSVP 应用程序创建一个 CircleCI 项目. 要做到这一点,从左侧菜单中选择 **ADD PROJECTS ** 按钮。 这将产生与你的帐户相关的 GitHub 项目列表。

<$>[注] 注: 如果 rsvpapp-webinar4 未出现在列表中,请重新加载 CircleCI 页面。

您现在将在 设置项目页面上找到自己:

Set Up Project Screen for CircleCI

在屏幕顶部,CircleCI 指示您创建一个 config.yml 文件. 既然您已经完成了此操作,请向下滚动,在页面右侧找到 开始构建 按钮。

CircleCI将重定向您到尚无构建的构建进度/状态页面。

若要测试管道触发器,请访问最近的https://github.com/your_GitHub_username/rsvpapp-webinar4文件库,然后只对dev字段进行一些更改。 由于您已将只有:dev字段过滤器添加到您的.circleci/config文件中,那么 CI 只会在 dev字段发生更改时构建。 对 dev字段代码进行更改,您将发现 CircleCI 在用户界面中引发了新的工作流程。 点击运行工作流程,您将找到 CircleCI 正在做的事情的详细信息:

CircleCI Project Workflow Page

随着您的 CircleCI 工作流处理您的 GitOps CI/CD 系统的连续集成方面,您可以安装和配置 Argo CD 在您的 Kubernetes 集群上,以解决持续部署。

步骤 2 — 在您的 Kubernetes 集群上安装和配置 Argo CD

正如CircleCI使用GitHub来触发对源代码的更改的自动测试一样,Argo CD将您的Kubernetes集群连接到您的GitHub存储库,以便听取更改并自动部署更新后的应用程序。

首先,创建一个名为argocdnamespace:

1kubectl create namespace argocd

在这个名称空间内,Argo CD 将运行其创建持续部署工作流程所需的所有服务和资源。

接下来,下载Argo CD宣言(https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml)从Argo的官方GitHub回复库:

1kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v0.9.2/manifests/install.yaml

在这个命令中,n旗指示kubectl将宣言应用于名称空间argocd,而-f则指示它将应用的宣言的文件名,在这种情况下是从Argo存储库下载的文件名。

通过使用kubectl get命令,您可以找到现在在argocd名称空间中运行的 pods:

1kubectl get pod -n argocd

使用此命令将产生类似于以下的输出:

1NAME READY STATUS RESTARTS AGE
2application-controller-6d68475cd4-j4jtj 1/1 Running 0 1m
3argocd-repo-server-78f556f55b-tmkvj 1/1 Running 0 1m
4argocd-server-78f47bf789-trrbw 1/1 Running 0 1m
5dex-server-74dc6c5ff4-fbr5g 1/1 Running 0 1m

现在Argo CD在您的集群上运行,请下载Argo CD CLI工具,以便您可以从命令行控制该程序:

1curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/v0.9.2/argocd-linux-amd64

一旦下载了该文件,请使用chmod使其可执行:

1chmod +x /usr/local/bin/argocd

要找到Argo CD服务,请在名称空间中运行kubectl get命令argocd:

1kubectl get svc -n argocd argocd-server

您将获得类似于以下的输出:

1[secondary_label Output]
2NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)          AGE
3argocd-server ClusterIP 10.109.189.243   <none>        80/TCP,443/TCP 8m

现在,访问 Argo CD API 服务器. 此服务器不会自动具有外部 IP,所以您必须首先将 API 曝光,以便您可以从本地工作站的浏览器访问它. 要做到这一点,请使用kubectl 端口前进将本地工作站的端口 80 转发到80 TCP 端口的argocd 服务器服务从上一个输出:

1kubectl port-forward svc/argocd-server -n argocd 8080:80

产量将是:

1[secondary_label Output]
2Forwarding from 127.0.0.1:8080 -> 8080
3Forwarding from [::1]:8080 -> 8080

一旦您运行port-forward命令,您的命令提示将从您的终端消失. 要为您的 Kubernetes 集群输入更多命令,请打开一个新的终端窗口并登录您的远程服务器。

要完成连接,请使用ssh8080端口从本地机器转发。 首先,打开一个额外的终端窗口,然后从本地工作站输入以下命令,将remote_server_IP_address取代为您正在运行 Kubernetes 集群的远程服务器的 IP 地址:

1ssh -L 8080:localhost:8080 root@remote_server_IP_address

要确保 Argo CD 服务器暴露于您的本地工作站,请打开浏览器并导航到 URL localhost:8080

Sign In Page for ArgoCD

现在你已经安装了Argo CD并将其服务器暴露在你的本地工作站,你可以继续到下一个步骤,你将GitHub连接到你的Argo CD服务。

步骤 3 – 将 Argo CD 连接到 GitHub

要允许Argo CD聆听GitHub并同步部署到您的存储库,您必须首先将Argo CD连接到GitHub。

默认情况下,您的 Argo CD 帐户的密码是 Argo CD API 服务器的 pod 名称. 返回登录到您的远程服务器但不处理端口转发的终端窗口。

1kubectl get pods -n argocd -l app=argocd-server -o name | cut -d'/' -f 2

您将获得运行 Argo API 服务器的 pod 名称:

1[secondary_label Output]
2argocd-server-b686c584b-6ktwf

请输入以下命令从 CLI 登录:

1argocd login localhost:8080

您将收到以下快递:

1[secondary_label Output]
2WARNING: server certificate had error: x509: certificate signed by unknown authority. Proceed insecurely (y/n)?

对于此演示的目的,请键入y以便在没有安全连接的情况下进行。Argo CD 将提示您输入您的用户名和密码。输入 admin用于用户名,并输入您的密码的完整argocd-server pod 名称。一旦您输入您的身份证,您将收到以下消息:

1[secondary_label Output]
2'admin' logged in successfully
3Context 'localhost:8080' updated

现在您已登录,请使用以下命令更改您的密码:

1argocd account update-password

Argo CD 会问你当前的密码和你想要更改的密码. 选择一个安全的密码,然后在提示中输入它. 一旦你这样做,使用你的新密码重新登录:

1argocd relogin

再次输入你的密码,你会得到:

1[secondary_label Output]
2Context 'localhost:8080' updated

如果您在 Argo CD 集群之外的集群上部署应用程序,则需要使用 Argo CD 注册应用程序集群的凭证,如同本教程所示,如果 Argo CD 和您的应用程序位于相同的集群中,则将使用 https://kubernetes.default.svc 作为 Kubernetes API 服务器来连接 Argo CD 到您的应用程序。

要演示如何注册一个外部集群,首先获得您的Kubernetes背景列表:

1kubectl config get-contexts

你会得到:

1[secondary_label Output]
2CURRENT NAME CLUSTER AUTHINFO NAMESPACE
3*         minikube minikube minikube

若要添加集群,请输入以下命令,将集群的名称代替突出名称:

1argocd cluster add minikube

在这种情况下,前一种命令会产生:

1[secondary_label Output]
2INFO[0000] ServiceAccount "argocd-manager" created
3INFO[0000] ClusterRole "argocd-manager-role" created
4INFO[0000] ClusterRoleBinding "argocd-manager-role-binding" created, bound "argocd-manager" to "argocd-manager-role"
5Cluster 'minikube' added

现在你已经为 Argo CD 设置了凭证日志并测试了如何添加外部集群,转到 Argo CD 定位页面并从本地工作站登录。

Argo CD Applications Screen

从这里,从左侧的工具栏点击设置图标,点击存储库,然后点击连接复制。Argo CD将为您的GitHub信息提供三个字段:

Argo CD Connect Git Repo Page

Repository URL的字段中,输入 https://github.com/your_GitHub_username/rsvpapp-webinar4,然后输入您的GitHub用户名和密码。一旦输入了您的身份证,请点击屏幕顶部的 CONNECT按钮。

一旦您连接了包含示范RSVP应用程序的存储库到Argo CD,请从左侧的工具栏中选择 Apps图标,在屏幕右上角点击 **+**按钮,然后选择 New Application

Argo CD Review application parameters Page

Path字段指定你的应用程序的YAML文件所在位置在你的GitHub存储库中。对于这个项目,输入 k8s。对于 Application Name,输入 rsvpapp,对于 Cluster URL,从下拉菜单中选择 https://kubernetes.default.svc,因为Argo CD和你的应用程序在同一个Kubernetes集群上。最后,输入 default for Namespace

一旦您填写了应用程序参数,请点击屏幕顶部的 CREATE

Argo CD APPLICATIONS Page with rsvpapp

在 **状态:**之后,你会看到你的应用程序是 OutOfSync 与你的 GitHub 存储库. 要在 GitHub 上部署你的应用程序,点击 ACTIONS 并选择 Sync. 几分钟后,你的应用程序状态将改变为 Synced,这意味着Argo CD已经部署了你的应用程序。

一旦你的应用已经部署,点击你的应用程序框找到你的应用程序的详细图表:

Argo CD Application Details Page for rsvpapp

要在您的 Kubernetes 集群中找到此部署,请返回远程服务器的终端窗口,然后输入:

1kubectl get pod

您将收到正在运行您的应用程序的 pods 输出:

1[secondary_label Output]
2NAME READY STATUS RESTARTS AGE
3rsvp-755d87f66b-hgfb5 1/1 Running 0 12m
4rsvp-755d87f66b-p2bsh 1/1 Running 0 12m
5rsvp-db-54996bf89-gljjz 1/1 Running 0 12m

接下来,检查一下服务:

1kubectl get svc

您将找到 RSVP 应用程序和您的 MongoDB 数据库的服务,除了您的应用程序正在运行的端口号外,如下所示:

1NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)        AGE
2kubernetes ClusterIP 10.96.0.1       <none>        443/TCP 2h
3mongodb ClusterIP 10.102.150.54   <none>        27017/TCP 25m
4rsvp NodePort 10.106.91.108   <none>        80:31350/TCP 25m

您可以通过浏览器中的your_remote_server_IP_address:app_port_number进行导航来找到部署的RSVP应用程序,使用前面的突出号码为app_port_number:

RSVP Application

现在你已经使用Argo CD部署了应用程序,你可以测试你的持续部署系统,并调整它自动同步到GitHub。

步骤 4 – 测试您的连续部署设置

使用 Argo CD 设置,通过对项目进行更改并启动应用程序的新构建来测试您的持续部署系统。

在您的浏览器中,导航到 https://github.com/your_GitHub_username/rsvpapp-webinar4,点击 master分支,并更新 k8s/rsvp.yaml 文件以部署您的应用程序,使用 CircleCI 创建的图像作为基础。在 image: nkhare/rsvpapp:之后添加 dev,如下所示:

 1[label rsvpapp-webinar2/k8s/rsvp.yaml]
 2apiVersion: apps/v1
 3kind: Deployment
 4metadata:
 5  name: rsvp
 6spec:
 7  replicas: 2
 8  selector:
 9    matchLabels:
10      app: rsvp
11  template:
12    metadata:
13      labels:
14        app: rsvp
15    spec:
16      containers:
17      - name: rsvp-app
18        image: nkhare/rsvpapp: dev
19        imagePullPolicy: Always
20        livenessProbe:
21          httpGet:
22            path: /
23            port: 5000
24          periodSeconds: 30
25          timeoutSeconds: 1
26          initialDelaySeconds: 50
27        env:
28        - name: MONGODB_HOST
29          value: mongodb
30        ports:
31        - containerPort: 5000
32          name: web-port
33. . .

而不是从Docker Hub中提取原始图像,Argo CD现在将使用在连续集成系统中创建的 dev图像来构建应用程序。

承诺更改,然后返回ArgoCD UI. 你会注意到没有什么变化;这是因为你没有激活自动同步,必须手动同步应用程序。

要手动同步应用程序,点击屏幕右上角的蓝色圆圈,然后点击 Sync. 将出现一个新的菜单,一个字段以命名您的新修订和一个标记为 PRUNE的检查框:

Synchronization Page for Argo CD

点击此检查框将确保,一旦Argo CD旋转你的新应用程序,它将摧毁过时的版本。点击 PRUNE框,然后点击 SYNCHRONIZE在屏幕顶部。你会看到你的应用程序的旧元素旋转下来,新的元素旋转起来与你的CircleCI制作的图像。如果新图像包含任何更改,你会发现这些新变化反映在你的应用程序在URL your_remote_server_IP_address:app_port_number

如前所述,Argo CD 还具有自动同步选项,在您创建应用程序时将更改纳入应用程序中。

1argocd app set rsvpapp --sync-policy automated

要确保修订不会被意外删除,自动同步的默认设置已关闭 Prune. 要打开自动切割,只需在前一命令的末尾添加--auto-prune旗。

现在,您已将连续部署功能添加到您的Kubernetes集群中,您已经完成了CircleCI和Argo CD的GitOps CI/CD演示系统。

结论

在本教程中,您使用 CircleCI 创建了一个管道,在您更改 GitHub 存储库中的代码时启动测试并构建更新的图像。您还使用 Argo CD 部署应用程序,自动集成 CircleCI 集成的更改。

如果您想了解更多关于 Git 的信息,请参阅我们的 An Introduction to Open Source系列教程. 要探索更多与 Git 存储库集成的 DevOps 工具,请参阅 如何在 Ubuntu 18.04 上安装和配置 GitLab

Published At
Categories with 技术
comments powered by Disqus