在 AWS EC2 Linux 实例上使用 Github 和 Jenkins 设置简单的 CI/CD 管道
在本文中,我们将看到使用 Jenkins 实施简单 CI/CD 管道的步骤。我们将使用示例 Java 代码,并将该代码作为 .war 文件部署到 Apache Tomcat Web 服务器上。我们将使用 Maven 作为构建工具。您可以在我的 Github 存储库 (repo) 上找到示例 Java 代码。在我们继续之前,让我们了解一下我们将在设置 CI/CD 管道时使用的工具和技术的基础知识。
- EC2 实例:EC2 实例是 AWS 云中的虚拟机 (VM)。我们将在 EC2 实例上部署 Apache Tomcat 和 Jenkins。
- Apache Tomcat:Apache Tomcat 是一个开源 Web 服务器。我们将把示例 Java 应用程序作为 .war 文件部署到 Apache Tomcat 中。
- Github:Github 是一个代码托管平台。它基本上是一个版本/源代码控制管理系统。我们会将示例 Java 代码发布到 Github。
- Github Webhook:Github Webhook 用于构建和设置集成。我们将创建一个 webhook,它会在 Github 存储库上发生新提交时触发 Jenkins Job。
- Jenkins:Jenkins 是一个免费的开源自动化工具。我们将在 Jenkins 上编写一个作业,它将构建示例 Java 应用程序代码的 .war 文件并将其部署到 Apache Tomcat 服务器上。
- Maven:Maven 是一种构建自动化工具,主要用于构建 Java 项目。
先决条件
- AWS 帐户(如果没有,请创建)
- 对 Github 有基本的了解。
- 对詹金斯有基本的了解。
- 对 Linux 服务器和命令有基本的了解
我们会怎样做?
- 创建 EC2 实例
- 安装Java
- 安装詹金斯
- 设置 Apache Tomcat
- 创建我的 Github 仓库
- 访问和配置 Jenkins
- 为 .war 部署设置 Jenkins 作业
- 在 Github Repo 上设置 Webhook
- 在每次提交时测试自动构建
创建 VM 或 EC2 实例
要创建 EC2 实例,您可以参考此处提供的文档。
在这里,我在我的 AWS 账户上创建了一个新的 EC2 实例。这个实例上有 Ubuntu 18 操作系统。
您可以看到实例已启动并正在运行。我将使用此实例来安装 Java 或依赖项以及 Apache Tomcat 和 Jenkins。

安装Java
要将 Java 安装到您的 Ubuntu 18 系统上,您可以使用以下命令。以下命令将安装 Java 8。安装后,您甚至可以检查其版本。
sudo apt-get update
sudo apt install openjdk-8-jdk
java -version
安装詹金斯
使用以下命令将 Jenkins 安装到您的实例上。
sudo apt-get update
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins
安装 Jenkins 后,使用以下命令启动它并检查其状态。
sudo systemctl start jenkins #Start Jenkins
service jenkins status #Check Jenkins Status
在下面的屏幕截图中,您可以看到 Jenkins 服务已经启动。此 Jenkins 服务已在端口 8080 上启动。

设置 Apache Tomcat
安装 Apache Tomcat
在我们下载和安装 Apache Tomcat 之前,让我们创建一个目录,我们可以在其中下载 Apache Tomcat 包。
使用以下命令在 /opt 中创建一个目录
cd /opt/
sudo mkdir Innovecture
使用以下命令更改目录的所有权。我们正在将所有权更改为用户 Ubuntu 和组 Ubuntu,以便 Ubuntu 用户可以启动 Apache Tomcat 服务,我们不需要使用 root 或用户或 sudo 权限。
sudo chown -R ubuntu:ubuntu Innovecture
cd Innovecture/
使用以下命令下载并提取 Apache Tomcat。如果您想使用任何其他版本的 Apache Tomcat,您可以下载并解压缩。
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.31/bin/apache-tomcat-9.0.31.tar.gz
tar -zxvf apache-tomcat-9.0.31.tar.gz
cd apache-tomcat-9.0.31/
使用以下命令在 Apache Tomcat 中进行所需的配置。需要完成的配置请参考以下截图。在以下配置中,我们分配了一个用户和密码,可用于登录 Apache Tomcat 的管理器应用程序。记下此用户名和密码,因为稍后我们将需要这些凭据。
配置 Apache Tomcat
vim conf/tomcat-users.xml

