借助 Terraform 功能协调部署 CI/CD 流水线-Part2

在第一部分的文章中,我们介绍了3个步骤,完成了教程的基础配置:

 

  • 使用 Terraform 创建 AWS EKS Infra
  • 在 EKS 集群上部署 ArgoCD 及其依赖项
  • 设置 Bitbucket Pipeline并部署到 ECR Repo

 

本文将继续完成剩余的步骤,以实现 Terraform 编排部署 CI/CD 流水线。

 

为 ArgoCD 持续部署设置 GitOps 仓库

我们需要 ArgoCD 用于持续部署的另一个 repo,就需要再创建一个。

 

在这里,我们可以使用 ArgoCD GitOps 文件夹中的示例文件,比如 Analytics Node 文件。

 

image.png

 

将所有文件和文件夹原样复制到您刚刚创建的 ArgoCD GitOps repo 中。请确保使用与示例 repo 中相同的文件夹结构。

 

示例 repo URL: https://github.com/dcgmechanics/EKS-TF-Bitbucket-Pipeline-ArgoCD-GitOps/tree/main/ArgoCD%20GitOps/Analytics%20Node

 

例如,请看下面的 repo 文件:

 

image.png

 

在这里,我更改了所需的名称、值和详细信息,如 Image URL 和容器端口。您可以根据自己应用程序的需要添加或删除值。

 

现在,让我们将样本 repo 中的所有文件添加到 ArgoCD GitOps repo 中。

 

deployments/app.yaml中,我们需要确保写入与 ArgoCD GitOps Repo 相同的 Repo URL 和分支,下面是一个示例。

 

image.png

 

repoURL 包含 ArgoCD GitOps 仓库的 URL。示例这里使用的是 SSH URL,利用 SSH Key 将该 repo 连接到 ArgoCD。您也可以使用 HTTPS。

 

targetRevision 中,我们需要说明 GitOps 操作将在哪个分支触发,因为下列部署的是单个应用程序,所以将使用 master 分支,但如果您有多个应用程序,并希望使用 GitOps 部署所有应用程序,则可以使用单个 repo 和多个分支,其中每个分支都包含不同的应用程序配置和部署 YAML。

 

image.png

 

image.png

 

image.png

 

我们准备就绪。现在,我们需要将应用程序部署到步骤 2 中启动的 ArgoCD 应用程序中。

 

为此,我们首先需要将 ArgoCD-GitOps Repo 连接到 ArgoCD。请进入 ArgoCD 应用程序,点击 Setting

 

image.png

 

点击 Repositories,然后点击Connect Repo,填写 ArgoCD-GitOps Repo 的详细信息。

 

image.png

 

您也可以使用 HTTPS。但请记住,使用 SSH 时,您需要使用 linux 上的 ssh-keygen 命令创建私钥和公钥。

 

image.png

 

这里的 id_rsa 是私钥,id_rsa.pub 是公钥。公钥将添加到 Repo 访问密钥之上。

 

image.png

 

私钥将添加到 ArgoCD App connect repo 选项中。

 

image.png

 

希望您能按指示操作。完成后,点击连接按钮。它会将 ArgoCD-GitOps repo 连接到 ArgoCD,并显示成功,如下图所示。

 

image.png

 

现在,我们终于可以将应用程序部署到 ArgoCD 上了

 

要知道,ArgoCD 的初始部署不会自动进行,我们必须先启动它。

 

为此,我们先在电脑上克隆 ArgoCD-GitOps repo,然后转到 deployments 文件夹,就可以将部署应用到 ArgoCD 上了。

 

但在此之前,建议先创建 A 记录,并在 argocd-gitops/deployments/backend-nodejs-app-ingress.yaml 文件中指定域名。

 

您也可以选择您的 DNS 托管在的地方,godaddy 或 namecheap 或其他地方。

 

DNS 记录将指向我们在步骤 2 中创建的同一个网络负载平衡器。具体如下:

 

image.png

 

完成上述操作后,我们就可以使用 kubectl 命令部署应用程序了。

 

$ kubectl apply -f app.yaml.

 

image.png

 

之后,您就可以在 ArgoCD 控制台中看到应用程序了。

 

image.png

 

它显示的是健康的,我们看看能不能通过URL访问这个应用。

 

image.png

 

这说明它完全正常,我们就可以进行最后一步了。

 

使用 Bitbucket Pipeline 设置 CI/CD 并启用自动更改

为此,我们需要将 ArgoCD-GitOps repo 与 NodeJS 示例应用程序 repo 进行验证。这样,示例 NodeJS 应用程序就能在 ArgoCD-GitOps repo 中进行更改,由于 ArgoCD 应用程序与 repo 保持同步,它将自动获取新更改并部署到其中。在本演示中,我们将更新 deployments/kustomization.yaml 文件的 newTag 值。

 

