在上一篇文章中,我深入研究了微服务的迷人世界 - 。这是我关于微服务及其模式的综合文章系列的开始。 微服务架构模式第 1 部分:分解模式 虽然逻辑步骤是继续本系列的第 2 部分,但我决定接下来要探索并告诉您的是将这些微服务无缝交付给最终用户的重要过程。 内容概述 动机 【模块一】:AWS EC2虚拟服务器 【模块二】:Jenkins服务器 [模块3]:Git和Github [模块4]:Apache Maven [模块5]:Docker [模块 6]:Ansible [模块7]:Kubernetes 结论 关于作者 动机 CI/CD 是一种向客户交付应用程序的技术,通过在应用程序开发的不同阶段添加自动化来实现。我相信掌握 CI/CD(持续集成和持续部署)可以使开发人员更好地理解后端项目工件如何存在于项目存储库的边界之外。这种理解还可以使开发人员的观点发生根本性的转变。他们可以开始将项目的更广泛背景视为有价值的产品,而不是仅仅将他们的工作视为代码行。 在本文中,我们旨在通过实际应用揭开 CI/CD 流程的神秘面纱。我们将引导您完成分步教程,逐个模块地分解它,您将在其中手动构建 CI/CD 管道。为此,我们将利用 和 等当代 DevOps 工具的强大功能。那么,让我们开始这个旅程吧! AWS、Docker、Kubernetes、Ansible、Git、Apache Maven Jenkins 【模块一】:AWS EC2虚拟服务器 该模块专用于创建 AWS EC2 虚拟服务器实例。作为本文的一部分,您将为 Jenkins、Ansible 和 Kubernetes 设置三个 EC2 实例。现在,您可以继续学习下一个模块,并在“[模块 2]:Jenkins”、“[模块 6]:Ansible”和“[模块 7]:Kubernetes”部分中重新访问此模块。 步骤1:创建AWS账户 转到 https://aws.amazon.com。 单击按钮 。 创建 AWS 账户 按照创建帐户网页上的说明进行操作。 第 2 步:登录您的 AWS 账户 转到 https://console.aws.amazon.com/console/home。单击 按钮。 “登录” 在此网页上输入所有必要的凭据。 第3步:找到EC2虚拟服务器 在搜索框中找到 EC2。 单击 选择 EC2 虚拟服务器。 EC2 服务 单击按钮 。 启动实例 第 4 步:配置“名称和标签”部分 转到 部分。 “名称和标签” 在 部分中为新的 AWS EC2 虚拟服务器实例提供名称。 “名称” 您还可以通过单击 为虚拟服务器添加其他标签。 “添加其他标签” 步骤 5:配置“应用程序和操作系统映像(Amazon 系统映像)”部分 转到 部分。 “应用程序和操作系统映像(Amazon 系统映像)” 使用虚拟服务器: 免费 选择您的虚拟服务器的操作系统 - 。 Amazon Linux 在 部分中,选择具有 计算机。 Amazon 系统映像 (AMI) 免费套餐合格标签 的 第 6 步:配置“实例类型”部分 转到 部分。 “实例类型” 使用虚拟服务器: 免费 在 部分中选择带有 类型。 实例类型 免费套餐合格标签的 对我来说,它是 。 t2.micro (系列:t2 1cCPU 1 GiB 内存当前一代:true) 步骤 7:配置“配置存储”部分 转到 部分。 “配置存储” 使用虚拟服务器: 免费 不要更改默认设置。符合免费套餐资格的客户可以获得 。 30 GB 的 EBS 通用 (SSD) 或磁性存储 步骤 8:配置“网络设置”部分 转到 部分。 “网络设置” 您需要设置虚拟服务器的安全性。去做这个, 单击 按钮。 “创建安全组” 在 部分添加新安全组的名称。 “安全组名称” 在 部分添加新安全组的说明。 “说明” 默认情况下,您的虚拟服务器可通过( )访问。如果您需要其他连接类型,请通过添加其他入站安全组规则来添加它们。 类型 - SSH、协议 - TCP、端口 - 22 第 9 步:配置“密钥对(登录)”部分 转到 部分。 “密钥对(登录)” 如果您尚未创建新的密钥对,请创建它。 如果您还没有创建 : “密钥对” 单击 按钮。 “创建新密钥对” 在 部分中为新密钥对命名。 “密钥对名称” 选择密钥对类型 或 。我选择 类型。 RSA ED25519 RSA 选择私钥文件格式。 和 的选择。我选择 格式。 .pem .ppk .pem 单击 按钮。 “创建密钥对” 您将看到一个弹出窗口,提示您下载私钥文件。同意并将文件下载到您的计算机。 步骤10:启动EC2虚拟服务器实例 单击 按钮启动 EC2 虚拟服务器实例。 “启动实例” EC2 虚拟服务器实例创建过程完成后,您将看到以下内容。 然后,您应该通过单击 按钮转到 部分。 “查看所有实例” “实例” 现在您可以看到您的 AWS EC2 虚拟服务器实例正在运行。 【模块二】:Jenkins服务器 现在,让我们在 EC2 虚拟服务器实例上配置 JenkinsServer。 步骤 1:创建 AWS EC2 虚拟服务器实例 您需要一个虚拟服务器来运行 Jenkins。 按照本教程的 部分中的说明完成此步骤并创建一个名为 JenkinsServer 的 EC2 虚拟服务器实例。 [模块 1]:AWS EC2 虚拟服务器 不要忘记添加安全组设置。它允许 和 分别在端口 和 上工作。 Jenkins SSH 8080 22 使用名称 来区分您的 EC2 虚拟服务器实例。 “JenkinsServer” 为新的 AWS EC2 实例创建 安全组和 。您可以在本文中进一步重用它们。 “JenkinsServer” “CI_CD_Pipeline” “CI_CD_Pipeline_Key_Pair” 步骤 2:连接到 AWS EC2 虚拟服务器实例 转至 → → AWS 控制台主页 EC2 管理控制台仪表板 实例。 然后你应该选择 ,然后单击 按钮。 JenkinsServer “连接” 然后你就会看到这个网页。您应该再次单击 按钮。 “连接” 现在您可以在在线终端上看到EC2虚拟服务器实例。 第 3 步:下载 Jenkins 存储库 现在您需要在 EC2 虚拟服务器实例上下载 Jenkins。 请遵循以下说明: 转到 Jenkins 下载 。 网页 您可以看到稳定(LTS)和常规版本(每周)选项。选择 LTS 选项。 Red Hat/Fedora/Alma/Rocky/CentOS 您将看到此网页。 复制 命令并执行它,从 Internet 上的 Jenkins 存储库下载 Jenkins 文件,并将它们保存到 EC2 虚拟服务器实例上的指定位置。 “sudo get..” sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo 现在 Jenkins 已下载。 第 4 步:导入 Jenkins 密钥 要完成 Jenkins 安装,我们需要导入 Jenkins 密钥。 要导入 Jenkins 密钥,我们需要复制 命令并执行它。 “sudo rpm..” sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key 这样, 包管理器可以验证您安装的 Jenkins 包是否正是 Jenkins 项目发布的包,并且它们没有被篡改或损坏。 “rpm” 第5步:安装Java 要运行 Jenkins,我们需要在 EC2 虚拟服务器实例上安装 。 Java 要安装 ,请使用此命令。 Java sudo amazon-linux-extras install java-openjdk11 -y 使用以下命令验证 是否已正确安装: Java java -version 你会看到类似的东西。 第6步:安装fontconfig 要运行 Jenkins,您需要在我们的 EC2 虚拟服务器实例上安装 。 fontconfig 使用这个命令。 sudo yum install fontconfig java-11-openjdk -y Fontconfig 是一个旨在提供系统范围的字体配置、定制和应用程序访问的库。 Jenkins 需要它,因为 Jenkins 具有渲染字体的功能。 第7步:安装詹金斯 在前面的步骤中,您将 EC2 虚拟服务器实例配置为使用特定的 Jenkins 存储库,然后导入与该存储库关联的 GPG 密钥。现在,您需要运行命令来搜索它知道的所有存储库(包括您添加的 Jenkins 存储库)以查找 Jenkins 包。一旦它在 Jenkins 存储库中找到 Jenkins 包,它将下载并安装它。 让我们运行这个命令。 sudo yum install jenkins -y 第8步:启动詹金斯 您可以使用此命令启动 Jenkins。 sudo systemctl start jenkins 要检查 Jenkins 是否正在运行,请使用此命令。 sudo systemctl status jenkins 您将看到如下屏幕截图所示的输出: 詹金斯现在应该已启动并运行。 第9步:访问Jenkins 要访问 Jenkins 应用程序,请打开任何 Web 浏览器并输入 EC2 实例的公共 IP 地址或域名,后跟端口 8080。 http://<your-ec2-ip>:8080 第一次访问 Jenkins 时,它将被自动生成的密码锁定。 您需要使用以下命令显示此密码。 sudo cat /var/lib/jenkins/secrets/initialAdminPassword 复制此密码,返回浏览器,将其粘贴到管理员密码字段中,然后单击“继续”。 然后你就可以看到这个网页了。 现在,您可以使用 Jenkins 服务器。 第 10 步:创建新的 Jenkins 管道 现在,由于 Jenkins 工作正常,您可以开始创建 Jenkins 管道。要创建 Jenkins 管道,您需要创建一个新的“Freestyle 项目”。要创建新的“Freestyle 项目”,您需要转到 Jenkins 仪表板并单击 按钮。 “New Item” 输入Github“Freestyle项目”的名称(后面将使用“管道”名称),然后单击 按钮。 “确定” 然后提供管道的 。 描述 然后单击“应用”和“保存”按钮。之后,这意味着您创建了本教程中将要构建的管道的基础。 [模块3]:Git和Github 现在,当 Jenkins 在 AWS EC2 虚拟服务器实例上运行时,您可以使用管道配置 Git。 Git 是一个 分布式版本控制系统 (VCS),旨在帮助软件团队跟踪对特殊数据库中代码的每次修改。如果出现错误,开发人员可以倒转并比较早期版本的代码,以帮助修复错误,同时最大限度地减少对所有团队成员的干扰。 VCS 特别适用于 团队,因为它们可以帮助他们减少开发时间并增加成功部署 [1]。 免费开源的 开发运营 Git 作为最流行的版本控制系统,使我们能够将最新代码从项目 Github 存储库提取到安装 Jenkins 的 EC2 虚拟服务器实例。 第1步:安装Git 使用此命令安装 Git。 sudo yum install git -y 现在使用此命令验证 Git 是否正常工作。 git --version 现在 Git 在 EC2 虚拟服务器实例上运行良好。 第 2 步:打开 Jenkins 仪表板 由于 Git 在 EC2 虚拟服务器实例上运行良好,我们现在可以将 Jenkins 与 Git 集成。 要开始此集成,让我们安装 Jenkins Github 插件。 转到 Jenkins 仪表板部分。 第 3 步:打开 Jenkins 插件管理器 单击 按钮,然后单击 按钮。 “管理 Jenkins” “管理插件” 第4步:找到Github Jenkins插件 单击 按钮。 “可用插件” 找到 插件搜索框。 Github 选择 插件。 Github 第5步:安装Github Jenkins插件 选择 插件。然后单击 按钮。 Github “安装而不重新启动” 等待Github插件下载结束。 是的! Jenkins Github 插件已安装。 第6步:配置Github Jenkins插件 现在 GitHub Jenkins 插件已安装,您可以配置此插件以最终将 Jenkins 与 Git 集成。为此,您需要单击“返回首页”按钮返回主页。 然后在主页上,您需要单击 按钮,然后单击 按钮。 “管理Jenkins” “全局工具配置” 然后在全局工具配置网页上,您应该转到 Git 部分。 在 Git 部分中,您需要通过提供计算机上 Git 的名称和路径来配置 Git。 然后单击 和 按钮**。** “应用” “保存” 到这里,您就完成了 Jenkins Github 插件的配置。 第 7 步:将 Git 集成到管道中 现在,随着 Jenkins Github 插件的安装和配置,您现在可以在管道中使用该插件了。这将允许您在模块 2 中创建的管道从指定的 GitHub 存储库中提取项目代码。 那么,要将此插件集成到您的管道中,您需要转到源代码管理部分并在管道中选择 Git。然后您需要提供您的项目存储库 URL。如果您的项目存储库在 Github 上公开,则无需提供凭据。如果项目存储库在 Github 上是私有的,您需要提供凭据。 您可以将我的项目与下一个存储库 URL 一起使用:https: 。 //github.com/Sunagatov/Hello.git 只需将其复制并粘贴到“ 输入中即可。然后点击 和 按钮完成Git与管道的集成。 存储库 URL” “应用” “保存” 第 8 步:测试集成到管道中的 Git 现在,您可以使用更新的管道从 Github 中提取项目。为此,您需要单击**“立即构建”**按钮。结果,您将在构建历史记录中看到成功的构建。 打开构建历史记录中的第一个构建。 现在您可以看到第一次构建的成功作业结果。如果您打开 AWS EC2 终端。您可以检查管道是否正常工作。 只需使用这个命令即可。 cd /var/lib/jenkins/workspace/{your pipeline name} 这样您就可以看到您的项目从 Github 被拉取到您的 AWS EC2 虚拟服务器实例。 [模块4]:Apache Maven 是软件开发中广泛使用的构建自动化和项目管理工具。它通过管理项目依赖关系并提供一致的构建生命周期来简化编译、测试和打包代码的过程。 Maven 使用基于 XML 的配置文件(POM 文件)来定义项目结构、依赖关系和任务,使开发人员能够有效地管理和部署复杂的软件项目。 Apache Maven 现在您已将 Git 集成到管道中,您可以通过合并 Apache Maven 来进一步增强管道,Apache Maven 使您能够构建、测试和打包项目。为此,您需要在安装了 Jenkins 和 Git 的 AWS EC2 虚拟服务器实例上安装 Apache Maven。 第 1 步:下载 Apache Maven 要下载 Apache Maven,请转到 目录。 “/opt” cd /opt 然后使用这个命令。 sudo wget https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz 该命令将下载最新的官方 Apache Maven(请在 Apache Maven 官方网站上查看最新版本)。要查找最新的官方 Apache Maven 版本,请使用链接 。 https://maven.apache.org/download.cgi 第 2 步:从存档中提取 Apache Maven 使用以下命令从下载的存档中提取 Apache Maven: sudo tar -xvzf apache-maven-*.tar.gz 步骤3:添加JAVA_HOME和M2_HOME 使用此命令移动到根文件夹。 cd ~ 使用此命令编辑 文件。 .bash_profile vi .bash_profile 添加 和 M2_HOME 变量。 JAVA_HOME 将 指定为 JDK11 的路径,将 变量指定为 maven 目录的路径。 JAVA_HOME M2_HOME 要查找 JDK 路径,请使用此命令。 sudo find / -name java 如何使用VIM 要 文件,请按键盘按钮 插入数据。 编辑 “ I ” 要 文件,请按键盘按钮“esc”并输入“:w”。 保存 要 文件,请按键盘按钮 并输入 。 退出 “esc” “:q” 保存更改。 然后,执行此命令刷新系统变量。 source .bash_profile 要验证 ,请使用此命令。 $PATH echo $PATH 要验证 ,请使用此命令。 Apache Maven mvn -v 如果一切正确,您将能够查看 Apache Maven 的版本。 步骤 4:安装 Apache Maven Jenkins 插件 由于 Apache Maven 可以在 EC2 实例上使用,因此您可以安装 Apache Maven 插件以将其与管道集成。 为此,请按照下列步骤操作: 导航到 “仪表板” →“管理 Jenkins”→“管理插件”→“可用”。 在搜索框中输入 。 “Maven” 选择 插件。 “Maven 集成” 等待下载过程结束。 然后点击 按钮。 “返回首页” 第 5 步:配置 Apache Maven Jenkins 插件 成功安装 Apache Maven Jenkins 插件后,您现在可以在模块 2 和 3 中创建和更新的管道中使用此插件。 为此,请按照下列步骤操作: 转到 “仪表板” →“管理 Jenkins”→“全局工具配置”→“JDK” 单击 “添加 JDK”按钮。 取消选中 “自动安装”。 然后转到 部分。单击 按钮。取消选中 “Maven” “添加 Maven” “自动安装”。 然后添加 和 路径。 名称 MAVEN_HOME 单击 和 按钮。 “应用” “保存” 到这里,您已经完成了 Apache Maven Jenkins 插件的配置。 第 6 步:将 Apache Maven 集成到管道中 现在,随着 Apache Maven GitHub 插件的安装和配置,您现在可以在管道中使用 Apache Maven。这将允许您在“[模块 2]:Jenkins 服务器”中创建的管道构建项目代码以创建 jar 工件。 要将 Apache Maven 集成到管道中,您需要执行以下步骤: 导航到 “仪表板” →“CI_CD_Pipeline”→“配置”→“构建步骤”。 单击 按钮。 “添加构建步骤” 选择 选项。 “调用顶级 Maven 目标” 选择 作为 “Apache-Maven” “Maven 版本”。 将 命令添加到 输入。 “clean package” “Goals” 单击 按钮。 “高级” 将“pom.xml”添加到 输入。 “POM” 最后,单击 和 按钮即可完成 Apache Maven 与管道的集成。 “应用” “保存” 第 7 步:测试集成到管道中的 Apache Maven 现在您可以使用更新的管道来构建您的 Github 项目。为此,您需要单击**“立即构建”**按钮。因此,您将在构建历史记录中看到成功的作业结果。 如果您打开 AWS EC2 终端。您可以检查管道是否正常工作。 只需使用这个命令即可。 cd /var/lib/jenkins/workspace/{your pipeline name}/target 这样您就可以看到 JAR 工件,表明您的项目已从 GitHub 成功构建。 [模块5]:Docker 现在让我们创建一个名为“Ansible Server”的新 EC2 实例,您将在其中安装 Docker 和 Ansible。 步骤 1:启动 AWS EC2 虚拟服务器实例 使用本教程“ 部分中的说明来完成此步骤。不要忘记添加安全组设置。它允许 Docker 和 SSH 分别在端口 8080 和 22 上工作。 启动 AWS EC2 虚拟服务器实例” 步骤 2:连接到 AWS EC2 虚拟服务器实例 单击“连接”按钮。 现在您可以看到 EC2 Virtual Server 实例在线终端。 sudo chown ansible-admin:ansible-admin /opt/docker 步骤 3:在 Ansible EC2 虚拟服务器上安装 Docker。 现在您需要在 Ansible EC2 实例上安装 docker。为此,您需要创建一个新的 docker 文件夹。 sudo mkdir /opt/docker 然后,通过执行下一个命令来安装 docker。 sudo yum install docker -y 步骤 4:将当前用户添加到 Ansible EC2 虚拟服务器上的 Docker 组 您需要将当前用户 添加到 EC2 虚拟服务器上的 Docker 组,以授予 Docker 管理员权限。 “ansible-admin” “AnsibleServer” sudo usermod -a -G docker ansible-admin 您需要注销并重新登录才能使这些更改生效。 然后就可以执行下一条命令了 id ansible-admin 查看新的 docker 用户是否存在。 第 5 步:启动 Docker 现在,当 Docker 安装在 Ansible EC2 实例上时,您可以通过执行下一个命令来启动它。 sudo systemctl start docker Docker 启动后,您可以执行下一个命令 sudo systemctl status docker 可以看到 docker 现在处于活动状态并正在运行。 第6步:创建Dockerfile 在管道的最终版本中,该过程将涉及从 GitHub 项目创建新的 Docker 映像并将其推送到 Docker Hub。为此,您的 GitHub 项目应包含一个 Dockerfile。 如果您使用“ 模块中提供的项目 ,那么您不需要创建新的 Dockerfile,因为该项目存储库已经包含 Dockerfile。 [模块3]:Git 和 Github” “Hello” FROM eclipse-temurin:17-jre-jammy ENV HOME=/opt/app WORKDIR $HOME ADD hello-0.0.1-SNAPSHOT.jar $HOME ENTRYPOINT ["java", "-jar", "/opt/app/hello-0.0.1-SNAPSHOT.jar" ] 如果您使用自己的项目存储库并且它不包含 Dockerfile,则您将需要创建一个新的 Dockerfile。 要创建新的 Dockerfile,请执行以下命令,这将创建新文件。 sudo touch Dockerfile 然后,您可以使用一系列命令来填充此文件,这些命令描述如何构建容器化应用程序环境。这些命令包括将文件复制到映像、安装软件、设置环境变量和配置容器等操作。 要使用这些命令填充 Dockerfile,请执行以下命令。 vim Dockerfile Dockerfile 已可供使用。 第7步:登录Docker 现在您的 Dockerfile 已准备好使用,接下来从 **“JenkinsServer”**EC2 实例复制项目的 JAR 工件并将其粘贴到 EC2 实例上。值得注意的是,这种转移将通过管道进一步自动化。 “AnsibleServer” 完成此步骤后,您就可以测试 Dockerfile 以及您设置的 Docker 环境了。 在开始测试之前,请确保在 Dockerhub 上对自己进行身份验证。执行以下命令。 docker login 此命令将提示您提供 Dockerhub 登录凭据,包括您的用户名和密码。 至此,您已经完成了登录 的过程,现在可以开始测试了。 Docker 测试Docker环境和Dockerfile 步骤8: 成功登录 Dockerhub 后,您现在可以开始测试准备好的 Dockerfile。 执行此命令创建 docker 镜像。 docker build -t hello:latest . 接下来,执行后续命令来建立一个标签,以方便将镜像上传到 Dockerhub: docker tag hello:latest zufarexplainedit/hello:latest 最后,继续通过执行该命令将Docker镜像推送到Dockerhub。 docker push zufarexplainedit/hello:latest 按照以下步骤操作,导航到您的 Dockerhub 帐户以验证您是否可以看到新映像。 您现在应该观察到图像已被有效添加。此结果证实 Docker 环境安装成功,并且您的 Dockerfile 是正确的。 [模块 6]:Ansible 现在让我们在 EC2 虚拟服务器实例上配置 Ansible 服务器。 步骤 1:创建 AWS EC2 虚拟服务器实例 您需要一个虚拟服务器来运行 Ansible。 按照本教程的 部分中的说明完成此步骤并为 Ansible 创建 EC2 虚拟服务器实例。 [模块 1]:AWS EC2 虚拟服务器 不要忘记添加安全组设置。它允许 和 分别在端口 和 上工作。 Ansible SSH 8080 22 使用名称 来区分您的 EC2 虚拟服务器实例。 “AnsibleServer” 您可以为新的 EC2 实例重复使用 安全组和 。 “AnsibleServer” “CI_CD_Pipeline” “CI_CD_Pipeline_Key_Pair” 步骤 2:连接到 AWS EC2 虚拟服务器实例 转到 AWS 控制台主页 → EC2 管理控制台仪表板 → 实例 → AnsibleServer。 然后单击 按钮。 “连接” 然后你就会看到这个网页。您应该再次单击 按钮。 “连接” 现在您可以在在线终端上看到EC2虚拟服务器实例。 现在让我们在 EC2 虚拟服务器实例上配置 Ansible Server。 步骤 3:更改“AnsibleServer”AWS EC2 虚拟服务器实例的主机名 当您想要在 EC2 虚拟服务器实例上配置 AnsibleServer 时,您需要做的第一件事是更改其主机名。 我们开始做吧。执行此命令打开主机名文件: sudo vi /etc/hostname 你应该看到这样的东西: 将此主机名替换为 然后,重新启动它。 “ansible-server”。 sudo init 6 步骤 4:在“AnsibleServer”AWS EC2 虚拟服务器实例中添加并配置新用户 现在,让我们向 AWS EC2 虚拟服务器实例添加一个新的 用户。 ansible-admin 为此,请使用以下命令: sudo useradd ansible-admin 然后,设置 用户的密码。 ansible-admin sudo passwd ansible-admin 此外,您需要通过编辑 文件来配置用户权限。 sudoers sudo visudo 将 添加到此 文件中。 “ansible-admin ALL=(ALL) ALL” sudoers 另外,您需要编辑 文件以启用密码身份验证。 /etc/ssh/sshd_config sudo vi /etc/ssh/sshd_config 然后您需要重新加载服务来确认这些更改。 sudo service sshd reload 执行此命令的结果是,您将看到: 现在,您可以使用此命令来避免为所有其他命令添加 sudo。 sudo su - ansible-admin 步骤 5:在 AWS EC2 虚拟服务器实例中生成密钥 您计划在本文中进一步管理远程服务器,例如 K8s EC2 虚拟服务器实例。这就是为什么您需要设置 SSH 密钥。 ssh-keygen 执行此命令的结果是,您将看到: 现在 SSH 密钥已生成并可供使用。 第 6 步:安装 Ansible 现在您可以在 EC2 虚拟服务器实例上安装 Ansible。 “AnsibleServer” 我们开始做吧。 执行此命令来安装 Ansible。 sudo amazon-linux-extras install ansible2 要验证 Ansible,请使用以下命令: ansible --version 执行此命令的结果是,您将看到: 第 7 步:在 JenkinsServer EC2 实例上安装 Jenkins“Publish over SSH”插件 由于 Ansible 安装在 EC2 虚拟服务器实例上,因此您可以配置 Jenkins 将其与 Ansible 集成。您需要安装 插件,以将 Jenkins 与安装了 Ansible 的 EC2 虚拟服务器实例以及安装了 的其他 EC2 虚拟服务器实例集成。 “AnsibleServer” “Publish over SSH” Kubernetes 转到 →“ → → 。 “仪表板” 管理 Jenkins” “配置系统” “可用插件” 然后在搜索框中输入 。 “Publish over SSH” 单击 按钮。等待下载过程结束。 “安装而不重新启动” 现在,“Publish over SSH”插件已安装在 Jenkins EC2 虚拟服务器实例上。 第 8 步:配置 Jenkins“Publish over SSH”插件 成功安装 Apache Maven Jenkins 插件后,您现在可以在模块 2 和 3 中创建和更新的管道中使用此插件。 为此,请按照下列步骤操作: 转到 → → → 。 “仪表板” “管理 Jenkins” “配置系统” “通过 SSH 发布” 输入屏幕截图上显示的所有必需数据,包括主机名、用户名和私钥(或密码,如果适用)。 然后单击 和 按钮。 “应用” “保存” 到这里,您已经完成了 Jenkins 插件的配置。 “Publish over SSH” 接下来,单击“测试配置”以验证插件是否正常工作。 在左侧可以看到测试插件配置状态为“成功”。这说明插件配置正确。 第9步:在AnsibleServer中创建新的Docker目录 您需要在 AnsibleServer EC2 实例上创建一个新文件夹,用于存储项目 JAR。该 jar 稍后将用于创建 Docker 镜像。 开始吧。 转到 AnsibleServer EC2 实例中的 文件夹。 “/opt” cd /opt 在那里创建一个新文件夹 。 “docker” sudo mkdir docker 授予此 文件夹权限。 “docker” sudo chown ansible-admin:ansible-admin docker 现在,通过执行此命令检查 文件夹权限。 “docker” ll 您可以看到 文件夹可以通过 用户访问。 “docker” “ansible-admin” 到 中 第 10 步:将“Publish over SSH”Github 插件集成 管道 现在, Github 插件已安装并配置完毕,您现在可以将其集成到您在“[模块 2]:Jenkins Server”中创建的管道中,以将项目 jar 工件从“ 传输到 。 “Publish over SSH” JenkinsServer” “Ansible服务器” 那么,要将 Github 插件集成到管道中,您需要执行以下步骤: “Publish over SSH” 导航到 “仪表板” →“CI_CD_Pipeline”→“配置”→“构建后操作”。 单击 按钮。 “添加构建后操作” 选择 选项。 “通过 SSH 发送构建工件” 将 添加到 部分中输入的 **。** “AnsibleServer” “SSH 服务器” “名称” 将 添加到 部分中输入的“ **。** “target/*.jar” “传输集” 源文件” 将 添加到 部分**的 输入中**。** “target/” “传输集” “删除前缀” 将 添加到 输入**。** “//opt/docker/” “传输集”部分中的“ 远程目录” 现在,只需在“传输集”部分下的“执行命令”输入中放置一个空字符串即可。 最后,单击 和 按钮即可完成 插件与管道的集成。 “应用” “保存” “Publish over SSH” 第 11 步:测试 Github 插件 集成到管道中的 “Publish over SSH” 现在,您可以使用更新的管道将项目 jar 工件从“ 传输到 。为此,您需要单击 按钮。因此,您将在构建历史记录中看到成功的作业结果。 JenkinsServer” “AnsibleServer” “立即构建” 如果您打开 AWS EC2 终端。您可以检查管道是否正常工作。 “AnsibleServer” 只需使用这个命令即可。 cd /opt/docker 这样您就可以看到 JAR 工件,表明您的项目已从 GitHub 成功构建。 步骤 12:配置 Ansible 主机 当您运行 Ansible playbook 时,您可以指定它应该运行的主机。您可以通过两种方式执行此操作: 在剧本中,您可以将 参数设置为 IP 地址或主机名列表。 直接在剧本中指定主机: hosts Ansible 允许您在清单文件中定义主机列表,并在运行 playbook 时引用该文件。默认清单文件是 。 使用清单文件: /etc/ansible/hosts 通过编辑 ,您可以轻松管理主机组,而无需在每次运行 playbook 时写出它们的 IP 地址。 /etc/ansible/hosts 让我们通过执行以下命令来查找 AnsibleServer EC2 实例主机。 sudo ifconfig 找到AnsibleServer EC2实例主机后,可以通过执行以下命令将其添加到Ansible主机文件中。 sudo vi /etc/ansible/hosts 您还可以添加“[ansible]”作为参考 如果您正在管理一个服务器集群,并且想要将 playbook 应用于所有服务器,则无需在 playbook 中指定每个服务器的 IP 地址,您只需将所有服务器添加到清单文件中的一个组中,然后指定剧本中的小组。 对 localhost 的无密码 SSH 身份验证 步骤 13:为 Ansible 配置 Ansible 旨在自动执行远程服务器上的任务。无密码 SSH 身份验证使 Ansible 能够连接到这些服务器,而无需手动输入密码。 执行此命令,使用 ansible-admin 用户的 SSH 密钥创建从您的计算机到另一台计算机(例如 IP 地址 172.31.34.41 的计算机)的安全连接。 sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address} 就我而言,它看起来像这样。 sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub ansible-admin@172.31.34.41 现在您可以看到 。表示无密码SSH认证安装成功完成。 “添加的密钥数量:1” 第 14 步:为 Docker 任务创建新的 Ansible playbook 现在 Ansible 已全部设置完毕并可以运行,您可以为您的管道制作一个新的 Ansible 剧本。该剧本将让 Ansible 创建新的 Docker 镜像并将其发送到 Dockerhub。 您可以这样做: 首先创建一个新的 Ansible playbook 文件。只需使用这个命令即可。 touch hello-app.yml 然后,编辑新制作的 文件。使用此命令打开它进行编辑。 hello-app.yml vi hello-app.yml 在文件中,输入以下内容。 --- - hosts: ansible user: root tasks: - name: create docker image command: docker build -t hello:latest . args: chdir: /opt/docker - name: create tag to push image onto dockerhub command: docker tag hello:latest zufarexplainedit/hello:latest - name: push docker image onto dockerhub command: docker push zufarexplainedit/hello:latest 适用于 Docker 任务的 Ansible playbook 已可供使用。 步骤 13:使用 Docker 任务测试 Ansible playbook Ansible、Ansible playbook、AnsibleServer 和 JenkinsServer 均已正确配置,现在是测试 Ansible playbook 的时候了。 导航到 Ansible playbook 的位置。 cd /opt/docker 然后,执行以下命令。 sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml 完成后,您将看到 Ansible playbook 的成功执行结果。 此外,请花点时间访问您的 Dockerhub 帐户并验证新映像现在是否可见。 您应该会看到新添加的图像。此结果证实您的 Ansible 剧本是正确的。 到 中 步骤 14:将 Ansible Docker 任务集成 管道 现在, Github 插件、Ansible 和 Docker 已安装并配置完毕,您现在可以将它们全部集成到您在“[模块 2]:Jenkins 服务器”中创建的管道中,以传输项目 jar 工件从“ 到 ,然后从您的项目构建一个新的 Docker 镜像,然后将此 Docker 镜像推送到 Dockerhub 上。 “Publish over SSH” JenkinsServer” “AnsibleServer” 要实现它,您需要执行以下步骤: 导航到 “仪表板” →“CI_CD_Pipeline”→“配置”→“构建后操作”→“通过 SSH 发送构建工件”。 将 命令添加到 输入中。 “sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml” “Exec command” 最后,单击 和 按钮即可完成 Ansible Docker 与管道的集成任务。 “应用” “保存” 第 15 步:测试 ” 集成到管道中的 “带有 Docker 任务的 Ansible playbook 现在,您可以测试升级后的管道,以将项目 jar 工件从“ 无缝传输到 ,然后从您的项目构建新的 Docker 映像,然后将此 Docker 映像推送到 Dockerhub。为此,您需要单击 按钮。因此,您将在构建历史记录中看到成功的作业结果。 JenkinsServer” “AnsibleServer” “立即构建” 此外,请花点时间访问您的 Dockerhub 帐户并验证新映像现在是否可见。 您应该会看到新添加的图像。此结果确认您的包含 Docker 任务的 Ansible playbook 已成功集成到管道中。 [模块7]:Kubernetes 现在让我们在 EC2 实例上配置 K8s。您将创建一个新的 EC2 实例并安装其 kubectl 命令行工具以进一步与 集群交互。 Kubernetes 步骤 1:启动 AWS EC2 虚拟服务器实例 使用本教程“ 部分中的说明来完成此步骤。 启动 AWS EC2 虚拟服务器实例” 不要忘记添加安全组设置。它允许 和 分别在端口 和 上工作。 所有工具 SSH 8080 22 使用名称 来区分您的 EC2 虚拟服务器实例。 “K8sServer” 您可以为新的 EC2 实例重复使用 安全组和 。 “K8sServer” “CI_CD_Pipeline” “CI_CD_Pipeline_Key_Pair” 步骤 2:连接到 AWS EC2 虚拟服务器实例 单击“连接”按钮。 现在您可以看到 EC2 Virtual Server 实例在线终端。 步骤 3:更改“KubernetesServer”AWS EC2 虚拟服务器实例的主机名 当您想要在 EC2 虚拟服务器实例上配置 KuberenetesServer 时,您需要做的第一件事是更改其主机名。 我们开始做吧。执行此命令打开主机名文件: sudo vi /etc/hostname 你应该看到这样的东西。 将此主机名替换为 然后重新启动它。 “kubernetes-server”, sudo init 6 您的主机名将被更改。 步骤 4:检查 AWS CLI 版本 使用此命令检查 版本。 AWS aws --version 这样您就可以看到当前的 aws-cli 版本。 如果您可以看到版本 ,则应该下载最新版本。 aws-cli/1.18 步骤 5:更新 AWS CLI 现在,当您发现 EC2 实例上有旧的 aws-cli 版本时,您需要更新它。为此,请转至 AWS → 文档 → AWS 命令行界面 → 第 2 版用户指南。 复制粘贴 。 curl命令 首先,执行此命令下载 awscli 版本 2。 curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" 等待下载过程开始。 你应该看到这样的东西。 其次,您需要执行此命令来解压缩 awscli 版本 2 存档。 unzip awscliv2.zip 第三,您应该执行此命令来安装 awscli 版本 2。 sudo ./aws/install 然后,重新加载 Kubernetes EC2 Virtual Server 实例在线终端。 接下来,使用此命令检查AWS版本 aws --version 您可以看到 aws cli 有 aws-cli/2。 第6步:安装kubectl 是一个基本的命令行工具,用于与任何 Kubernetes 集群交互,无论底层基础设施如何。它允许您在 Kubernetes 集群中管理资源、部署应用程序、配置网络、访问日志以及执行各种其他任务。 Kubectl 现在您需要安装 kubectl 命令行工具以进一步与 Kubernetes 集群交互。为此,您需要转到 → → → → 或 → 。 AWS 文档 Amazon EKS 用户 指南 安装 更新 kubectl Linux 或者只需单击链接 。 https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html 首先,执行此命令下载 kubectl。 curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2023-04-19/bin/linux/amd64/kubectl 等待下载过程。 你会看到类似这样的东西。 授予 kubectl 权限。 chmod +x kubectl 将 kubectl 移动到 /usr/local/bin 文件夹。 sudo mv kubectl /usr/local/bin 检查 kubectl 的版本。 kubectl version --output=yaml 第7步:安装eksctl 是另一个专门为 Amazon EKS 服务定制的命令行工具。 Eksctl 可用于创建 AWS EKS 集群、管理节点组以及执行特定于 EKS 的任务,例如通过抽象出大部分 AWS 基础设施设置和管理来与 IAM 角色和其他 AWS 服务集成。 Eksctl 执行命令下载kubectl。 curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp 将 eksctl 移动到 /usr/local/bin 文件夹。 sudo mv /tmp/eksctl /usr/local/bin 检查 eksctl 的版本。 eksctl version 你应该看到版本 步骤 8:为 eksctl 创建 IAM 角色 您需要创建一个 IAM 角色并将其附加到您的 EC2 实例。 “KubernetesServer” 为此,您需要在搜索框中找到 EC2。 单击链接 选择 EC2 虚拟服务器。 https://us-east-1.console.aws.amazon.com/ec2/ 转到 → 。 IAM 仪表板 角色 单击 角色网页上的 按钮。 IAM “创建角色” 然后选择 然后单击 按钮。 “AWS服务”、“EC2”。 “下一步” 然后,在搜索框中找到 、 、 、 ,然后单击 按钮。 “AmazonEC2FullAccess” “AmazonEC2FullAccess” “IAMFullAccess” “AWSCloudFormationFullAccess” “添加权限” 然后单击 按钮。 “下一步” 然后在 输入中输入 。 “角色名称” “Eksctl_Role” 然后单击 按钮。 “创建角色” 角色最终创建完成。 步骤 9:将 IAM 角色与 eksctl 连接 转到 AWS EC2 实例网页。选择 然后单击 → → “KuberbetesServer”。 “操作” “安全” “修改 IAM 角色”。 选择 ,然后单击 按钮。 “Eksctl_Role” “更新 IAM 角色” 现在您的 IAM 角色已与 和 eksctl 工具连接。 “EKS_Server” 步骤10:创建eksctl集群 集群是 AWS 上的托管 Kubernetes 环境,可自动执行复杂的基础设施任务,例如设置、扩展和维护。它至关重要,因为它提供了一个高效、安全且经过 AWS 优化的平台,用于部署、管理和扩展容器化应用程序、简化操作并使开发人员能够专注于编码而不是管理底层基础设施。 Amazon EKS(弹性 Kubernetes 服务) 现在,是时候设置您的 EKS 集群了。 为此,请按照下列步骤操作: 使用您的具体信息修改以下命令。 eksctl create cluster --name cluster-name \ --region region-name \ --node-type instance-type \ --nodes-min 2 \ --nodes-max 2 \ --zones <AZ-1>,<AZ-2> 例如,就我而言,它看起来像这样。 eksctl create cluster --name zufarexplainedit \ --region eu-north-1 \ --node-type t3.micro 执行修改后的命令,耐心等待集群创建过程完成。您会注意到,EKS 集群状态在 AWS CloudFormation 网页上指示为 。 “正在创建” 集群创建过程通常需要大约 20 分钟。完成后,终端将显示该过程的结果。 此外,您可以在 AWS CloudFormation 网页上验证 创建成功的状态。 EKS 集群 步骤11:创建Kubernetes部署yaml文件 是以 YAML 格式编写的配置脚本,定义如何管理和维护 Kubernetes 集群中的特定应用程序或服务。它封装了用于编排运行应用程序的容器的部署、扩展、更新和监视的指令。该文件包含容器映像、所需副本数量、资源限制、环境变量、网络设置等详细信息。当应用于 Kubernetes 集群时,部署 YAML 文件可确保应用程序的所需状态,自动管理容器的创建、扩展和恢复,以维持所需的可用性和可靠性级别。 Kubernetes 部署 YAML 文件 现在,随着 Kubernetes 集群、eksctl、kubectl 的安装和配置,您可以创建 Kubernetes 部署 yaml 文件。 您可以通过执行以下命令来做到这一点。 touch hello-app-deployment.yaml 然后,通过执行以下命令编辑该文件。 vi hello-app-deployment.yaml 将此内容添加到 hello-app-deployment.yaml。 apiVersion: apps/v1 kind: Deployment metadata: name: zufarexplainedit-hello-app labels: app: hello-app spec: replicas: 2 selector: matchLabels: app: hello-app template: metadata: labels: app: hello-app spec: containers: - name: hello-app image: zufarexplainedit/hello imagePullPolicy: Always ports: - containerPort: 8080 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1 现在 hello-app-deployment.yaml 已创建并可供使用。 第12步:创建Kubernetes服务yaml文件 是以 YAML 格式编写的配置脚本,它定义一组 Pod 的网络抽象,允许在 Kubernetes 集群内一致地访问它们。该文件概述了其他服务或外部客户端应如何发现、访问和平衡该服务的负载。它包括服务类型(ClusterIP、NodePort、LoadBalancer)、端口号、用于识别 pod 的选择器等规范。当应用于 Kubernetes 集群时,服务 YAML 文件会创建一个虚拟 IP 和端口,将流量路由到适当的 Pod,抽象底层 Pod 更改并提供稳定的通信端点,从而实现无缝连接和动态扩展。 Kubernetes 服务 YAML 文件 当 Kubernetes 集群、eksctl、kubectl 安装并配置完成后,您可以创建 Kubernetes Service yaml 文件。 为此,您需要通过执行以下命令来创建 Kubernetes 服务 yaml 文件。 touch hello-app-service.yaml 然后,通过执行以下命令编辑该文件。 vi hello-app-service.yaml 将此内容添加到 hello-app-deployment.yaml。 apiVersion: v1 kind: Service metadata: name: zufarexplainedit-hello-app-service labels: app: hello-app spec: selector: app: hello-app ports: - port: 8080 targetPort: 8080 type: LoadBalancer 现在 hello-app-service.yaml 已创建并可供使用。 步骤13:使用kubectl测试Kubernetes集群 成功安装和配置 Kubernetes EKS 集群,并准备好 Kubernetes 服务和部署文件后,就可以使用 kubectl 命令进行测试了。 应用部署。 使用以下命令应用部署配置。 kubectl apply -f hello-app-deployment.yaml 这将创建具有指定数量的副本和滚动更新策略的部署,确保应用程序的可用性和可管理性。 2. 申请服务。 接下来,应用服务配置。 kubectl apply -f hello-app-service.yaml 这将设置一个 LoadBalancer 类型的服务,将您的应用程序公开到互联网。 请注意,配置 LoadBalancer 并获取外部 IP 地址可能需要一段时间。 检查负载均衡器状态。 监控您的服务使用状态。 kubectl get service zufarexplainedit-hello-app-service 分配外部 IP 后,您就几乎准备好访问您的应用程序了。 访问您的应用程序。 使用 Web 浏览器输入分配的外部 IP 地址,后跟:8080。片刻之后,页面将加载,并显示“HelloWorld”消息。请记住,初始加载可能需要几秒钟。 使用 kubectl 命令进行清理 当您需要清理 Kubernetes 环境中的资源时,可以使用以下 kubectl 命令来有效删除部署、Pod 和服务。 。 1. 删除所有部署 要删除所有部署,可以使用以下命令。 kubectl delete deployments --all 此操作可确保集群中不留下任何活动的部署实例。 。 2. 删除所有 Pod 如果需要删除所有 Pod,无论它们是否由部署管理,都可以使用以下命令。 kubectl delete pods --all 清除 Pod 可以帮助重置集群状态或为新部署做好准备。 。 3.删除所有服务 要清理将应用程序暴露给网络的服务,您可以使用以下命令。 kubectl delete services --all 删除服务可能会导致停机,因此在继续操作之前请考虑其影响。 删除 Amazon EKS 集群 要删除与使用 创建的指定 Amazon EKS 集群关联的所有资源(包括工作线程节点、网络组件和其他资源),您可以使用以下命令。 eksctl eksctl delete cluster --name {your cluster name} --region {your region name} 对我来说是的。 eksctl delete cluster --name zufarexplainedit --region eu-north-1 确保您确定要停止集群,因为此操作是不可逆的,并且会导致数据丢失。 步骤 14:在“KubernetesServer”AWS EC2 虚拟服务器实例中添加并配置新用户 现在,让我们向 AWS EC2 虚拟服务器实例添加一个新的 用户。 “KubernetesServer” ansible-admin 为此,请使用此命令。 sudo useradd ansible-admin 然后,设置 用户的密码。 ansible-admin sudo passwd ansible-admin 此外,您需要通过编辑 文件来配置用户权限。 sudoers sudo visudo 将 添加到此 文件中。 “ansible-admin ALL=(ALL) ALL” sudoers 另外,您需要编辑 文件以启用密码身份验证。 /etc/ssh/sshd_config sudo vi /etc/ssh/sshd_config 然后您需要重新加载服务来进行这些更改。 sudo service sshd reload 执行此命令的结果是,您将看到: 现在,您可以使用此命令来避免为所有其他命令添加 sudo。 sudo su - ansible-admin 步骤 15:在 AWS EC2 虚拟服务器实例中生成密钥 您计划在本文中进一步管理远程服务器,例如 EC2 虚拟服务器实例。这就是为什么您需要设置 SSH 密钥。 K8s ssh-keygen 执行此命令的结果是,您将看到: 现在 SSH 密钥已生成并可供使用。 对 localhost 的无密码 SSH 身份验证 步骤 16:为 Ansible 配置 Ansible 旨在自动执行远程服务器上的任务。无密码 SSH 身份验证使 Ansible 能够连接到这些服务器,而无需手动输入密码。 执行此命令,使用 ansible-admin 用户的 SSH 密钥创建从您的计算机到另一台计算机(例如 IP 地址 172.31.34.41 的计算机)的安全连接。 sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address} 就我而言,它看起来像这样。 sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub ansible-admin@172.31.34.41 现在您可以看到 。表示无密码SSH认证安装成功完成。 “添加的密钥数量:1” 步骤 17:在 AnsibleServer EC2 实例中配置 Ansible 主机 当您运行 Ansible playbook 时,您可以指定它应该运行的主机。在此步骤中,您需要指定 KubernetesServer EC2 实例主机。为此,您需要重复在“ [模块 6]:Ansible”中传递的相同步骤。 我们通过执行以下命令来查找 KubernetesServer EC2 实例主机。 sudo ifconfig 找到 KubernetesServer EC2 实例主机后,可以通过执行以下命令将其添加到 Ansible 主机文件中。 sudo vi /etc/ansible/hosts 您还可以添加“[kubernetes]”作为参考 第 18 步:为 Kubernetes 任务创建新的 Ansible playbook 现在 Kubernetes 已全部设置完毕,可以开始使用了,您可以为您的管道制作一个包含 Kubernetes 任务的新 Ansible playbook。该剧本将让 Ansible 使用 kubectl 命令在 Kubernetes 集群上运行您的应用程序。 您可以这样做: 首先创建一个新的 Ansible playbook 文件。只需使用这个命令即可。 touch kubernetes-hello-app.yml 然后,编辑新制作的 文件。使用此命令打开它进行编辑。 hello-app.yml vi kubernetes-hello-app.yml 在文件中,输入以下内容: --- - hosts: kubernetes tasks: - name: deploy regapp on kubernetes command: kubectl apply -f hello-app-deployment.yaml - name: create service for regapp command: kubectl apply -f hello-app-service.yaml - name: update deployment with new pods if image updated in docker hub command: kubectl rollout restart deployment.apps/zufarexplainedit-hello-app 用于 Kubernetes 任务的 Ansible playbook 已可供使用。 步骤 19:将 Kubernetes 任务的新 Ansible playbook 与 Jenkins 集成 现在 Kubernetes、Ansible 和用于 Kubernetes 任务的 Ansible playbook 均已设置完毕并可以运行,您可以将其与 Jenkins 集成。 转到 JenkinsServer → Jenkins 仪表板 → 新项目。 创建名为“CD-Job”的新 Jenkins Freestyle 项目。 单击“确定”按钮。 转到“构建后操作”部分。 单击“添加构建后操作”按钮。 选择“通过 SSH 发送构建工件”选项。 选择“AnsibleServer”作为 SSH 服务器。 将此命令添加到“exec command”输入中。 sudo -u ansible-admin ansible-playbook /opt/docker/kubernetes-hello-app.yml 单击“应用”和“保存”按钮。 转到 Jenkins 仪表板→“CI_CD_Pipeline”→配置→“构建后操作”部分。 单击“添加构建后操作”按钮。 选择“构建其他项目”选项。 转到“构建其他项目”部分。 选择“仅在构建稳定时触发”选项。 将“CD-Job”添加到“要构建的项目”输入中。 单击“应用”和“保存”按钮。 现在您可以认为管道已经完全完成并且可以使用了。 第 20 步:测试最终管道版本 现在是测试最终管道版本的时候了。 导航到 Jenkins → Jenkins 仪表板 →“CI_CD_Pipeline”。 单击“立即构建”按钮。 要查看结果,请查看构建控制台日志。 您会注意到构建控制台日志中触发了“CD-Job”,并且最终状态标记为“成功”。 4 此外,您可以前往 Dockerhub 确认新 Docker 镜像的添加。 最后,您可以使用网络浏览器访问您的应用程序。输入分配的外部 IP 地址,后跟“:8080”。片刻之后,页面将加载,显示“HelloWorld”消息。 结论 这个现代 CI/CD 管道的设置非常好! 你做得非常出色,你是一个真正的英雄! 感谢您的一切努力! 关于作者 是一位经验丰富的高级软件工程师,热衷于设计现代软件系统。 Zufar Sunagatov 为 Citi(伦敦)、MTS(莫斯科)等公司使用 Java、Kotlin、AWS、Docker 和 Kubernetes 开发高性能分布式系统( )。 您可以关注 Zufar 的 LinkedIn 个人资料以获取更多信息 从头开始创立了 Ice Latte,一个开源在线市场(您可以加入 Zufar 的团队并在 GitHub 上为他的项目做出贡献:https: )。 //github.com/Sunagatov/Online-Store 建立了 ZufarExplainedIT 社区,与他人分享他的知识和经验(您可以关注 Zufar 的 IT Telegram 社区: )。 https://t.me/zufarexplained 在ADPlist上辅导超过3000分钟并进行了60场课程,培养有抱负的人才( )。 您可以在ADPlist上得到Zufar的辅导 作为会议和 IT YouTube 频道的演讲者,吸引观众参与,分享宝贵的见解(他的 YouTube 视频示例包括: 、 )。 “Тестовое собеседование Java разработчика #27 - Зуфар Сунагатов” “有抱负的演讲者午餐时间闪电演讲 5 月 28 日” 撰写了非常受欢迎的 IT 文章,每篇浏览量超过 7000 次(他的文章示例包括: 、 )。 “微服务架构模式第 1 部分:分解模式” “Что значит «вариативный»? Объясняем простыми словами”