使用AWS CodeDeploy DevOps工具进行自动部署

在AWS DevOps工具的第2部分中,我们了解了如何使用CodeBuild服务使用Maven构建J2EE项目。

在本教程中,我们将看到如何使用CodeDeploy服务将存储在S3存储桶中的工件WAR文件用于部署到Tomcat应用程序服务器。

AWS CodeDeploy是一种部署服务,可自动将应用程序部署到Amazon EC2 Linux或Windows实例。

本教程还将说明如何将Jenkins与CodeDeploy集成。

先决条件:

  • 在AWS上最好使用免费套餐。
  • 良好和快速的互联网连接。
  • 使用的AWS地区–亚太地区(新加坡)。
  • Amazon Linux或RHEL EC2实例。
  • 在EC2实例上安装了Tomcat。

注意:为了部署内容,CodeDeploy服务不支持AWS CodeCommit存储库。仅支持S3和GitHub。

设置CodeDeploy

AWS CodeDeploy将需要与两个实体一起工作,以访问EC2实例和存储工件(WAR文件)以进行部署的S3存储桶。为了为CodeDeploy服务提供访问这些IAM的权限,将需要设置角色。没有为IAM用户定义IAM角色,但他们只能访问实体。

#1)为CodeDeploy服务创建访问EC2实例的第一个角色

启动IAM,然后单击角色->创建角色。

我是

AWS Service下,单击EC2->选择您的用例-> EC2,然后单击Next->权限。

权限

在策略名称下选择AWSCodeDeployRole,然后单击下一步- >审查。

AWSCodeDeployRole

输入角色名称,然后单击创建角色。

创建角色

最后,编辑此角色的信任关系,以确保可以整体或特定区域/端点访问CodeDeploy服务。

单击角色,然后更新信任关系,如下所示。

信任关系

在策略中,将EC2更改为Codedeploy,然后单击“更新信任策略”。

更新信任政策

2)使用CodeDeploy服务为EC2实例创建第二个角色,以访问S3存储桶。

为此角色重复上述步骤,然后输入以下内容:

  • 转到IAM->角色->创建角色。
  • 在AWS Service下,选择EC2。
  • 在该目录下,再次选择您的用例,然后单击EC2,然后单击按钮下一步- >权限。
  • 在附加权限策略屏幕中,选择AmazonS3ReadOnlyAccess,然后单击按钮下一步- >审阅。
  • 将角色命名为HW-Codedeploy-EC2-S3,然后单击“创建角色”。

这两个角色现在都应该可用。

启动Amazon Linux EC2实例

在本节中,我们现在配置EC2实例。

在配置实例时,请确保在“配置实例详细信息”步骤中选择角色HW-Codedeploy-EC2-S3。另外,确保打开端口8080。

启动Amazon Linux EC2实例

与此同时,我们还需要安装CodeDeploy代理和Tomcat作为应用程序服务器,以用于部署应用程序。

#1)在Amazon Linux实例上安装和配置CodeDeploy代理

CodeDeploy代理有助于部署,必须在将要进行部署的每个实例(环境)中安装。

登录到Linux实例并根据所使用的区域下载代理。在我们的示例中,标识符为ap-southeast-1的是新加坡地区

下载代理的命令将采用以下格式:

wget https://aws-codedeploy-<region-identifier>.s3.amazonaws.com/latest/install
command to download the agent

#2)在EC2实例上安装Tomcat

  • 要安装和运行Tomcat,请按顺序执行以下步骤。
yum install tomcat7 tomcat7-webapps tomcat7-docs-webapp tomcat7-admin-webapps
  • 为应用程序管理器启用tomcat用户。进行如/etc/tomcat7/tomcat-users.xml文件中所示的更改
启用tomcat用户
  • 最后,启动Tomcat服务。
service tomcat7 start
雄猫
  • 启动Tomcat Web应用程序管理器,并使用URL http://<EC2-Instance>:8080/manager 来检查是否工作。
Tomcat Web应用程序管理器

将AWS CodeDeploy与S3集成

如第2部分所述,CodeDeploy仅支持S3和GitHub作为代码存储库,用于部署应用程序的最新版本。由于我们的应用程序WAR文件存储在S3存储桶中,因此我们需要确保维护的格式是ZIP文件。

这意味着WAR文件应该位于ZIP文件中,这是使用CodeDeploy的部署过程所支持的。

  • 还需要在Linux实例上安装AWS CLI(命令行界面)。
  • 在Linux实例中运行以下步骤,以从S3存储桶下载WAR。通常需要在构建机器上完成以下步骤。
