{"id":24584,"date":"2018-07-19T08:42:39","date_gmt":"2018-07-19T08:42:39","guid":{"rendered":"https:\/\/www.softwaretestinghelp.com\/?page_id=24584"},"modified":"2025-04-01T08:02:45","modified_gmt":"2025-04-01T08:02:45","slug":"aws-codedeploy-devops-tutorial","status":"publish","type":"page","link":"https:\/\/www.softwaretestinghelp.com\/aws-codedeploy-devops-tutorial\/","title":{"rendered":"AWS CodeDeploy Tutorial For Automated Deployment"},"content":{"rendered":"\n<p><strong>Tutorial on Automated Deployment Using AWS CodeDeploy:<\/strong><\/p>\n\n\n\n<p><strong>In <a href=\"https:\/\/www.softwaretestinghelp.com\/aws-codebuild-tutorial\/\" target=\"_blank\" rel=\"noopener\">Part 2 of the AWS DevOps tools<\/a><\/strong>, we saw how the CodeBuild service was used to build the J2EE project using Maven.<\/p>\n\n\n\n<p><em>In this tutorial, we will see how the artifact WAR file that is stored in the S3 bucket can be used for deployment to the Tomcat application server using the CodeDeploy service.<\/em><\/p>\n\n\n\n<p><strong>Check out => Ideal Guide <a href=\"https:\/\/www.softwaretestinghelp.com\/devops-tutorials\/\" target=\"_blank\" rel=\"noopener\">for DevOps Training<\/a><\/strong><\/p>\n\n\n\n<p>AWS CodeDeploy is a deployment service that automates the deployment of applications to Amazon EC2 Linux or Windows instances.<\/p>\n\n\n\n \n  \n\n\n<figure class=\"wp-block-image is-resized\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/AWS-CodeDeploy.jpg\"><img decoding=\"async\" width=\"600\" height=\"337\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/AWS-CodeDeploy.jpg\" alt=\"AWS CodeDeploy\" class=\"wp-image-25402\" style=\"width:732px;height:auto\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/AWS-CodeDeploy.jpg 600w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/AWS-CodeDeploy-300x169.jpg 300w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">How Jenkins can be integrated with CodeDeploy<\/h2>\n\n\n\n<p><strong>Pre-Requisite:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>An account with AWS preferably a free tier.<\/li>\n\n\n\n<li>Good and fast internet connection.<\/li>\n\n\n\n<li>AWS Region used \u2013 Asia Pacific (Singapore).<\/li>\n\n\n\n<li>Amazon Linux or RHEL EC2 instance.<\/li>\n\n\n\n<li>Tomcat was installed on the EC2 instance.<\/li>\n<\/ul>\n\n\n\n<p><span style=\"color: #ff6600;\"><strong>Note: <\/strong><\/span>For deployment, AWS CodeCommit repositories are not supported by the CodeDeploy service. Only S3 and GitHub are supported.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Setup CodeDeploy<\/h2>\n\n\n\n<p>AWS CodeDeploy will need to work namely with two entities to access the EC2 instance and the S3 bucket where the artifacts (WAR file) are stored for deployment. In order to provide permission for the CodeDeploy service to access those IAM, roles will need to be set up. The IAM roles are not defined for IAM users but they only have access to the entities.<\/p>\n\n\n\n<p><strong>#1)<\/strong> Create the <strong>first role<\/strong> for the CodeDeploy service to access the EC2 instance.<\/p>\n\n\n\n<p>Launch IAM and click on <strong>Roles-&gt;&nbsp;Create Role.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/1-Roles.jpg\"><img decoding=\"async\" width=\"649\" height=\"367\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/1-Roles.jpg\" alt=\"IAM\" class=\"wp-image-25288\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/1-Roles.jpg 649w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/1-Roles-300x170.jpg 300w\" sizes=\"(max-width: 649px) 100vw, 649px\" \/><\/a><\/figure>\n\n\n\n<p>Under <strong>AWS Service<\/strong> click on <strong>EC2 -&gt; Select your use case -&gt; EC2<\/strong> and click on <strong>Next-&gt; Permissions.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/2-AWS-Service.jpg\"><img decoding=\"async\" width=\"646\" height=\"497\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/2-AWS-Service.jpg\" alt=\"Permissions\" class=\"wp-image-25289\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/2-AWS-Service.jpg 646w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/2-AWS-Service-300x231.jpg 300w\" sizes=\"(max-width: 646px) 100vw, 646px\" \/><\/a><\/figure>\n\n\n\n<p>Select the <strong>AWSCodeDeployRole <\/strong>under Policy name and click <strong>Next-&gt;Review.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/3-Attach-Permission-policy.jpg\"><img decoding=\"async\" width=\"650\" height=\"320\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/3-Attach-Permission-policy.jpg\" alt=\"AWSCodeDeployRole\" class=\"wp-image-25290\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/3-Attach-Permission-policy.jpg 650w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/3-Attach-Permission-policy-300x148.jpg 300w\" sizes=\"(max-width: 650px) 100vw, 650px\" \/><\/a><\/figure>\n\n\n\n<p>Enter a role name and click on <strong>Create Role.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/4-Create-Role.jpg\"><img decoding=\"async\" width=\"652\" height=\"432\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/4-Create-Role.jpg\" alt=\"Create Role\" class=\"wp-image-25291\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/4-Create-Role.jpg 652w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/4-Create-Role-300x199.jpg 300w\" sizes=\"(max-width: 652px) 100vw, 652px\" \/><\/a><\/figure>\n\n\n\n<p>Lastly, edit the Trust relationship for this role to ensure that the CodeDeploy service is accessible overall or specific regions \/endpoints.<\/p>\n\n\n\n<p>Click on the role and update the trust relationship as shown below.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/5-Summary.jpg\"><img decoding=\"async\" width=\"647\" height=\"388\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/5-Summary.jpg\" alt=\"trust relationship\" class=\"wp-image-25293\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/5-Summary.jpg 647w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/5-Summary-300x180.jpg 300w\" sizes=\"(max-width: 647px) 100vw, 647px\" \/><\/a><\/figure>\n\n\n\n<p>In the policy, change EC2 to Codedeploy and click on <strong>Update Trust Policy.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/6-Edit-Trust-Relationship.jpg\"><img decoding=\"async\" width=\"556\" height=\"397\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/6-Edit-Trust-Relationship.jpg\" alt=\"Update Trust Policy\" class=\"wp-image-25294\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/6-Edit-Trust-Relationship.jpg 556w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/6-Edit-Trust-Relationship-300x214.jpg 300w\" sizes=\"(max-width: 556px) 100vw, 556px\" \/><\/a><\/figure>\n\n\n\n<p><strong>2)<\/strong> Create the <strong>second role<\/strong> for the EC2 instance using the CodeDeploy service to access the S3 bucket.<\/p>\n\n\n\n<p><span style=\"color: #ff6600;\"><strong>Repeat the above steps for this role and enter as below:<\/strong><\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to <strong>IAM -&gt; Roles -&gt; Create Role.<\/strong><\/li>\n\n\n\n<li>Under AWS Service, select EC2.<\/li>\n\n\n\n<li>Under that Select your use case again and click on EC2 and click the button <strong>Next-&gt; Permissions.<\/strong><\/li>\n\n\n\n<li>In the attached permission policy screen, select <strong>AmazonS3ReadOnlyAccess <\/strong>and click the button <strong>Next-&gt; Review.<\/strong><\/li>\n\n\n\n<li>Name the role <strong>HW-Codedeploy-EC2-S3<\/strong> and click on the <strong>Create Role.<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Both the roles should now be available.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Launch Amazon Linux EC2 Instance<\/h2>\n\n\n\n<p>In this section, we now provision the EC2 instance.<\/p>\n\n\n\n<p>While provisioning the instance make sure to select the role <strong>HW-Codedeploy-EC2-S3<\/strong> during <strong>Configure Instance Details<\/strong> step. Also, ensure to make open port 8080.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/7-Configure-details.jpg\"><img decoding=\"async\" width=\"650\" height=\"466\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/7-Configure-details.jpg\" alt=\"Launch Amazon Linux EC2 Instance\" class=\"wp-image-25295\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/7-Configure-details.jpg 650w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/7-Configure-details-300x215.jpg 300w\" sizes=\"(max-width: 650px) 100vw, 650px\" \/><\/a><\/figure>\n\n\n\n<p>Along with this, we will also need to install the <strong>CodeDeploy agent and Tomcat<\/strong> as an application server which will be used for the deployment of our application.<\/p>\n\n\n\n<p><span style=\"color: #ff6600;\"><strong>#1) Install and configure CodeDeploy Agent on the Amazon Linux instance<\/strong><\/span><\/p>\n\n\n\n<p>CodeDeploy agent helps in deployments and has to be installed in every instance (environments) where the deployment will be done.<\/p>\n\n\n\n<p>Log in to the Linux instance and download the agent as per the region being used. In our case, it is the Singapore region where the identifier is <strong>ap-southeast-1.<\/strong><\/p>\n\n\n\n<p><strong>The command to download the agent would be in the format:<\/strong><\/p>\n\n\n\n<p>wget https:\/\/aws-codedeploy-&lt;region-identifier&gt;.<strong>s3.amazonaws.com\/latest\/install<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/Code-Deploy.jpg\"><img decoding=\"async\" width=\"499\" height=\"145\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/Code-Deploy.jpg\" alt=\"command to download the agent\" class=\"wp-image-25398\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/Code-Deploy.jpg 499w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/Code-Deploy-300x87.jpg 300w\" sizes=\"(max-width: 499px) 100vw, 499px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><span style=\"color: #ff6600;\"><strong>#2) Install Tomcat on the EC2 instance<\/strong><\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>To install and run Tomcat do the following steps in order.<\/li>\n<\/ul>\n\n\n\n<p>yum install tomcat7 tomcat7-webapps tomcat7-docs-webapp tomcat7-admin-webapps<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enable the tomcat user for the application manager. Do the changes as shown in the \/etc\/tomcat7\/tomcat-users.xml file<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/8-Insert-command.jpg\"><img decoding=\"async\" width=\"646\" height=\"350\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/8-Insert-command.jpg\" alt=\"Enable the tomcat user\" class=\"wp-image-25296\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/8-Insert-command.jpg 646w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/8-Insert-command-300x163.jpg 300w\" sizes=\"(max-width: 646px) 100vw, 646px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Lastly, start Tomcat service.<\/li>\n<\/ul>\n\n\n\n<p><strong> service tomcat7 start<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/Tomcat-1.jpg\"><img decoding=\"async\" width=\"462\" height=\"32\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/Tomcat-1.jpg\" alt=\"Tomcat\" class=\"wp-image-25399\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/Tomcat-1.jpg 462w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/Tomcat-1-300x21.jpg 300w\" sizes=\"(max-width: 462px) 100vw, 462px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Launch <strong>Tomcat Web Application Manager<\/strong> and check if it is working using the URL&nbsp;http:\/\/&lt;EC2-Instance&gt;:8080\/manager<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/9-Tomcat.jpg\"><img decoding=\"async\" width=\"858\" height=\"385\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/9-Tomcat.jpg\" alt=\"Tomcat Web Application Manager\" class=\"wp-image-25300\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/9-Tomcat.jpg 858w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/9-Tomcat-300x135.jpg 300w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/9-Tomcat-768x345.jpg 768w\" sizes=\"(max-width: 858px) 100vw, 858px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Integrating AWS CodeDeploy with S3<\/h2>\n\n\n\n<p>As mentioned in part 2 that CodeDeploy supports only S3 and GitHub as code repository which is used to deploy the latest versions of the application. Since our application WAR file is stored in an S3 bucket, we need to ensure that the format maintained is a ZIP file.<\/p>\n\n\n\n<p>This means that the WAR file should be in a ZIP file which is what is supported by the deployment process using CodeDeploy.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS CLI (Command-line interface) also needs to be installed on the Linux instance. Please refer to the <a href=\"http:\/\/docs.aws.amazon.com\/cli\/latest\/userguide\/awscli-install-linux-python.html\" target=\"_blank\" rel=\"noopener nofollow\">URL<\/a> to install.<\/li>\n\n\n\n<li>Run the following steps in the Linux instance to download the WAR from the S3 bucket. The following steps normally need to be done on the build machine.<\/li>\n<\/ul>\n\n\n\n<p>set AWS_ACCESS_KEY_ID=&lt;Set the access key of the IAM user&gt;<\/p>\n\n\n\n<p>set AWS_SECRET_ACCESS_KEY=&lt;Set the secret key of the IAM user&gt;<\/p>\n\n\n\n<p>set AWS_DEFAULT_REGION=ap-southeast-1<\/p>\n\n\n\n<p>cd \/opt\/niranjan<\/p>\n\n\n\n<p>aws s3 cp s3:\/\/hwcodebuildbucket\/HWJavaWebTarget\/target\/AWS-HelloWorld-1.0.0.war \/opt\/niranjan<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CodeDeploy uses an <strong>appspec.yml<\/strong> file that contains deployment instructions to the EC2 instances. This file has to be at the root of a folder where the application WAR file is downloaded.<\/li>\n<\/ul>\n\n\n\n<p><strong>Create the appspec.yml file and the scripts folder as shown below:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/Creating-appspec.yml-file.jpg\"><img decoding=\"async\" width=\"294\" height=\"441\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/Creating-appspec.yml-file.jpg\" alt=\"Creating appspec.yml file\" class=\"wp-image-25400\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/Creating-appspec.yml-file.jpg 294w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/Creating-appspec.yml-file-200x300.jpg 200w\" sizes=\"(max-width: 294px) 100vw, 294px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>The events run in the following order during deployment.<\/strong><\/p>\n\n\n\n<p>#1) ApplicationStop<\/p>\n\n\n\n<p>#2) BeforeInstall<\/p>\n\n\n\n<p>#3) Install (files section is called and WAR file copied)<\/p>\n\n\n\n<p>#4) ApplicationStart<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>The folder hierarchy used is<\/strong><\/li>\n<\/ul>\n\n\n\n<p>\/opt\/niranjan<br>appspec.yml<br>AWS-HelloWorld-1.0.0.war<br>scripts<br>start_application<br>stop_application<br>uninstall_war_file<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/10-AWS-Command-Prompt.jpg\"><img decoding=\"async\" width=\"464\" height=\"145\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/10-AWS-Command-Prompt.jpg\" alt=\"folder hierarchy\" class=\"wp-image-25303\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/10-AWS-Command-Prompt.jpg 464w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/10-AWS-Command-Prompt-300x94.jpg 300w\" sizes=\"(max-width: 464px) 100vw, 464px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Scripts contents<\/li>\n<\/ul>\n\n\n\n<p><strong>stop_application: <\/strong><\/p>\n\n\n\n<p>curl &#8211;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<\/p>\n\n\n\n<p><strong> start_application:<\/strong><\/p>\n\n\n\n<p>curl &#8211;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<\/p>\n\n\n\n<p><strong> uninstall_war_file<\/strong><\/p>\n\n\n\n<p>rm -rf \/var\/lib\/tomcat7\/webapps\/AWS-HelloWorld-1.0.0.war<\/p>\n\n\n\n<p>rm -rf \/var\/lib\/tomcat7\/webapps\/AWS-HelloWorld-1.0.0<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ZIP the contents and upload the ZIP file to the S3 bucket. Ensure that VERSIONING is enabled on the bucket.<\/li>\n<\/ul>\n\n\n\n<p><strong>zip \u2013r AWS-HelloWorld-1.0.0.war.zip AWS-HelloWorld-1.0.0.war appspec.yml scripts<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/S3-bucket-command-e1531924856663.jpg\"><img decoding=\"async\" width=\"479\" height=\"129\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/S3-bucket-command-e1531924856663.jpg\" alt=\"S3 bucket command\" class=\"wp-image-25401\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/S3-bucket-command-e1531924856663.jpg 479w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/S3-bucket-command-e1531924856663-300x81.jpg 300w\" sizes=\"(max-width: 479px) 100vw, 479px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>aws s3 cp \/opt\/niranjan\/AWS-HelloWorld-1.0.0.war.zip <\/strong><\/p>\n\n\n\n<p><strong>s3:\/\/hwcodebuildbucket\/HWJavaWebTarget\/target\/AWS-HelloWorld-1.0.0.war.zip<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/12-Aws-Command-1.jpg\"><img decoding=\"async\" width=\"842\" height=\"56\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/12-Aws-Command-1.jpg\" alt=\"VERSIONING\" class=\"wp-image-25306\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/12-Aws-Command-1.jpg 842w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/12-Aws-Command-1-300x20.jpg 300w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/12-Aws-Command-1-768x51.jpg 768w\" sizes=\"(max-width: 842px) 100vw, 842px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>ZIP file uploaded to the S3 bucket is as seen in the below screen:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/13-Overview.jpg\"><img decoding=\"async\" width=\"649\" height=\"409\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/13-Overview.jpg\" alt=\"S3 bucket\" class=\"wp-image-25308\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/13-Overview.jpg 649w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/13-Overview-300x189.jpg 300w\" sizes=\"(max-width: 649px) 100vw, 649px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Instead of running the commands one by one you can create an executable script and add the above commands into it and run it every time a new application WAR file is available from the build.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Create CodeDeploy Application<\/h2>\n\n\n\n<p>CodeDeploy application is created to ensure that proper revision of the WAR file is deployed to the appropriate environment which is the EC2 instance.<\/p>\n\n\n\n<p>Launch the CodeDeploy service and click on the <strong>Create Application<\/strong> button.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/14-Create-Applications.jpg\"><img decoding=\"async\" width=\"570\" height=\"256\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/14-Create-Applications.jpg\" alt=\"Create Application button\" class=\"wp-image-25309\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/14-Create-Applications.jpg 570w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/14-Create-Applications-300x135.jpg 300w\" sizes=\"(max-width: 570px) 100vw, 570px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Enter Application Name, Deployment Group (<strong>Example:<\/strong> QA-Env), and select the EC2 instances running.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/15-Create-Application.jpg\"><img decoding=\"async\" width=\"649\" height=\"621\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/15-Create-Application.jpg\" alt=\"EC2 instances\" class=\"wp-image-25310\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/15-Create-Application.jpg 649w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/15-Create-Application-300x287.jpg 300w\" sizes=\"(max-width: 649px) 100vw, 649px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>At the end of the form select the service role. This is the other role that was created earlier in the tutorial.<\/p>\n\n\n\n<p>Click on the <strong>Create Application<\/strong> button.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/16-Service-Role.jpg\"><img decoding=\"async\" width=\"481\" height=\"198\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/16-Service-Role.jpg\" alt=\"Create Application\" class=\"wp-image-25311\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/16-Service-Role.jpg 481w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/16-Service-Role-300x123.jpg 300w\" sizes=\"(max-width: 481px) 100vw, 481px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Select the Deployment Group (QA-Env) and select <strong>Actions -&gt; Deploy new revision.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/17-Deploy-New-Revision.jpg\"><img decoding=\"async\" width=\"559\" height=\"556\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/17-Deploy-New-Revision.jpg\" alt=\"Deploy new revision\" class=\"wp-image-25313\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/17-Deploy-New-Revision.jpg 559w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/17-Deploy-New-Revision-150x150.jpg 150w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/17-Deploy-New-Revision-300x298.jpg 300w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/17-Deploy-New-Revision-144x144.jpg 144w\" sizes=\"(max-width: 559px) 100vw, 559px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Since the ZIP file is in the S3 bucket, enter the Revision location as follows:<\/p>\n\n\n\n<p><strong>s3:\/\/hwcodebuildbucket\/HWJavaWebTarget\/target\/AWS-HelloWorld-1.0.0.war.zip<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/18-Create-Deployment.jpg\"><img decoding=\"async\" width=\"471\" height=\"644\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/18-Create-Deployment.jpg\" alt=\"enter the Revision location\" class=\"wp-image-25314\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/18-Create-Deployment.jpg 471w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/18-Create-Deployment-219x300.jpg 219w\" sizes=\"(max-width: 471px) 100vw, 471px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Click on the <strong>Deploy<\/strong> button. The deployment is successful as shown below.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/19-Events-e1531924938665.jpg\"><img decoding=\"async\" width=\"619\" height=\"483\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/19-Events-e1531924938665.jpg\" alt=\"deployment\" class=\"wp-image-25315\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/19-Events-e1531924938665.jpg 619w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/19-Events-e1531924938665-300x234.jpg 300w\" sizes=\"(max-width: 619px) 100vw, 619px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>The WAR file is successfully copied to the tomcat webapps directory.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/20-Cmd.jpg\"><img decoding=\"async\" width=\"607\" height=\"212\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/20-Cmd.jpg\" alt=\"tomcat webapps directory\" class=\"wp-image-25318\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/20-Cmd.jpg 607w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/20-Cmd-300x105.jpg 300w\" sizes=\"(max-width: 607px) 100vw, 607px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Browse the application URL to ensure that the application is deployed successfully.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/21-AWS-Java-Web-Page.jpg\"><img decoding=\"async\" width=\"891\" height=\"187\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/21-AWS-Java-Web-Page.jpg\" alt=\"application is deployed successfully\" class=\"wp-image-25319\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/21-AWS-Java-Web-Page.jpg 891w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/21-AWS-Java-Web-Page-300x63.jpg 300w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/21-AWS-Java-Web-Page-768x161.jpg 768w\" sizes=\"(max-width: 891px) 100vw, 891px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jenkins Integration with AWS CodeDeploy<\/h2>\n\n\n\n<p>As we have seen in the previous 2 tutorials, Jenkins integrates very well with AWS DevOps tools. To integrate Jenkins with CodeDeploy, the plugin needs to be installed. Click <a href=\"https:\/\/wiki.jenkins.io\/display\/JENKINS\/AWS+Codedeploy+plugin\" target=\"_blank\" rel=\"noopener nofollow\">here<\/a>&nbsp;to download and install the CodeDeploy plugin.<\/p>\n\n\n\n<p>Firstly enter the Access and Secret Key for the IAM user in <strong>Jenkins -&gt; Configuration<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/22-Jenkins-Page.jpg\"><img decoding=\"async\" width=\"642\" height=\"528\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/22-Jenkins-Page.jpg\" alt=\"Jenkins -&gt; Configuration.\" class=\"wp-image-25320\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/22-Jenkins-Page.jpg 642w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/22-Jenkins-Page-300x247.jpg 300w\" sizes=\"(max-width: 642px) 100vw, 642px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Sample Jenkins Job configuration as part of the Post-build Action step can be seen as shown below:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/23-Build-Actions.jpg\"><img decoding=\"async\" width=\"630\" height=\"669\" src=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/23-Build-Actions.jpg\" alt=\"Jenkins Job configuration\" class=\"wp-image-25321\" srcset=\"https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/23-Build-Actions.jpg 630w, https:\/\/www.softwaretestinghelp.com\/wp-content\/qa\/uploads\/2018\/04\/23-Build-Actions-283x300.jpg 283w\" sizes=\"(max-width: 630px) 100vw, 630px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>So far we have seen how CodeDeploy can be used to automate the deployment of a J2EE application WAR file stored in the S3 bucket to the EC2 instance that is running the Tomcat application server.<\/p>\n\n\n\n<p>The series of these three tools i.e. CodeCommit, CodeBuild, and CodeDeploy help in the Continuous Integration and Continuous Delivery aspects of DevOps. Along with these 3 tools, AWS CodePipeline is one other tool that helps in the end-to-end visualization of the application delivery.<\/p>\n\n\n\n<p><strong><em>Stay tuned <\/em><\/strong>for our upcoming tutorial to <strong><em>learn more about .NET web application deployment to AWS using Elastic Beanstalk.<\/em><\/strong><\/p>\n\n\n\n<p><strong><a href=\"https:\/\/www.softwaretestinghelp.com\/aws-codebuild-tutorial\/\" target=\"_blank\" rel=\"noopener\">PREV Tutorial<\/a> | <a href=\"https:\/\/www.softwaretestinghelp.com\/aws-elastic-beanstalk-tutorial\/\" target=\"_blank\" rel=\"noopener\">NEXT Tutorial<\/a><\/strong><\/p>\n\r\n\t\t\t<div id=\"daexthefup-container\"\r\n\t\t\t\tclass=\"daexthefup-container daexthefup-layout-stacked daexthefup-alignment-center\"\r\n\t\t\t\tdata-post-id=\"24584\">\r\n\r\n\t\t\t\t<div class=\"daexthefup-feedback\">\r\n\t\t\t\t\t<div class=\"daexthefup-text\">\r\n\t\t\t\t\t\t<h3 class=\"daexthefup-title\">Was this helpful?<\/h3>\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<div class=\"daexthefup-buttons-container\">\r\n\t\t\t\t\t\t<div class=\"daexthefup-buttons\">\r\n\t\t\t\t\t\t\t\r\n\t\t\t<div class=\"daexthefup-yes daexthefup-button daexthefup-button-type-icon\" data-value=\"1\">\r\n\t\t\t\t\r\n                <svg>\r\n                    <defs>\r\n                        <style>.thumb-up-cls-1{fill:#c9c9c9;}.thumb-up-cls-2{fill:#e1e1e1;}.thumb-up-cls-3{fill:#676767;}<\/style>\r\n                    <\/defs>\r\n                    <g id=\"thumb_up\">\r\n                        <path class=\"thumb-up-cls-2 daexthefup-icon-circle\" d=\"m24,3c11.58,0,21,9.42,21,21s-9.42,21-21,21S3,35.58,3,24,12.42,3,24,3m0-1C11.85,2,2,11.85,2,24s9.85,22,22,22,22-9.85,22-22S36.15,2,24,2h0Z\" \/>\r\n                        <g>\r\n                            <rect class=\"thumb-up-cls-3 daexthefup-icon-secondary-color\" x=\"10\" y=\"20\" width=\"6\" height=\"15\" rx=\"1.5\" ry=\"1.5\" \/>\r\n                            <path class=\"thumb-up-cls-1 daexthefup-icon-primary-color\" d=\"m30.57,9.06l-.49-.1c-.81-.17-1.61.35-1.78,1.16l-5.3,11.74c-.17.81,3.16,1.61,3.97,1.78l1.96.41c.81.17,1.61-.35,1.78-1.16l2.18-10.27c.34-1.61-.7-3.21-2.31-3.56Z\" \/>\r\n                            <path class=\"thumb-up-cls-1 daexthefup-icon-primary-color\" d=\"m38.17,20h-18.67c-.83,0-1.5.67-1.5,1.5v12c0,.83.67,1.5,1.5,1.5h16.27c.71,0,1.33-.5,1.47-1.21l2.4-12c.19-.93-.53-1.8-1.47-1.8Z\" \/>\r\n                        <\/g>\r\n                    <\/g>\r\n                <\/svg>\t\t\t<\/div>\r\n\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t<div class=\"daexthefup-no daexthefup-button daexthefup-button-type-icon\" data-value=\"0\">\r\n\t\t\t\t\r\n                <svg>\r\n                    <defs>\r\n                        <style>.thumb-down-cls-1{fill:#c9c9c9;}.thumb-down-cls-2{fill:#e1e1e1;}.thumb-down-cls-3{fill:#676767;}<\/style>\r\n                    <\/defs>\r\n                    <g id=\"thumb_down\">\r\n                        <path class=\"thumb-down-cls-2 daexthefup-icon-circle\" d=\"m24,3c11.58,0,21,9.42,21,21s-9.42,21-21,21S3,35.58,3,24,12.42,3,24,3m0-1C11.85,2,2,11.85,2,24s9.85,22,22,22,22-9.85,22-22S36.15,2,24,2h0Z\" \/>\r\n                        <g>\r\n                            <rect class=\"thumb-down-cls-3 daexthefup-icon-secondary-color\" x=\"10\" y=\"13\" width=\"6\" height=\"15\" rx=\"1.5\" ry=\"1.5\" \/>\r\n                            <path class=\"thumb-down-cls-1 daexthefup-icon-primary-color\" d=\"m30.57,38.94l-.49.1c-.81.17-1.61-.35-1.78-1.16l-5.3-11.74c-.17-.81,3.16-1.61,3.97-1.78l1.96-.41c.81-.17,1.61.35,1.78,1.16l2.18,10.27c.34,1.61-.7,3.21-2.31,3.56Z\" \/>\r\n                            <path class=\"thumb-down-cls-1 daexthefup-icon-primary-color\" d=\"m38.17,28h-18.67c-.83,0-1.5-.67-1.5-1.5v-12c0-.83.67-1.5,1.5-1.5h16.27c.71,0,1.33.5,1.47,1.21l2.4,12c.19.93-.53,1.8-1.47,1.8Z\" \/>\r\n                        <\/g>\r\n                    <\/g>\r\n                <\/svg>\t\t\t<\/div>\r\n\r\n\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\r\n\t\t\t\t<div class=\"daexthefup-comment\">\r\n\t\t\t\t\t<div class=\"daexthefup-comment-top-container\">\r\n\t\t\t\t\t\t<label id=\"daexthefup-comment-label\" class=\"daexthefup-comment-label\"><\/label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"daexthefup-comment-character-counter-container\">\r\n\t\t\t\t\t\t\t\t<div id=\"daexthefup-comment-character-counter-number\"\r\n\t\t\t\t\t\t\t\t\tclass=\"daexthefup-comment-character-counter-number\"><\/div>\r\n\t\t\t\t\t\t\t\t<div class=\"daexthefup-comment-character-counter-text\"><\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<textarea id=\"daexthefup-comment-textarea\" class=\"daexthefup-comment-textarea\"\r\n\t\t\t\t\t\t\t\tplaceholder=\"Type your message\"\r\n\t\t\t\t\t\t\t\tmaxlength=\"\r\n\t\t\t\t\t\t\t\t400\t\t\t\t\t\t\t\t\t\"><\/textarea>\r\n\t\t\t\t\t<div class=\"daexthefup-comment-buttons-container\">\r\n\t\t\t\t\t\t<button class=\"daexthefup-comment-submit daexthefup-button\">Submit<\/button>\r\n\t\t\t\t\t\t<button class=\"daexthefup-comment-cancel daexthefup-button\">Cancel<\/button>\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\r\n\t\t\t\t<div class=\"daexthefup-successful-submission-text\">Thanks for your feedback!<\/div>\r\n\r\n\t\t\t<\/div>\r\n\r\n\t\t\t","protected":false},"excerpt":{"rendered":"<p>Tutorial on Automated Deployment Using AWS CodeDeploy: In Part 2 of the AWS DevOps tools, we saw how the CodeBuild service was used to build the J2EE project using Maven. In this tutorial, we will see how the artifact WAR file that is stored in the S3 bucket can be &#8230; <\/p>\n<p class=\"read-more-container\"><a title=\"AWS CodeDeploy Tutorial For Automated Deployment\" class=\"read-more button\" href=\"https:\/\/www.softwaretestinghelp.com\/aws-codedeploy-devops-tutorial\/#more-24584\" aria-label=\"Read more about AWS CodeDeploy Tutorial For Automated Deployment\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":25402,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_helpful_pro_status":1,"footnotes":""},"categories":[554],"tags":[],"class_list":{"0":"post-24584","1":"page","2":"type-page","3":"status-publish","4":"has-post-thumbnail","6":"category-ci-cd"},"acf":[],"_links":{"self":[{"href":"https:\/\/www.softwaretestinghelp.com\/wp-json\/wp\/v2\/pages\/24584","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.softwaretestinghelp.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.softwaretestinghelp.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.softwaretestinghelp.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.softwaretestinghelp.com\/wp-json\/wp\/v2\/comments?post=24584"}],"version-history":[{"count":0,"href":"https:\/\/www.softwaretestinghelp.com\/wp-json\/wp\/v2\/pages\/24584\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.softwaretestinghelp.com\/wp-json\/wp\/v2\/media\/25402"}],"wp:attachment":[{"href":"https:\/\/www.softwaretestinghelp.com\/wp-json\/wp\/v2\/media?parent=24584"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.softwaretestinghelp.com\/wp-json\/wp\/v2\/categories?post=24584"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.softwaretestinghelp.com\/wp-json\/wp\/v2\/tags?post=24584"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}