<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: eyewande2022</title>
    <description>The latest articles on DEV Community by eyewande2022 (@eyewande2022).</description>
    <link>https://dev.to/eyewande2022</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1091227%2F1e348498-cc89-4260-9ed5-a15fb060ef8d.jpeg</url>
      <title>DEV Community: eyewande2022</title>
      <link>https://dev.to/eyewande2022</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eyewande2022"/>
    <language>en</language>
    <item>
      <title>8 simple steps to install WordPress on an EC2 instance</title>
      <dc:creator>eyewande2022</dc:creator>
      <pubDate>Fri, 17 Nov 2023 13:43:46 +0000</pubDate>
      <link>https://dev.to/eyewande2022/8-simple-steps-to-install-wordpress-on-an-ec2-instance-770</link>
      <guid>https://dev.to/eyewande2022/8-simple-steps-to-install-wordpress-on-an-ec2-instance-770</guid>
      <description>&lt;p&gt;In this project, we would be launching and configuring WordPress on an EC2 instance. Steps would be required to set up our environment.&lt;/p&gt;

&lt;p&gt;STEP 1: Launching an EC2 Instance:&lt;/p&gt;

&lt;p&gt;Click on "Launch Instance" to initiate the instance creation process.&lt;/p&gt;

&lt;p&gt;Choose an Amazon Linux 2023 (AMI)and choose the instance type. Configure details like instance size, network settings, and storage and security group to allow inbound traffic on ports 80 (HTTP) and 443 (HTTPS) for WordPress.&lt;/p&gt;

&lt;p&gt;EC2 Instance launched.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jqnLWddW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1fyzjcdi1vslzwux0r3s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jqnLWddW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1fyzjcdi1vslzwux0r3s.png" alt="Image description" width="800" height="73"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use SSH (Secure Shell) to connect to the EC2 instance from your terminal or SSH client.&lt;/p&gt;

&lt;p&gt;STEP 2 : Installing a LAMP STACK (Linux, Apache, MySQL, PHP)&lt;/p&gt;

&lt;p&gt;This would require the following :&lt;/p&gt;

&lt;p&gt;a) Update the package lists for upgrades and new installations.&lt;/p&gt;

&lt;p&gt;b) Install Apache: Use 'dnf' package managers to install Apache webserver because the latest one in 2023) can only be installed by 'dnf' .&lt;/p&gt;

&lt;p&gt;c) Install MySQL or MariaDB and set up a database, user and password for WordPress.&lt;/p&gt;

&lt;p&gt;d) Install PHP and necessary PHP modules required by WordPress.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zX_AxMEx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kcssetoup4868p8fjum7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zX_AxMEx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kcssetoup4868p8fjum7.png" alt="Image description" width="800" height="185"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo dnf install php -y
sudo yum install httpd -y

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start and Enable Apache and ensure it is running&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BvCBPgC6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1k9ngyl6i253qurl0zz5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BvCBPgC6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1k9ngyl6i253qurl0zz5.png" alt="Image description" width="800" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install PHP and necessary PHP modules required by WordPress.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo dnf install -y wget php-fpm php-mysqli php-json php php-devel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Hp-qk12s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9npnsk95xgs873musk9z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Hp-qk12s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9npnsk95xgs873musk9z.png" alt="Image description" width="800" height="90"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;STEP 3: Configuring MySQL/MariaDB&lt;/p&gt;

&lt;p&gt;Install MySQL or MariaDB and set up a database, user and password for WordPress. We would be installing MariaDB server.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo dnf install mariadb105-server
dnf info mariadb105
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BniZ0WHI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/730i6vb7cy574vf3m5xx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BniZ0WHI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/730i6vb7cy574vf3m5xx.png" alt="Image description" width="800" height="166"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q6d1548W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f0buvhaw7va9soo2y76y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q6d1548W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f0buvhaw7va9soo2y76y.png" alt="Image description" width="750" height="292"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo systemctl status mariadb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2-jB-FeA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qnygt50o5ynlba5wjrvw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2-jB-FeA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qnygt50o5ynlba5wjrvw.png" alt="Image description" width="800" height="186"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;LOG ON AND CREATE A NEW PASSWORD FOR MYSQL&lt;/p&gt;