请参考以下屏幕截图并确保您的 context.xml 具有相同的配置。
vim webapps/manager/META-INF/context.xml

在 conf 目录下的 server.xml 中更改 Apache Tomcat 运行的端口,即将端口 8080 更改为 8090,因为我们的 Jenkins 服务已经在端口 8080 上运行。
vim conf/server.xml
还要使用服务器的 IP 更改 server.xml 文件中的 localhost 配置,以便可以从 Internet 访问您的服务器。
启动 Apache Tomcat
使用以下命令启动 Apache Tomcat 服务。
bin/startup.sh
在下面的屏幕截图中,您可以看到 Apache Tomcat 服务正在端口 8090 上运行,而 Jenkins 服务正在端口 8080 上运行。要检查您的系统,请使用以下命令。
netstat -tulpn

登录 Tomcat 管理器应用程序
要查看我们是否能够使用我们之前指定的凭据登录到 Apache Tomcat 的管理器应用程序,请点击 Apache Tomcat 的 URL http://IP-of-Apache-Tomcat:8090/manager。系统将提示您使用凭据屏幕,只需输入我们在 conf/tomcat-users.xml 中配置的用户名 tomcat-manager 和密码。
登录成功后会看到如下画面

叉 Github 回购
您可以分叉或克隆我在下面提到的回购协议。此存储库包含示例 Java 代码,您可以使用此代码,或者如果您有自己的存储库,也可以使用它。
回购协议的 URL:https://github.com/shivalkarrahul/Innovecture.git
访问和配置 Jenkins
要访问 Jenkins,请点击 URL http://IP-of-Jenkins:8080。
按照您到达的屏幕解锁 Jenkin 并安装建议的插件
解锁 Jenkin 并安装建议的插件后,您将看到以下屏幕。
您需要输入您需要配置的用户名和密码,然后单击保存并继续进行。

安装 Github Authentication Plugin 无需重启
成功登录后,转到管理 Jenkins > 管理插件。 在 Available 选项卡下搜索 git。 选择“GithubAuthentication”插件并点击安装而不重启。

无需重启即可安装 Maven Integration Plugin
同样的方法,安装maven集成插件,无需重启即可安装

安装 Deploy to container 插件无需重启
要将 .war 文件自动部署到 Apache Tomcat,我们需要一个“部署到容器”插件。按照我们安装 git 和 maven 插件的方式安装“部署到容器”插件。

为 .war 部署设置 Jenkins 作业
现在是创建自由式工作的时候了。转到主仪表板并单击创建作业。选择自由式作业并继续。
在 General 选项卡下添加 Github Repo
在常规选项卡下,选中“Github 项目”复选框并添加源代码仓库的 URL 或您从我的仓库中分叉的仓库的 URL。

源代码管理下添加Github URL
在源代码管理选项卡下,单击“Git”单选按钮并添加存储库 URL,如下所示。由于我的存储库不是私有的而是公开的,因此我不需要添加凭据。

选择 Github 钩子触发器
在“构建触发器”选项卡下选择“GitSCM 轮询的 GitHub 钩子触发器”

添加构建步骤
在构建环境下单击添加构建步骤并选择“调用顶级 Maven 目标”

对于目标,指定清理和打包并保存作业。

测试构建
要测试作业是否能够提取和构建我们的代码,请单击“立即构建”。