为此,我们需要创建 ArgoCD-GitOps 访问令牌,NodeJS Repo 将使用它来更改 kustomization.yaml 文件中的值。

 

转到 Settings > Access Tokens > Create Repository Access Token

 

image.png

 

授予写入权限,以便 Bitbucket Pipeline 能将值写入其中。点击 Create 后,您会看到如下界面:

 

Screen Shot 2024-03-08 at 2.17.37 pm.png

 

在这个窗口中,我们只需要第一部分和最后一部分,第一部分是 Auth Token,最后一部分是 Email ID。

 

因此,让我们将 Auth 令牌复制并粘贴到 NodeJS 应用程序存储库变量中去。

 

image.png

 

完成后,让我们转到 NodeJS 应用程序的 Bitbucket Pielines 部分,修改 bitbucket-pipelines.yml 文件。

 

您可以从我最初分享的 GitHub Repo 中复制 CD(又称持续交付/部署)步骤。

 

image.png

 

在第 23 行,您需要用 ArgoCD-GitOps repo URL 更新 repo URL。

 

在第 28 行,用创建 ArgoCD-GitOps Repo 访问令牌时获得的值更改用户电子邮件。

 

另外,在第 21 行,设置了手动部署触发器:

 

image.png

 

您可以移除它,在没有外部干扰的情况下持续使用 CI/CD,但不建议在生产部署中这样做。

 

保存更改后,流水线将自动运行,让我们等待 CI 和 CD 两个步骤完成。

 

image.png

 

正如你所看到的,kustomization.yaml 文件的 newTag 值应更改为 5,因此让我们去 ArgoCD-GitOps repo 检查一下提交情况。

 

image.png

 

此时 bot 已经更改了值,让我们转到 ArgoCD 控制台,看看新版本是否已经部署。

 

仅供参考,一旦检测到版本更改,ArgoCD 通常需要 2-5 分钟来更新部署

 

经过检查,我们可以清楚地看到新版本已经部署。

 

image.png

 

我们可以通过点击 pod 并检查镜像标签(如下所示)来确认修订:

 

image.png

 

我们可以看到,“5”号目前正在运行,网站也运行得很好。

 

最终,我们在 AWS EKS (Terraform) 上使用 Bitbucket Pipeline 完成了端到端的 ArgoCD GitOps。

 

此外,不要忘记删除在 EKS 或 AWS 中创建的所有资源,可以使用 kubectl命令删除我们在外部创建的所有命名空间,如 argocdnode js 应用程序的 nodejs-app,然后运行 terraform destroy 删除所有内容。

 

image.png

希望这能帮助您部署 CI/CD 应用程序部署环境。在这个软件仓库中,有多个应用程序及其 ArgoCD 部署代码,它们肯定会在多个使用场景中为你们提供帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/736942.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows下pytorch的dataloader多进程(num_workers)问题,为何num_workers的值只能为0?

问题背景介绍 本人是windows系统,在使用torch.utils.data.Dataloader加载torchvision中的数据集时,将其中的形参num_workers设置为了大于0的数,然后出现以下错误。 原因 在 Windows 系统下,num_workers 参数在使用 PyTorch 的 t…

做58代运营到底有没有效果?

58同城代运营有没有效果,其实还是取决于你的产品、预算和想要达到的效果。比如,你是希望通过代运营做出品牌效应,还是希望提升销量?代运营能够带来的效果,主要是咨询和品牌推广,这两个都可以量化&#xff0…

解决Iterm2升级后遇到“Stashed changes“的问题

<<<<<<< Updated upstream ...... >>>>>>> Stashed changes冲突标记符的代码如题,最近有升级Item2…

终于搞懂lSTM的原理了

LSTM简介 一个目前很火的特殊的RNN结构, 有效解决了RNN的梯度爆炸和长序列记忆问题 优势 LSTM 通过引入遗忘门、输入门、输出门, 来实现对特殊特征的记忆和遗忘,来达到更好的对序列数据的处理和记忆效果。 原理图: 总结公式…

校园小情书微信小程序源码 | 社区小程序前后端开源 | 校园表白墙交友小程序

项目描述: 校园小情书微信小程序源码 | 社区小程序前后端开源 | 校园表白墙交友小程序 功能介绍: 表白墙 卖舍友 步数旅行 步数排行榜 情侣脸 漫画脸 个人主页 私信 站内消息 今日话题 评论点赞收藏 服务器环境要求:PHP7.0 MySQL5.7 效果…

Java设计模式-策略模式

策略模式1 概述2 结构3 案例实现4 优缺点5 使用场景6 JDK源码解析 策略模式 1 概述 先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 作为一个程序猿,开发需要选择一款开发工具&#x…