&lt;p&gt;Secure the MySQL installation&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo mysql_secure_installation&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ensure to change the password to your preferred password.
Type Y to remove the anonymous user accounts.
Type Y to disable the remote root login.
Type Y to remove the test database.
Type Y to reload the privilege tables and save your changes.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2n45x2_t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/blp8341vzwr5l6y7wuwe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2n45x2_t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/blp8341vzwr5l6y7wuwe.png" alt="Image description" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Login with your new password to access the database&lt;/p&gt;

&lt;p&gt;mysql -u root -p&lt;/p&gt;

&lt;p&gt;Create a new database and a dedicated user for WordPress and grant appropriate privileges to the user on the WordPress database.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ggSg8Wk_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6x8sfm4h6bxtlodl0rm7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ggSg8Wk_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6x8sfm4h6bxtlodl0rm7.png" alt="Image description" width="513" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;STEP 4: Downloading and Configuring WordPress:&lt;/p&gt;

&lt;p&gt;Navigate to the /tmp directory and fetch the latest WordPress package from the official WordPress website.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd /tmp
wget [https://wordpress.org/latest.tar.gz]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Extract: Extract the WordPress files into the webserver's document root directory (e.g., /var/www/html/).&lt;/p&gt;

&lt;p&gt;Unzip and unarchive installation packages to a folder called WordPress and confirm the folder.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;tar -xzf latest.tar.gz&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Move file into the html document route directory&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo mv wordpress/ /var/www/html/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--n8juuTbm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7qw4hn526vheqlnnaupi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n8juuTbm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7qw4hn526vheqlnnaupi.png" alt="Image description" width="800" height="97"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;STEP 5: WordPress Installation:&lt;/p&gt;

&lt;p&gt;Access Installation Wizard: Open a web browser and navigate to your EC2 instance's public IP or domain name to access the WordPress installation wizard.&lt;/p&gt;

&lt;p&gt;Launch your web browser with your Public IPv4 DNS and put /wordpress as the endpoint.&lt;/p&gt;

&lt;p&gt;[&lt;a href="http://ec2-52-202-247-108.compute-1.amazonaws.com/wordpress/"&gt;http://ec2-52-202-247-108.compute-1.amazonaws.com/wordpress/&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;Successfully launched.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fesshab---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e51nlysqh6hskj7rjvkj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fesshab---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e51nlysqh6hskj7rjvkj.png" alt="Image description" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;STEP 6: Database Setup: Enter the database details created earlier during the installation wizard.&lt;/p&gt;

&lt;p&gt;STEP 7: Complete Installation: Fill in website information, create an admin account, configure the wp-config.php file with the database details and finalize the installation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--L_wn0GPv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vr1ko5eebzczzz42g5ze.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--L_wn0GPv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vr1ko5eebzczzz42g5ze.png" alt="Image description" width="800" height="619"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;STEP 8 : Testing the Website: Verify that WordPress is running correctly by accessing your website.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FW4ti12s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h1bif564bxxt1osig0fy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FW4ti12s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h1bif564bxxt1osig0fy.png" alt="Image description" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are just starting to use your WordPress. It is advisable to keep your system updated with security patches and perform routine maintenance.&lt;/p&gt;

&lt;p&gt;Congratulations !!! 💚✌️&lt;/p&gt;

</description>
      <category>ec2</category>
      <category>wordpress</category>
      <category>lamp</category>
      <category>mariadb</category>
    </item>
    <item>
      <title>Ansible as a Configuration Management Tool</title>
      <dc:creator>eyewande2022</dc:creator>
      <pubDate>Sun, 15 Oct 2023 19:20:42 +0000</pubDate>
      <link>https://dev.to/eyewande2022/ansible-as-a-configuration-management-tool-70k</link>
      <guid>https://dev.to/eyewande2022/ansible-as-a-configuration-management-tool-70k</guid>
      <description>&lt;h3&gt;
  
  
  Ansible as a Configuration Management Tool
&lt;/h3&gt;

&lt;p&gt;Configuration Management has evolved over the years and has been a revelation for solving critical problems in the tech industry that have allowed organisations to have lots of servers in their thousands. As DevOps Engineers, we are required to perform certain functions like installation, updates, upgrades, patches, security fixes and provisioning servers. These servers could be web servers, NFS servers or database servers and when provisioned, these servers are required to be managed properly. There are various configuration tools in the market like Ansible, puppet, salt and Chef but Ansible stands out of all of them because of the major functions and tasks carried out by the tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  Advantages of Ansible as a configuration tool.
&lt;/h3&gt;

&lt;p&gt;1) Easy and free to use and it's Python based which makes it the preferred choice to most DevOps Engineers&lt;/p&gt;

&lt;p&gt;2) Ansible is Agentless and once installed on the control server, it controls other targeted servers to communicate with them through SSH&lt;/p&gt;