添加部署后生成操作
现在我们确定我们的代码正在被拉取和构建,现在我们准备添加一个构建后操作。要添加构建后操作,请单击构建环境下的构建后操作并选择“将战争部署到容器”。

然后添加 tomcat 服务器的 URL 以及凭据。要添加凭据,请单击“添加”并按照您看到的步骤操作并保存作业。

测试手动构建
现在测试我们的作业是否能够在 Apache Tomcat 服务器上拉取、构建和部署代码。单击立即构建以测试我们的工作。

如上图所示,手动构建成功并已部署到 Apache Tomcat 服务器上。
要测试 war 是否真的已部署,请点击 Apache Tomcat http://IP-of-Apache-Tomcat:8090/manager 以访问管理器应用程序。
在这里可以看到web_ex.war文件已经成功部署到Apache Tomcat服务器上。

测试示例 Java 应用程序
要测试 Java 应用程序是否正在运行,请点击 URL http://IP-of-Apache-Tomcat:8090/web_ex。

在 Github Repo 上设置 Webhook
创建网络钩子
要在选项卡上创建 Webhook,请访问让她的网站登录到您的帐户,然后按照下面提到的步骤操作。
转到您的存储库设置,在左侧面板中点击网络挂钩,然后点击“添加网络挂钩”
在有效负载 URL 中添加 http://Jenkins-URL:8080/github-webhook。

您可以选择要触发此 Webhook 的事件,或者如果您希望在每个事件上都触发 Jenkins 作业,则可以选择“向我发送所有内容”,单击更新 Webhook 以保存它。

提交时测试自动构建
现在我们准备测试我们的自动构建工作。
要测试我们的 Jenkins 作业是否在每次提交时从我们的 github 存储库中提取代码,请使用以下命令。
要在本地克隆 repo,我使用了以下命令。如果您有自己的报告,只需将其发送到您的本地系统即可。
git clone https://github.com/shivalkarrahul/Innovecture.git
cd Innovecture/
对存储库进行一些更改,以便我们可以推送它们。在这里,我在本地添加了一个新文件,我将把它推送到我的远程仓库中
touch README.md
要为 git 配置用户名和电子邮件 ID,请使用以下命令。
git config user.name "Rahul Shivalkar"
git config user.email "[email "
要提交并推送您的更改,请使用以下命令
git commit -m "Test Commit"
git push
一旦我们将更改推送到 Github 上的存储库,它就会触发我们在 Github Webhook 中添加的 Jenkins 作业。
您可以在作业的“轮询日志”下看到它,请参阅以下屏幕截图。

如果转到作业的控制台输出,您可以看到作业已成功执行并且 war 已部署到 Apache Tomcat。

重新测试
现在更改代码以测试是否部署了最新代码。我将更改浏览器上显示的消息。
如果您使用自己的报告,请在您的代码中进行必要的更改,在这里我只是更改一个示例 index.jsp 文件,它会在浏览器上打印消息。
vim src/main/webapp/index.jsp
现在让我们看看更改后的代码是否得到反映。
使用以下命令提交您在代码中所做的更改。
git add src/main/webapp/index.jsp
git commit -m "Changed Code to Hello World New!”
git push
点击 Apache Tomcat URL http://IP-of-Apache-Tomcat:8090/web_ex 访问我们的示例应用程序。
您可以看到最新的代码已经构建并部署在 Apache Tomcat 上,这意味着应用程序已成功部署并且管道也已成功触发。
如果您注意到我以前的代码只显示“Hello World!”,现在当我在 index.jsp 中进行更改并提交时,最新的应用程序显示“Hello World New!”。

结论
在本文中,我们看到了创建一个简单的 CI/CD 管道的步骤,该管道可以从 Github 存储库中提取您的代码,并在每次提交时将其部署到 Apache Tomcat 服务器上。我们也看到了在Jenkins中安装Jenkins、Apache Tomcat、Java、Plug-ins的步骤。