如何用Jenkins、容器和Amazon ECS创建CI/CD管道

697 阅读18分钟

[

Alfonso Valdes Carrales

](medium.com/@ponchovald…)

阿方索-巴尔德斯-卡拉莱斯

关注

6月22日

-

23分钟阅读

[

拯救

](medium.com/m/signin?ac…)

如何使用Jenkins、容器和Amazon ECS创建CI/CD管道

了解部署Nodejs容器化应用样本的逐步过程

图片由作者提供

如果你还在用传统的方式构建和交付你的软件应用程序,那么你就错过了软件开发过程或软件开发生命周期中的一项重大创新。

为了告诉你我在说什么,在这篇文章中,我将分享 "如何用Jenkins、容器和Amazon ECS创建一个CI/CD管道",部署你的应用程序并克服传统软件交付模式的限制。

这种创新极大地影响了最后期限、上市时间、产品质量等。我将带你了解为一个Nodejs应用样本建立CI/CD Docker管道的整个逐步过程。

CI/CD管道(或持续集成持续交付)管道是一套指令,用于自动化软件测试、构建和部署的过程。以下是在你的组织中实施CI/CD的一些好处。

  1. 更小的代码变化
    CI/CD管道允许一次集成一小段代码的能力有助于开发人员在完成过多的工作之前识别任何潜在的问题。
  2. 更快的交付
    使用CI/CD管道可以实现每天多次发布或持续发布。
  3. 可观察性
    在开发过程的每个阶段都有自动化生成大量的日志,有助于了解是否出了问题。
  4. 更容易回滚
    已经部署的代码有可能出现问题。在这种情况下,尽快恢复到以前的工作版本是非常关键的。使用CI/CD管道的最大优势之一是,你可以快速、轻松地回滚到以前的工作版本。
  5. 降低成本
    在重复性工作中实现自动化,可以释放开发人员和操作人员的时间,这些时间可以用在产品研发上。

这些只是拥有CI/CD管道进行构建和部署的几个好处。在这个视频中,你可以继续学习CI/CD的好处,以及为什么你应该首先使用CI/CD。

现在,在我们进行使用Jenkins、容器和Amazon ECS建立CI/CD管道的步骤之前,让我们简单地看看我们将使用哪些工具和技术。

CI/CD Docker工具栈

  1. GitHub
    这是一个基于网络的应用程序或基于云的服务,人们或开发人员在这里使用Git协作、存储和管理他们的应用程序代码。我们将在这里创建并存储我们的Nodejs应用代码样本。
  2. AWS EC2实例
    AWS EC2是由亚马逊网络服务提供的弹性计算机服务,用于在AWS云上创建虚拟机或虚拟实例。我们将创建一个EC2实例,并在其中安装Jenkins和其他依赖项。
  3. Java
    这将是运行Jenkins服务器所需要的。
  4. AWS CLI
    aws-cli即AWS命令行界面是一个命令行工具,用于使用命令管理AWS服务。我们将使用它来管理AWS ECS任务和ECS服务。
  5. Nodejs和Npm
    Nodejs是一个后端JavaScript运行环境,Npm是一个Node的包管理器。我们将为Nodejs应用程序创建一个CI/CD Docker管道。
  6. Docker
    Docker是一个开源的容器化平台,用于开发、运输和运行应用程序。我们将使用它来构建Nodejs应用样本的Docker镜像,并将它们推/拉到AWS ECR中。
  7. Jenkins
    Jenkins是一个开源的、免费的自动化服务器,用于构建、测试和部署软件应用程序。我们将创建我们的CI/CD Docker管道,使用Jenkins在AWS ECS上构建、测试和部署我们的Nodejs应用程序。
  8. AWS ECR
    AWS Elastic Container Registry是一个由AWS完全管理的Docker镜像库,可以轻松存储、共享和部署容器镜像。我们将使用AWS ECR来存储我们的样本Nodejs应用程序的Docker镜像。
  9. AWS ECS
    AWS Elastic Container Service是一个由AWS完全管理的容器协调服务,可以轻松部署、管理和扩展容器化应用程序。我们将使用它来托管我们的样本Nodejs应用程序。