&lt;p&gt;3) Ansible is pushed-based and once pushed it can be automatically installed on all servers at once if they are all in the inventory.&lt;/p&gt;

&lt;p&gt;4) Ansible uses YAML file which is easy to learn and can be installed in Ubuntu and Linux repos and readily available to be installed.&lt;/p&gt;

&lt;p&gt;In this project, we would make most of the routine tasks automated by installing and configuring an Ansible client to act as a Control server and creating a playbook to automate server configuration. Ansible client would be acting as the Bastion Host as an intermediary through which access to the internal network can be provided.&lt;/p&gt;

&lt;p&gt;We would also create a simple Ansible playbook to automate server configuration&lt;/p&gt;

&lt;p&gt;The pre-requisite for the projects is the following.&lt;/p&gt;

&lt;p&gt;1) Fundamental Knowledge of Installing and downloading software&lt;/p&gt;

&lt;p&gt;2) Basic Understanding of Linux Commands&lt;/p&gt;

&lt;p&gt;3) AWS account login with EC2 instances&lt;/p&gt;

&lt;p&gt;4) 3 Ubuntu Webservers&lt;/p&gt;

&lt;p&gt;5) Database Server: On Ubuntu 22.04+ MySQL&lt;/p&gt;

&lt;p&gt;6) Storage Server: Red Hat Enterprise Linux 9 +NFS Server&lt;/p&gt;

&lt;p&gt;7) Load Balancer Server&lt;/p&gt;

&lt;p&gt;8) Ansible and Jenkins Server&lt;/p&gt;

&lt;p&gt;9) Python Language&lt;/p&gt;

&lt;h3&gt;
  
  
  IMPLEMENTATION STEPS:
&lt;/h3&gt;

&lt;p&gt;Set up all EC-2 instances and ensure you log in with your details to your AWS console via &lt;a href="https://aws.amazon.com"&gt;https://aws.amazon.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Click on the EC2 link, spin up 7 EC2 instances and make sure they are set up with the operating systems below.&lt;br&gt;
NFS server (Red hat),3 Webservers, Ansible-Jenkins, Load Balancer and Database Server&lt;/p&gt;

&lt;p&gt;You can see the instance state that shows all servers are currently running. We would be updating our Jenkins server and naming it Jenkins-Ansible-Server for clarity as we want to use this to run our playbooks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HZYxxzaS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pv89ld54m43dnbgg5k4j.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HZYxxzaS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pv89ld54m43dnbgg5k4j.jpeg" alt="Instances Running" width="602" height="81"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We would navigate to GitHub to create a new repository called ansible-config-mgt.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q90w9UwE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z1r5f6d6y9purx1dilao.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q90w9UwE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z1r5f6d6y9purx1dilao.jpeg" alt="Ansible-config-mgt new repo" width="602" height="174"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install Ansible and check its version.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2lSuguMg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i622z7cg65lgvl0sy3ay.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2lSuguMg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i622z7cg65lgvl0sy3ay.jpeg" alt="ansible-version" width="602" height="135"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  JENKINS CONFIGURATION
&lt;/h3&gt;