CircuitBreaker断路器(服务熔断,服务降级)

分布式系统面临的问题: 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。 1.服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务&#xff…

PyCharm无代码提示解决

PyCharm无代码提示解决方法 在使用PyCharm工具时,调用方法却无法进行提示,针对PyCharm无代码提示整理下解决方案 1、Python内置语法无智能提示 复现:我这里以urllib库读取网页内容为例,在通过urlopen()之后调用getur…

Tomcat Web 开发项目构建教程

1下载Tomcat安装包,下载链接:Apache Tomcat - Welcome!,我电脑环境为JDK8,所以下载Tomcat9.0 2、下载完压缩包后,解压到指定位置 3.在intelij中新建一个项目 4.选中创建的项目,双击shift,输入add frame...然…

C语言实现贪吃蛇

前言:今天给大家详细介绍一下小游戏贪吃蛇的代码。 目录 一 .贪吃蛇实现的功能 二.贪吃蛇游戏设计与分析 1.贪吃蛇以及贪吃蛇所需要维护的数据 (1)贪吃蛇蛇体 (2)数据维护 2.地图设计 (1&#x…

three.js 按键W前进、S退后、A左转、D右转运动

效果&#xff1a;W 键 前进&#xff1b;S 键后退&#xff1b;A 键左转&#xff1b;D 键右转&#xff1b;使用了 tween.js 动画库&#xff1b; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left">&…

如何利用AWS CloudFront 自定义设置SSL

Amazon CloudFront 提供三种选项&#xff0c;可以加速整个网站并从 CloudFront 的边缘站点通过安全的 HTTPS 方式交付内容。除能够安全地从边缘站点交付内容外&#xff0c;您还可以配置 CDN 来使用针对源提取的 HTTPS 连接&#xff0c;这样您的数据就会实现从源到最终用户的端到…

仿牛客网项目---项目总结

本篇文章是对整个项目的一个总结。下面这张图要好好理解。 整个项目都是构建在SpringBoot之上的&#xff0c;所以把它画到最底下&#xff0c;其它技术依托在springboot之上。但是springboot并不是技术的核心&#xff0c;而只是起到了一个辅助的作用&#xff0c;它的作用仅仅是降…

浅拷贝,简单深拷贝

文章目录 浅拷贝简单深拷贝 浅拷贝 const _shallowClone target > {let copy Array.isArray(target) ? [] : {};for (let key in target) {if (target.hasOwnProperty(key)) {let value target[key];copy[key] value;}}return copy; };在这段代码中&#xff0c;我们定…

docker基本命令(持续更新)

docker基本命令&#xff08;持续更新&#xff09;&#xff1a; 文章目录 docker基本命令&#xff08;持续更新&#xff09;&#xff1a;一、镜像相关二、容器相关&#xff1a;三、dockerfile相关&#xff1a; 注&#xff1a;docker命令需要以root权限使用&#xff08;大概&…

使用Homebrew搭建java环境

Homebrew Homebrew是一款包管理工具,目前支持macOS和linux系统。 默认安装路径为 /usr/local/ 。下载包的安装路径在/usr/local/Cellar/。 #安装 /bin/sh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" #卸载 /bin/sh -c "…

vue之性能优化

1.路由懒加载 所谓路由懒加载&#xff0c;其实就是路由通过import动态引入&#xff0c;而不是在文件最上面一个个全部引入&#xff0c;因为JS执行的时候会优先执行引入的文件&#xff0c;如果一次性引入过多&#xff0c;则会增加处理时长。 2.图片懒加载 图片在网页加载过程…

Matplotlib接口和常用图形--画图接口

文章目录 任务描述编程要求 任务描述 本关任务&#xff1a;掌握matplotlib的基本使用技巧&#xff0c;并能简单使用matplotlib进行可视化。 相关知识 在深入使用matplotlib之前你需要知道几个matplotlib技巧&#xff0c;这些技巧能帮助你更快速掌握matplotlib。 导入matplot…

svg简单教程

推荐查看这个视频 一小时讲完SVG 简介 scalable 英 /ˈskeɪləbl/ 美 /ˈskeɪləbl/ adj. &#xff08;计算机&#xff09; 可扩展的&#xff1b;可改变大小的&#xff0c;可缩放的&#xff1b;可攀登的&#xff1b;可称量的&#xff1b;可去鳞的 vector 英 /ˈvektə/ 美…

lmbench学习

Ubuntu 手册页&#xff1a; lat_proc - 进程创建测试 编译时参考博客&#xff1a;lmbench基本的部署与使用 结果分析&#xff1a;性能测试工具 Lmbench 的使用方法以及解析运行结果