还请阅读。在AWS、Kubernetes和Docker上的CI/CD管道和工作流程

架构

这是我们用Docker设置CI/CD管道后的架构。

在成功建立CI/CD Docker管道后,我们将向GitHub仓库推送提交,反过来,GitHub Webhook将触发Jenkins服务器的CI/CD管道。然后,Jenkins服务器将拉取最新的代码,进行单元测试,构建一个docker镜像,并将其推送到AWS ECR。镜像被推送到AWS ECR后,相同的镜像将由Jenkins部署到AWS ECS。

CI/CD工作流程和阶段

工作流程

CI和CD工作流程使我们能够专注于开发,同时它以自动化的方式进行测试、构建和部署。

  1. 持续集成
    这允许开发人员将代码推送到版本控制系统或源代码管理系统,构建和测试开发人员推送的最新代码,并生成和存储工件。
  2. 持续交付
    这是让我们在需要时将测试过的代码部署到生产中的过程。
  3. 持续部署
    这又进了一步,每次生产管道通过所有测试时,都会在没有任何人工干预的情况下向客户系统发布每一个变化。

各个阶段

自动化CI/CD管道的主要目标是构建最新的代码并进行部署。根据需要,可以有各种阶段。最常见的是下面提到的。

  1. 触发
    当手动执行或自动触发代码库中的特定动作时,CI/CD管道可以在指定的时间表上完成其工作。
  2. 代码拉动
    在这个阶段,只要管道被触发,管道就会拉动最新的代码。
  3. 单元测试
    在这个阶段,管道会执行代码库中存在的测试,这也被称为单元测试。
  4. 构建或打包
    一旦所有测试通过,流水线就会向前推进,构建工件,如果是docker化的应用,则构建docker镜像。
  5. 推送或存储
    在这个阶段,已经构建的代码被推送到工件或Docker仓库(如果是docker化的应用)。
  6. 验收测试
    管道的这一阶段验证了软件的行为是否符合预期。它是一种确保软件或应用程序做它应该做的事的方法。
  7. 部署
    这是任何CI/CD管道的最后阶段。在这个阶段,应用程序已准备好交付或部署。

部署策略

部署策略是一种将微服务的容器拆下并添加的方式。有多种选择。然而,我们将只讨论ECS可用和支持的那些方案

滚动式更新

在滚动更新中,ECS服务中的调度器会用新的任务替换当前运行的任务。ECS集群中的任务只是从任务定义中创建的运行容器。部署配置控制了Amazon ECS从服务中添加或删除的任务数量。

应该运行的任务数量的下限和上限分别由minimumHealthyPercentmaximumPercent 控制。

  1. minimumHealthyPercent 例子。如果 的值是50,所需的任务数是 ,那么调度器可以在启动两个新任务之前停止两个现有任务minimumHealthyPercent 4
  2. maximumPercent 例子。如果 的值是 ,期望的任务是 ,那么调度器可以在停止四个现有任务之前启动四个新任务。maximumPercent 4 4

如果你想了解更多这方面的信息,请访问这里的官方文档。

蓝/绿部署

蓝色/绿色部署策略使开发者能够在向新的部署发送流量之前,通过安装应用程序的更新版本作为新的替换任务集来验证新的部署。

在蓝/绿部署期间,主要有三种流量转移的方式。

  1. 金丝雀--流量以两个增量转移,在第一个增量中转移到你的更新任务集的流量百分比,以及在第二个增量中转移剩余流量前的时间间隔(分钟)。
  2. 线性 - 以相同的增量转移任务,每个增量中转移任务的百分比,以及每个增量之间的分钟数。
  3. 一次性转移 - 所有的traffic都从原来的任务集一次性转移到更新的任务集。

要了解更多信息,请访问这里的官方文档。

在这两种策略中,我们将在我们的演示应用程序中使用滚动更新的部署策略。

Dockerize Node.js应用程序

现在,让我们开始吧,让我们的手变脏。

样本Nodejs应用程序的Docker文件如下。不需要复制粘贴这个文件,它已经在你之前克隆的git样本仓库中存在了。