&lt;p&gt;Now we have to configure Jenkins job to save our repository every time we make changes. Please note that our Jenkins server was configured to use an elastic IP to be able to maintain a dedicated server.&lt;/p&gt;

&lt;p&gt;1) Access our Jenkins and create a new project "ansible new" as shown below&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uCct6LP9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x8jpj3x7k1xfxussn6d3.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uCct6LP9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x8jpj3x7k1xfxussn6d3.jpeg" alt="Jenkins" width="602" height="135"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rdwvFCdB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wv2ng0pwk87xwjko4qqr.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rdwvFCdB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wv2ng0pwk87xwjko4qqr.jpeg" alt="Jenkins-1" width="602" height="169"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fill in the description of your project and select git.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VOKgMW9i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4fhi1e30qu0kelkmy7hb.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VOKgMW9i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4fhi1e30qu0kelkmy7hb.jpeg" alt="Jenkins-2" width="602" height="704"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy and paste the git repo and ensure it is on the main branch.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pMiuNTdW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ulxjj414z7e0opsz6aey.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pMiuNTdW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ulxjj414z7e0opsz6aey.jpeg" alt="Jenkins-3" width="602" height="268"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--flL-B-rb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rockj6krn3le2mmnuouk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--flL-B-rb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rockj6krn3le2mmnuouk.png" alt="Jenkins-4" width="496" height="261"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click the build now manually to test it&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JwPpsjij--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lhsq4qgbgtgcfg556ad0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JwPpsjij--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lhsq4qgbgtgcfg556ad0.png" alt="Build manually" width="543" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Proceed to configure and set webhook to trigger ansible build .&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--be46Ndvl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qv9yqce7g42ipljqwr6n.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--be46Ndvl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qv9yqce7g42ipljqwr6n.jpeg" alt="Add-Webhook" width="602" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Insert the Payload URL and the content type and add the webhook.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Y8lp1UIa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5ewlom7ttdrxklgh2z7a.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y8lp1UIa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5ewlom7ttdrxklgh2z7a.jpeg" alt="Payload" width="602" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KIFhTCu_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p4wz9ge2qfzr3qoelg1j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KIFhTCu_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p4wz9ge2qfzr3qoelg1j.png" alt="Webhooks" width="602" height="168"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once added, we proceed to commit new changes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GVa0YxSp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ijpqqlaewrsry1bu2fej.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GVa0YxSp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ijpqqlaewrsry1bu2fej.png" alt="Git-Commit" width="602" height="73"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BxIZ5jB9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7wuk08h3pf7091zl44di.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BxIZ5jB9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7wuk08h3pf7091zl44di.png" alt="Git-Commit2" width="479" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Navigate back to Jenkins to select the "GitHub hook trigger for GIT Scm polling.&lt;br&gt;
Then Apply and Save&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qMbSZ3iH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kix6t23xon185dt6twhz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qMbSZ3iH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kix6t23xon185dt6twhz.png" alt="WebHook-Git" width="484" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on post-build actions and archive the artefacts by adding a ** and click&lt;br&gt;
Apply and Save&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gjb8C0Kg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a7f2y61zi1u943fkteyt.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gjb8C0Kg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a7f2y61zi1u943fkteyt.jpeg" alt="Post-Build" width="602" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once all task is completed, we then proceed to commit more changes but this time it would automatically populate in the Jenkins server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hBKbVido--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xsn1njt9mz8tlc8tx9hl.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hBKbVido--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xsn1njt9mz8tlc8tx9hl.jpeg" alt="Commit-Changes" width="602" height="82"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UDdbPuFy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tg0svkduv1lo2iroc1xx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UDdbPuFy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tg0svkduv1lo2iroc1xx.png" alt="Git-Commit-2" width="462" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qs4prOLC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pqtwk1j177st07956tmi.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qs4prOLC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pqtwk1j177st07956tmi.jpeg" alt="Build-6" width="602" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Navigate to the terminal and check any of the archived builds using the commands below&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--A8snKuBb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ceq40r8lvxb5224t77dp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A8snKuBb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ceq40r8lvxb5224t77dp.png" alt="Terminal-1" width="602" height="151"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please note: Anytime you try to stop and start your Jenkins-Ansible server. The IP address change. An elastic IP address is used to ensure the ip is still available when the instance is turned and has a static IP&lt;/p&gt;

