借助 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命令删除我们在外部创建的所有命名空间,如 argocd 或 node js 应用程序的 nodejs-app,然后运行 terraform destroy 删除所有内容。

 

image.png

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 的使用方法以及解析运行结果