让我们试着理解我们的Dockerfile的说明。

  1. FROM node:12.18.4-alpine
    这将是我们容器的基础镜像。
  2. WORKDIR /app
    这将被设置为容器中的工作目录。
  3. ENV PATH /app/node_modules/.bin:$PATH
    PATH变量被分配到/app/node_modules/.bin
  4. COPY package.json ./
    Package.json将被复制到容器的工作目录中。
  5. RUN npm install
    安装依赖项。
  6. COPY . ./
    将有依赖关系的文件和文件夹从主机上复制到容器中。
  7. EXPOSE 3000
    允许进入容器的300端口。
  8. CMD [“node”, “./src/server.js”]
    启动应用程序

这是我们要用来创建docker镜像的Docker文件。

设置GitHub仓库

创建一个新的仓库

  1. github.com/,如果你还没有账户,就创建一个账户,否则就登录你的账户,创建一个新的仓库。你可以根据自己的选择来命名它;但是,我建议使用相同的名字,以避免任何混淆。

2.你会看到如下界面,复制仓库的URL并保存好。把这个URL称为GitHub仓库的URL,并在系统中的文本文件中记下来。

注意:在你的系统上创建一个新的文本文件,记下所有以后需要的细节。

创建一个GitHub令牌

这将是认证所需的。它将被用来代替HTTP上的Git密码,或者被用来通过基本认证来认证API。

  1. 点击右上方的用户图标,进入 "设置",然后点击左侧面板上的 "开发者设置 "选项。

2.点击 "个人访问令牌 "选项和 "生成新令牌 "来创建一个新令牌。

3.勾选 "repo "复选框,然后该令牌将拥有 "对私有存储库的完全控制权"

4.你应该看到你的令牌现在已经创建了。

克隆样本库

  1. 检查你现在的工作目录。
    pwd