&lt;h2&gt;
  
  
  Prepare your environment using Visual Studio Code
&lt;/h2&gt;

&lt;p&gt;We need the Visual Studio Code to write some codes. We would first clone down our ansible-config repository to our Jenkin instance. You check the content of the Ansible server to confirm it is there as shown below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--milGgmXC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3l3vlb14tuy0l280c6vs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--milGgmXC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3l3vlb14tuy0l280c6vs.png" alt="Terminal-2" width="602" height="151"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Navigate to the main branch and create a new branch called Feature/ticket-1&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lidMiLJt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bhbi8lb1m52we2beg8i8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lidMiLJt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bhbi8lb1m52we2beg8i8.png" alt="Feature" width="602" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nibGdpSI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9m1kz76v2blkzijpw7r4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nibGdpSI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9m1kz76v2blkzijpw7r4.png" alt="Terminal-3" width="583" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Connect via SSH the Jenkins-Ansible-Server&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IS_HKBWy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7o732muaooxha869eb4i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IS_HKBWy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7o732muaooxha869eb4i.png" alt="VSCode" width="602" height="106"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_unLktQa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cit7edzdguvruriz1kmn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_unLktQa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cit7edzdguvruriz1kmn.png" alt="VSCode-2" width="583" height="97"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V4h2RYYM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pl9nbrp9pfz6h7445r2i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V4h2RYYM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pl9nbrp9pfz6h7445r2i.png" alt="VSCode-3" width="602" height="91"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create the folders and .yml files directly as shown below.&lt;br&gt;
Inventory folder: contains dev.yml prod.yml staging.yml uat.yml files&lt;br&gt;
Playbook folder: contains common.yml file&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Z68cMO50--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u7dcfbxfm0k0cmdrqmro.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Z68cMO50--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u7dcfbxfm0k0cmdrqmro.png" alt="Inventory-Playbooks" width="272" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set up an ansible inventory where all the host private IP addresses are kept and executed all at once. The 3 webservers' private IPs are kept in this inventory as shown below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IFNT4mj---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c8alu72tnwcqasc6l33f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IFNT4mj---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c8alu72tnwcqasc6l33f.png" alt="Inventory" width="337" height="103"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ansible uses port: 22 as its default and it needs to SSH target servers from the Jenkins- Ansible server using the SSH-AGENT concept. We navigate into the Jenkins-Ansible server using the Termius terminal and try to perform the ansible operation to ping the target-server-A using the command below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--n5SjHy8L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/larf6lvo7wlmgemjwx49.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n5SjHy8L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/larf6lvo7wlmgemjwx49.jpeg" alt="Terminal-4" width="602" height="173"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Y_YfbF5y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/51j5ogtu4kuzecm7o2r2.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y_YfbF5y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/51j5ogtu4kuzecm7o2r2.jpeg" alt="Terminal-5" width="602" height="166"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or Using the SSH to successfully as seen below with the command&lt;/p&gt;

