Table of Contents
Deploying Node.js applications manually can be time-consuming and error-prone, especially when managing multiple servers or frequent updates. Automating this process ensures consistency, saves time, and reduces human error. This guide provides a step-by-step approach to automate Node.js deployment using Ansible and Jenkins, two powerful tools in the DevOps ecosystem.
Prerequisites
- Basic knowledge of Node.js, Ansible, and Jenkins
- Installed Node.js and npm on target servers
- Jenkins server set up and running
- Ansible control node configured
- SSH access to target servers
Step 1: Prepare Your Node.js Application
Ensure your Node.js application is ready for deployment. This includes having a package.json file, a start script, and any necessary environment variables. Push your code to a version control system like Git for easy access during deployment.
Step 2: Create an Ansible Playbook
Write an Ansible playbook to automate the deployment steps. This includes cloning the repository, installing dependencies, and starting the application.
Sample Ansible Playbook
Save this as deploy_nodejs.yml.
---
- name: Deploy Node.js Application
hosts: node_servers
vars:
repo_url: 'https://github.com/yourusername/your-nodejs-app.git'
app_dir: /var/www/nodeapp
tasks:
- name: Ensure application directory exists
file:
path: "{{ app_dir }}"
state: directory
- name: Clone repository
git:
repo: "{{ repo_url }}"
dest: "{{ app_dir }}"
version: main
- name: Install dependencies
npm:
path: "{{ app_dir }}"
state: present
- name: Start application with pm2
command: pm2 restart all || pm2 start index.js --name nodeapp
args:
chdir: "{{ app_dir }}"
Step 3: Configure Jenkins Job
Create a new Jenkins pipeline job to automate the deployment process. Use the following pipeline script to trigger Ansible playbook execution.
Sample Jenkins Pipeline Script
pipeline {
agent any
stages {
stage('Checkout') {
steps {
git 'https://github.com/yourusername/your-nodejs-app.git'
}
}
stage('Deploy') {
steps {
sshagent(['your-ssh-credentials']) {
sh 'ansible-playbook -i hosts deploy_nodejs.yml'
}
}
}
}
}
Step 4: Run the Deployment
Trigger the Jenkins job manually or set it to run automatically on code commits. Jenkins will execute the Ansible playbook, which will deploy or update your Node.js application on the target servers.
Additional Tips
- Use environment variables for sensitive data like API keys or passwords.
- Configure pm2 for process management and auto-start on server reboot.
- Test your Ansible playbook and Jenkins pipeline in a staging environment before deploying to production.
Automation streamlines your deployment process, allowing for rapid updates and consistent environments. Combining Ansible and Jenkins provides a robust solution for managing Node.js applications at scale.