注意:你是在主目录,即/home/ubuntu。

  1. 克隆我的样本库,包含所有需要的代码。
    git clone [https://github.com/shivalkarrahul/nodejs.git](https://github.com/shivalkarrahul/nodejs.git)
  2. 创建一个新的资源库。这个仓库将被用于CI/CD管道的设置。
    git clone [https://github.com/shivalkarrahul/demo-nodejs-app.git](https://github.com/shivalkarrahul/demo-nodejs-app.git)
  3. 将我的nodejs资源库中的所有代码复制到新创建的demo-nodejs-app资源库中。
    cp -r nodejs/* demo-nodejs-app/
  4. 改变你的工作目录。
    cd demo-nodejs-app/

注意:在文章的其余部分,不要改变你的目录。保持在同一目录下。这里是/home/ubuntu/demo-nodejs-app/,从那里执行所有的命令。

  1. ls -l
  2. git status

推送你的第一次提交到仓库

  1. 检查你现在的工作目录;它应该是相同的。这里是,/home/ubuntu/demo-nodejs-app/。
    pwd
  2. 为你的git提交信息设置一个用户名。
    git config user.name “Rahul”
  3. 为你的git提交信息设置一个电子邮件。
    git config user.email “<[test@email.com](mailto:test@email.com)>”
  4. 验证你设置的用户名和邮箱。
    git config –list
  5. 检查状态,查看已经被修改或添加到你的git仓库的文件。
    git status
  6. 添加文件到git暂存区。
    git add
  7. 检查状态,查看已添加到 git 暂存区的文件。
    git status
  8. 提交您的文件,并附上提交信息。
    git commit -m “My first commit”
  9. 推送提交到你的远程git仓库。
    git push

设置AWS基础设施

创建一个具有程序化访问权限的IAM用户

  1. 在你的AWS账户中创建一个具有编程访问权限的IAM用户,并在文本文件中记下访问密钥和秘密密钥以备将来参考。为该用户提供管理员权限。
    我们不需要管理员权限。然而,为了避免权限问题,并为了演示,让我们以管理员权限进行。

创建一个ECR存储库

  1. 在你的AWS账户中创建一个ECR存储库,并在文本文件中记下它的URL以备将来参考。

创建一个ECR资源库

  1. 在您的AWS账户中创建一个ECR存储库,并在文本文件中记下它的URL以备将来参考。

创建一个ECS集群

  1. 进入ECS控制台,点击 "Get Started "来创建一个集群。

2.点击 "容器定义 "下的 "自定义 "选项中的 "配置 "按钮。

3.给容器指定一个名称为"nodejs-container ,在 "图像 "文本框中指定ECR存储库的URL,在端口映射部分指定 "3000 "端口,然后点击 "更新 "按钮。你可以为容器指定任何你选择的名称。

4.现在你可以看到你在 "容器定义 "下指定的细节。点击 "下一步 "按钮继续。

5.在 "定义你的服务 "下选择 "应用负载平衡器",然后点击 "下一步 "按钮。

6.保持集群名称为 "默认",然后点击 "下一步 "按钮继续。如果你愿意,你可以改变集群名称。

7.7. 审查配置,它应该如下所示。如果配置相符,就点击 "创建 "按钮。这将启动ECS集群的创建。

8.几分钟后,你应该已经创建了ECS集群,启动状态应该如下所示。

创建一个EC2实例来设置Jenkins服务器

  1. 0.0.0.0/0 用Ubuntu 18.04 AMI创建一个EC2实例,在其安全组中为您的IP打开Port 22 ,为Port 8080ssh g\\\\\\\\\\\\\\\\h\8080 需要使用端口 22 来访问 Jenkins 服务器。Port 8080 是 GitHub Webhook 尝试连接 Jenkins 服务器的地方,因此我们需要允许它使用0.0.0.0/0

在 EC2 实例上设置 Jenkins

实例可用后,让我们在上面安装Jenkins服务器和所有的依赖项。

EC2实例的先决条件

  1. 确认操作系统是否为Ubuntu 18.04 LTS
    cat/
  2. 检查内存,我们要求至少有2GB的内存。
    free -m
  3. 你用来登录服务器的用户应该有sudo权限。"ubuntu "是使用 "Ubuntu 18.04 LTS "AMI创建的EC2实例中具有sudo权限的用户。
    whoami
  4. 检查你现在的工作目录,它将是你的主目录。
    pwd

在EC2实例上安装Java、JSON处理器jq、Nodejs/NPM和aws-cli

  1. 通过从所有配置的来源下载软件包信息来更新你的系统。
    sudo apt update
  2. 搜索并安装Java 11
    sudo apt search openjdk
    sudo apt install openjdk-11-jdk
  3. 安装jq命令,即JSON处理器。
    sudo apt install jq
  4. 安装Nodejs 12和NPM
    curl -sL [https://deb.nodesource.com/setup_12.x](https://deb.nodesource.com/setup_12.x) | sudo -E bash – sudo apt install nodejs
  5. 安装AWS CLI工具。
    sudo apt install awscli
  6. 检查Java版本。
    java –version
  7. 检查jq的版本。
    jq –version
  8. 检查Nodejs的版本
    node –version
  9. 检查NPM的版本
    npm –version
  10. 检查AWS CLI的版本
    aws –version

注意:确保你的所有版本与上述图片中看到的版本一致。

在EC2实例上安装Jenkins

  1. 可以从Debian仓库中安装Jenkins
    wget -q -O — [http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key](http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key) | sudo apt-key add -sudo sh -c ‘echo deb [http://pkg.jenkins-ci.org/debian](http://pkg.jenkins-ci.org/debian) binary/ > /etc/apt/sources.list.d/jenkins.list’
  2. 更新apt软件包索引
    sudo apt-get update
  3. 在机器上安装Jenkins
    sudo apt-get install jenkins
  4. 检查服务状态是否正在运行。
    service jenkins status
  5. 你现在应该已经启动并运行你的Jenkins了。如果你在安装过程中遇到任何问题,你可以参考这里的官方文档。

在EC2 Instance上安装Docker

  1. 安装软件包以允许apt通过HTTPS使用存储库。
    sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
  2. 添加Docker的官方GPG密钥。
    curl -fsSL [https://download.docker.com/linux/ubuntu/gpg](https://download.docker.com/linux/ubuntu/gpg) | sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  3. 设置稳定库
    echo “deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] [https://download.docker.com/linux/ubuntu](https://download.docker.com/linux/ubuntu) $(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  4. 更新apt包的索引
    sudo apt-get update
  5. 安装最新版本的Docker引擎和containerd。
    sudo apt-get install docker-ce docker-ce-cli containerd.io
  6. 检查docker的版本。
    docker –version
  7. 创建一个 "docker "组,这可能会退出。
    sudo groupadd docker
  8. 将 "ubuntu "用户添加到 "docker "组中
    sudo usermod -aG docker ubuntu
  9. 将 "jenkins "用户添加到 "docker "组中。
    sudo usermod -aG docker jenkins
  10. 测试你是否可以使用 "ubuntu "用户创建docker对象。
    docker run hello-world
  11. 切换到 "root "用户
    sudo -i
  12. 切换到 "jenkins "用户
    su jenkins
  13. 测试你是否可以使用 "jenkins "用户创建docker对象。
    docker run hello-world
  14. 从 "jenkins "用户退出
    exit
  15. 从 "root "用户退出
    exit
  16. 现在你应该回到 "ubuntu "用户中。如果你在安装过程中遇到任何问题,你可以参考这里的官方文档。

配置Jenkins服务器

  1. Jenkins安装完毕后,第一步是提取其密码。
    sudo cat /var/lib/jenkins/secrets/initialAdminPassword

2.在浏览器中点击URL
Jenkins URL: http://<public-ip-of-the-ec2-instace>:8080

3.选择 "安装建议的插件 "选项

4.为将要创建的新管理用户指定用户名和密码。你可以把这个用户作为一个管理用户使用。

5.这个URL字段将被自动填入,点击 "保存并完成 "按钮继续。

6.你的Jenkins服务器现在已经准备好了。

7.下面是它的仪表板的样子。

安装插件

  1. 让我们来安装所有我们需要的插件。点击左边面板上的 "管理Jenkins"。

2.下面是我们需要安装的插件的列表

  1. CloudBees AWS Credentials:
    允许在Jenkins Credentials API中存储Amazon IAM凭证、密钥。
  2. Docker Pipeline:
    这个插件允许从Jenkins Pipeline构建、测试和使用Docker镜像。
  3. Amazon ECR:
    这个插件提供了与AWS Elastic Container Registry (ECR)
    使用的集成。
  4. AWS Steps:
    这个插件增加了Jenkins管道步骤,以与AWS API互动。

3.在 "可用 "选项卡中,搜索所有这些插件并点击 "无需重启安装"。

4.插件安装成功后,你会看到如下屏幕。

在Jenkins中创建凭证

  1. CloudBees AWS Credentials插件将在这里发挥作用。进入 "管理Jenkins",然后点击 "管理凭证"。

2.点击"(全局)"。"添加凭证"。

3.选择 "AWS凭证",并提供ID为 "demo-admin-user"。这可以根据你的选择来提供,在文本文件中记下这个ID。指定我们在前面步骤中创建的IAM用户的访问密钥和秘密密钥。

点击 "确定 "来存储IAM凭证。

4.4. 按照同样的步骤,这次选择Kind为 "带密码的用户名 "来存储我们之前创建的GitHub用户名和令牌。

点击 "OK "来存储GitHub凭证。

5.现在你的Jenkins中应该有IAM和GitHub证书了。

创建一个Jenkins任务

  1. 进入主仪表板,点击 "New Item "来创建一个Jenkins Pipeline。

2.2. 选择 "管道",并将其命名为 "demo-job",或提供一个你选择的名称。

3.勾选 "常规 "标签下的 "GitHub项目 "复选框,提供我们之前创建的GitHub存储库的URL。同时,勾选 "Build Trigger "标签下的 "GitHub hook trigger for GitScm polling "复选框。

4.在 "管道 "标签下,选择 "来自SCM的管道脚本 "定义,指定我们的仓库URL,并选择我们为GitHub创建的凭证。检查分支名称,如果它与你将用于提交的分支相匹配。

查看配置,然后点击 "Save "来保存你对管道的修改。

5.现在你可以看到我们刚刚创建的流水线了。

整合GitHub和Jenkins

下一步是把GitHub和Jenkins整合起来,这样只要GitHub仓库有事件发生,就可以触发Jenkins作业。

  1. 进入仓库的设置标签,点击左侧面板的 "Webhooks"。你可以看到 "Add webhook "按钮,点击它来创建一个webhook。

2.2. 提供Jenkins的URL,上下文为"/github-webhook/"。该URL将看起来如下。

Webhook URL: http://:8080/github-webhook/
你可以选择你的事件。然而,为了简单起见,我选择了 "向我发送一切"。

确保 "活动 "复选框被选中。

点击 "Add webhook",创建一个webhook,只要GitHub仓库中出现任何类型的事件,就会触发Jenkins作业。

3.你应该看到你的网络钩子。点击它,看看它是否被正确配置了。

4.4. 点击 "最近交付 "标签,你应该看到一个绿色的勾号。绿色勾号表明webhook已经能够连接到Jenkins服务器。

将Nodejs应用部署到ECS集群上

在我们从GitHub Webhook触发管道之前。让我们试着手动执行它。

手动构建作业

  1. 转到我们创建的作业并建立它。

2.如果你看到它的日志,你会发现它失败了。原因是,我们还没有给我们的Jenkinsfile中的变量赋值。

推送你的第二次提交

提醒一下。在文章的其余部分,不要改变你的目录。保持在同一目录下,即/home/ubuntu/demo-nodejs-app,并从这里执行所有的命令。

为Jenkinsfile中的变量赋值

  1. 为了克服上述错误,你需要对Jenkinsfile做一些修改。我们在该文件中有一些变量,我们需要为这些变量赋值,以便将我们的应用程序部署到我们创建的ECS集群上。给带有 "CHANGE_ME "的变量分配正确的值。
    cat Jenkinsfile

2.这里是变量的列表,以方便你使用。
我们在Jenkinsfile里有以下变量。

  1. AWS_ACCOUNT_ID=”CHANGE_ME”
    在这里指定你的AWS账号。
  2. AWS_DEFAULT_REGION=”CHANGE_ME”
    指定您创建ECS集群的区域
  3. CLUSTER_NAME=”CHANGE_ME”
    指定您创建的ECS集群的名称。
  4. SERVICE_NAME=”CHANGE_ME”
    指定在ECS集群中创建的服务名称。
  5. TASK_DEFINITION_NAME=”CHANGE_ME”
    指定在ECS集群中创建的任务名称。
  6. DESIRED_COUNT=”CHANGE_ME”
    指定你想在ECS集群中创建的任务数量。
  7. IMAGE_REPO_NAME=”CHANGE_ME”
    指定ECR存储库的URL
  8. IMAGE_TAG=”${env.BUILD_ID}”
    不要改变这个。
  9. REPOSITORY_URI = “${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${IMAGE_REPO_NAME}”
    不要改变这一点。
  10. registryCredential = “CHANGE_ME”
    指定您在Jenkins中创建的用于存储AWS访问密钥和秘密密钥的凭证的名称

3.检查状态以确认文件已被更改。
git status
cat Jenkinsfile

4.将文件添加到git暂存区,提交,然后推送到远程GitHub仓库。
git status
git add Jenkinsfile
git commit -m “Assigned environment specific values in Jenkinsfile”
git push

Jenkins服务器上的错误

推送提交后,Jenkins管道会被触发。

然而,你会在Jenkins作业中看到一个错误 "Got permission denied while trying to connect to the Docker daemon socket at unix://var/run/docker.sock" 。

其原因是Jenkins Job使用的 "jenkins "用户不允许创建docker对象。为了给 "jenkins "用户提供权限,我们在上一步将其加入 "docker "组。然而,之后我们并没有重启Jenkins服务。

我特意保留了这一点,以便向你展示将 "jenkins "用户添加到EC2实例的 "docker "组中的必要性。

现在你知道需要做什么来克服上述错误了。

  1. 重新启动Jenkins服务。
    sudo service jenkins restart
  2. 检查Jenkins服务是否已经启动。
    sudo service jenkins status

推送你的第三次提交

  1. 在README.md中做一些修改,提交、推送并测试管道是否被自动触发。
    vim README.md
  2. 添加、提交并推送该文件。
    git status
    git diff README.md
    git add README.md
    git commit -m "修改了README.md,以便在重启Jenkins服务后触发Jenkins作业"
    git push

3.这次你可以观察到作业一定是被自动触发了。转到Jenkins作业并验证相同的情况。

4.这就是阶段视图的样子。它显示了我们在Jenkins文件中指定的阶段。

检查ECS集群中的任务状态

  1. 进入集群,点击 "任务 "标签,然后打开运行中的 "任务"。

2.点击 "JSON "标签并验证图像,图像标签应该与Jenkins的Build编号相匹配。在这种情况下,它是 "6",它与我的Jenkins任务构建号相匹配。

3.点击ELB URL,检查Nodejs应用程序是否可用。点击ELB URL后,你应该在浏览器中得到如下信息。

推送你的第四次提交

  1. 打开"rc/server.js 文件,在显示信息中做一些修改,再次测试CI/CD管道。
    vim src/server.js
  2. 检查被修改的文件。在这种情况下,只能看到一个文件被更改。
    git status
  3. 检查你的改变在文件中造成的差异。
    git diff src/server.js
  4. 将你改变的文件添加到git暂存区。
    git add src/server.js
  5. 检查本地仓库的状态。
    git status
  6. 在提交中添加一条信息。
    git commit -m "更新欢迎词"
  7. 推送你的改动到远程仓库。
    git push

8.转到任务,这次你会看到有两个任务在运行。一个是旧版本,一个是新版本。你看到两个任务是因为集群中默认配置的滚动更新部署策略。

注意:你的版本号可能不同。

9.9.等待大约2-3分钟,你应该只有一个任务在运行最新的版本。

10.10.再次点击ELB URL,你应该看到你的变化。在这种情况下,我们改变了显示信息。

祝贺你!你已经有了一个可以工作的Jenkins CI/Retail。你有一个工作的Jenkins CI/CD管道,只要你的源代码有变化,就可以在AWS ECS上部署你的Nodejs容器化应用程序。

清理我们创建的资源

如果你只是为了熟悉CI/CD管道或在你的组织中用于POC目的而尝试建立CI/CD管道,并且不再需要它,那么最好是删除你在进行POC时创建的资源。作为这个CI/CD管道的一部分,我们创建了一些资源。

我们创建了下面的列表来帮助你删除它们。

  1. 删除GitHub存储库
  2. 删除GitHub Token
  3. 删除IAM用户
  4. 删除EC2实例
  5. 删除ECR存储库
  6. 删除ECS集群
  7. 取消任务定义的注册

总结

最后,以下是使用Jenkins在AWS ECS上部署Nodejs样本应用程序所需的CI/CD Docker流水线的总结。

  1. 克隆现有的样本GitHub仓库
  2. 创建一个新的GitHub仓库,并将样本仓库中的代码复制到该仓库。
  3. 创建一个GitHub Token
  4. 创建一个IAM用户
  5. 创建一个ECR存储库
  6. 创建一个ECS集群
  7. 创建一个EC2实例来设置Jenkins服务器
  8. 在EC2实例上安装Java、JSON处理器jq、Nodejs和NPM
  9. 在EC2 Instance上安装Jenkins
  10. 在EC2 Instance上安装Docker
  11. 安装插件
  12. 在Jenkins中创建凭证
  13. 创建一个Jenkins作业
  14. 整合GitHub和Jenkins
  15. 检查部署情况
  16. 清理资源

总结

CI/CD管道是一种自动化软件应用程序的构建、测试和部署的方式。它是任何具有DevOps文化的组织的骨干。它对软件开发有许多好处,并能大大促进你的业务。

在这篇文章中,我们演示了创建Jenkins CI/CD Docker Pipeline的步骤,以便在AWS ECS上部署一个Nodejs容器化应用样本。我们看到GitHub Webhooks如何被用来在每次推送到存储库时触发Jenkins管道,从而将最新的docker镜像部署到AWS ECS。

使用Docker的CI/CD管道对你的组织来说是最好的,可以提高代码质量,并在没有任何人为错误的情况下快速交付软件版本。

我们希望这篇文章能帮助你了解更多关于CI/CD Docker管道的组成部分。

原来的帖子。 https://www.clickittech.com/devops/ci-cd-docker/?utm_source=ci+cd+docker&utm_id=Blogs+medium