&lt;p&gt;"ssh ubuntu@ipaddress"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sGDCpqpl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ifsn4zb7xk8d4xcvnxjk.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sGDCpqpl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ifsn4zb7xk8d4xcvnxjk.jpeg" alt="Terminal-6" width="602" height="166"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TZBmYnGo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1oc9y0aepp6qys8q4m83.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TZBmYnGo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1oc9y0aepp6qys8q4m83.png" alt="Terminal-7" width="602" height="115"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please note that we have also connected to the target 3 servers to ensure the public key file of the Jenkins- Ansible server is added in the authorized keys file .ssh/ file as shown below&lt;/p&gt;

&lt;p&gt;Firstly, we retrieve the public key from the Jenkins-Ansible server as shown below. Add them into each server as seen below&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--L6Wi27Tk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1o4s4myndbap48pnug7g.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--L6Wi27Tk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1o4s4myndbap48pnug7g.jpeg" alt="Terminal-8" width="602" height="116"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--h2VzhOz1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tzmgfgh6i36d6m15pbr3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--h2VzhOz1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tzmgfgh6i36d6m15pbr3.png" alt="Terminal-9" width="600" height="129"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---U9DmJdz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/20xp9q5dihln73943b5m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---U9DmJdz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/20xp9q5dihln73943b5m.png" alt="Terminal-10" width="602" height="152"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--itpxvjXR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/52ha1i9exvbtda96yts1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--itpxvjXR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/52ha1i9exvbtda96yts1.png" alt="Terminal-11" width="602" height="119"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create the agent ID and confirm the path where the .pem file key is located. Perform the ssh-add operation and confirm the identity is added and listed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_j77N91h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d3bjkxyzfg2g3833ojd8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_j77N91h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d3bjkxyzfg2g3833ojd8.png" alt="ssh" width="602" height="104"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eAVtga6T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ai6ne4rko7qe4sk369c5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eAVtga6T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ai6ne4rko7qe4sk369c5.png" alt="pem" width="464" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can see that the Jenkins-Ansible Server has SSH into the target servers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NXVpwCDJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uoarx11lhgstaddkyi5k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NXVpwCDJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uoarx11lhgstaddkyi5k.png" alt="Terminal-12" width="552" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xRD2MRv---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l3ky2qly84aq0udbge24.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xRD2MRv---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l3ky2qly84aq0udbge24.png" alt="Terminal-13" width="602" height="212"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---z31tIxp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/czpgmzszf4rs9812zaef.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---z31tIxp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/czpgmzszf4rs9812zaef.png" alt="Terminal-14" width="602" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Update the Inventory/dev.yml file and take note that we have 1 ec-2 user and 5 ubuntu servers&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tfEbyAyq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x8gb74wrbpbpdogehewk.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tfEbyAyq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x8gb74wrbpbpdogehewk.jpeg" alt="Inventory-1" width="570" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Change the directory to the playbooks folder and update the common.yml file as shown below. It can be seen that all servers should be executed from the playbooks&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--X0UJla-P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rw321dxz6hkcf61gen97.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--X0UJla-P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rw321dxz6hkcf61gen97.jpeg" alt="Playbooks" width="602" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run some shell script commands by using the Ansible command to ping the dev.yml file as shown below and success depicts all is working as expected.&lt;/p&gt;

&lt;p&gt;ansible all -m ping -i dev.yml&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tl--xNY8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c5apbcuujrfn8uvq5d8d.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tl--xNY8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c5apbcuujrfn8uvq5d8d.jpeg" alt="Ping-Success" width="602" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With the Ansible-playbook command, Install the wireshark from the Jenkins-Ansible server to all other target servers and confirm that each servers received those changes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ogzD-S9H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lvdwj2xwq5bic37be41o.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ogzD-S9H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lvdwj2xwq5bic37be41o.jpeg" alt="Ansible-1" width="602" height="146"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yhmHSva3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tf118dr1c9vatrrfaim7.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yhmHSva3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tf118dr1c9vatrrfaim7.jpeg" alt="Ansible-2" width="602" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check each server to be sure wireshark is installed on them as shown below&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bzWDuvRb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x22qb5hk9rulrxsh20r9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bzWDuvRb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x22qb5hk9rulrxsh20r9.png" alt="WS1" width="415" height="85"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6rScyTJx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/padaiitfhr33q1sxyzha.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6rScyTJx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/padaiitfhr33q1sxyzha.png" alt="WS2" width="467" height="80"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8zH32-Jc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gi9pfo6415x8yb7i87x8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8zH32-Jc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gi9pfo6415x8yb7i87x8.png" alt="WS3" width="472" height="88"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XRua9Ttt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6cwle7fziwroktarndr3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XRua9Ttt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6cwle7fziwroktarndr3.png" alt="WS4" width="449" height="82"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that we confirmed this, we will be pushing our commit into the github and creating a PR and expect Jenkins server to be triggered automatically and builds and artefacts generated.&lt;/p&gt;