set AWS_ACCESS_KEY_ID=<Set the access key of the IAM user>

set AWS_SECRET_ACCESS_KEY=<Set the secret key of the IAM user>

set AWS_DEFAULT_REGION=ap-southeast-1

cd /opt/niranjan

aws s3 cp s3://hwcodebuildbucket/HWJavaWebTarget/target/AWS-HelloWorld-1.0.0.war /opt/niranjan
  • CodeDeploy使用appspec.yml文件,其中包含对EC2实例的部署说明。该文件必须位于下载应用程序WAR文件的文件夹的根目录中。

创建appspec.yml文件和scripts文件夹,如下所示:

创建appspec.yml文件

在部署期间,事件按以下顺序运行。

#1)应用程序停止

#2)安装前

#3)安装(调用文件部分并复制WAR文件)

#4)ApplicationStart

  • 使用的文件夹层次结构是
/opt/niranjan
appspec.yml
AWS-HelloWorld-1.0.0.war
scripts
start_application
stop_application
uninstall_war_file
文件夹层次
  • 脚本内容
stop_application:

curl –user tomcat:tomcat http://ec2-54-169-56-238.ap-southeast-1.compute.amazonaws.com:8080/manager/text/stop?path=/AWS-HelloWorld-1.0.0

start_application:

curl –user tomcat:tomcat http://ec2-54-169-56-238.ap-southeast-1.compute.amazonaws.com:8080/manager/text/start?path=/AWS-HelloWorld-1.0.0

uninstall_war_file

rm -rf /var/lib/tomcat7/webapps/AWS-HelloWorld-1.0.0.war

rm -rf /var/lib/tomcat7/webapps/AWS-HelloWorld-1.0.0

对内容进行ZIP处理,然后将ZIP文件上传到S3存储桶。确保在存储桶上启用了“版本控制”。

zip –r AWS-HelloWorld-1.0.0.war.zip AWS-HelloWorld-1.0.0.war appspec.yml scripts
S3存储桶命令
aws s3 cp /opt/niranjan/AWS-HelloWorld-1.0.0.war.zip

s3://hwcodebuildbucket/HWJavaWebTarget/target/AWS-HelloWorld-1.0.0.war.zip
VERSIONING

在以下截图中看到上传到S3存储桶的ZIP文件:

S3斗

您可以创建一个可执行脚本,然后将上述命令添加到该脚本中,并在每次有新的应用程序WAR文件从构建中运行时运行它,而不用一个个地运行命令。

创建CodeDeploy应用程序

创建CodeDeploy应用程序是为了确保WAR文件的正确修订版被部署到适当的环境(即EC2实例)中。

启动CodeDeploy服务,然后单击“创建应用程序”按钮。

创建应用程序按钮

输入应用程序名称,部署组(示例: QA-Env),然后选择正在运行的EC2实例。

EC2实例

在表单末尾,选择服务角色。这是本教程前面创建的另一个角色。

单击创建应用程序按钮。

建立申请

选择部署组(QA-Env),然后选择操作->部署新修订版。

部署新修订

由于ZIP文件位于S3存储桶中,因此请按照以下步骤输入修订位置:

s3://hwcodebuildbucket/HWJavaWebTarget/target/AWS-HelloWorld-1.0.0.war.zip
输入修订位置

单击部署按钮。部署成功,如下所示。

部署

WAR文件已成功复制到tomcat webapps目录。

tomcat webapps目录

浏览应用程序URL,以确保成功部署了该应用程序。

应用程序已成功部署

Jenkins与AWS CodeDeploy的集成

正如我们在前2个教程中看到的那样,Jenkins与AWS DevOps工具很好地集成在一起。要将Jenkins与CodeDeploy集成,需要安装插件。单击此处 下载并安装CodeDeploy插件。

首先在Jenkins-> Configuration中输入IAM用户的访问和密钥。

Jenkins->配置。

可以看到示例Jenkins Job配置作为后构建操作步骤的一部分,如下所示:

Jenkins Job配置

结论

到目前为止,我们已经了解了如何使用CodeDeploy将存储在S3存储桶中的J2EE应用程序WAR文件自动部署到运行tomcat应用程序服务器的EC2实例。

这三个工具系列(即CodeCommit,CodeBuild和CodeDeploy)可在DevOps的持续集成和持续交付方面提供帮助。与这三个工具一起,AWS CodePipeline是另一种工具,可帮助端到端可视化应用程序交付。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