&lt;p&gt;Use the "git branch" to know the branch we are one and "git status " to check the status of the untracked files we have. They are shown below&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H6LD3Btu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vusah9lpb3jc7lfl8yps.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H6LD3Btu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vusah9lpb3jc7lfl8yps.jpeg" alt="GIT-1" width="602" height="236"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use "git add inventory" and check to status to confirm the new files have been added.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--miR23pvV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ccmqxpmkpqmqudt0u9iv.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--miR23pvV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ccmqxpmkpqmqudt0u9iv.jpeg" alt="GIT-2" width="602" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add playbooks as they still shows untracked files&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Qqx3wAVh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dn7qi0ys7dprb1zcu3ed.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Qqx3wAVh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dn7qi0ys7dprb1zcu3ed.png" alt="GitHub-3" width="602" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run the git commit with a message tag and set out the git account to be accepted on the terminal. This would require the use of a classic token from git as a password would not be allowed&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HUH1-GFL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6v248u65bnudqqdqv1u2.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HUH1-GFL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6v248u65bnudqqdqv1u2.jpeg" alt="Git-7" width="602" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set up the Url origin and check the remote.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PANL_dh4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1kku1fsv2ab2nm3it6hd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PANL_dh4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1kku1fsv2ab2nm3it6hd.png" alt="Git-7" width="602" height="77"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Navigate to GitHub. Create and merge the PR to the main.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0eL6VhVE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ssn3qxfo8lxz1vjgxhqs.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0eL6VhVE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ssn3qxfo8lxz1vjgxhqs.jpeg" alt="Git-8" width="602" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---1n-OdFr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5uz6ne3r5bqqegv4tpab.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---1n-OdFr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5uz6ne3r5bqqegv4tpab.jpeg" alt="Git-9" width="602" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qNVmnJVm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c1mxd7abw82wsmicw6jt.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qNVmnJVm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c1mxd7abw82wsmicw6jt.jpeg" alt="Git-10" width="602" height="138"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MAuXWBWS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cr1cli846l66uhkqysci.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MAuXWBWS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cr1cli846l66uhkqysci.jpeg" alt="Git-11" width="602" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PR successfully merged and the Jenkins build would be automatically triggered as shown below. 2 jobs were created&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HknrDsDm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lpz8shk8haiur0iwjlqu.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HknrDsDm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lpz8shk8haiur0iwjlqu.jpeg" alt="Git-12" width="602" height="115"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7_jD5vqf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ld76ub4yc8piju7036ym.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7_jD5vqf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ld76ub4yc8piju7036ym.png" alt="Git-13" width="602" height="124"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--f4KHE8n0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/afe43xfsqqvo932ku4yd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--f4KHE8n0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/afe43xfsqqvo932ku4yd.png" alt="Git-14" width="517" height="197"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check the server and view where the build is located&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FpWCOHJH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aks0nzucrnu8wxftih9d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FpWCOHJH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aks0nzucrnu8wxftih9d.png" alt="Terminal-9" width="602" height="150"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations!!!! You have just automated your routine tasks by implementing an Ansible project&lt;/p&gt;

</description>
      <category>ansible</category>
    </item>
  </channel>
</rss>
