Integrating with Cloud Platforms
1. Deploying to AWS
| Option | Values | Notes |
|---|---|---|
| aws.credentials.id | aws-credentials-id |
Identifier for AWS credentials in Jenkins |
| aws.region | us-east-1 |
Target AWS region for deployment |
| aws.ec2.instance.id | i-1234567890abcdef0 |
EC2 instance ID to deploy to |
| aws.s3.bucket.name | my-deployment-bucket |
S3 bucket name for artifact storage |
Example: Deploying to EC2 Instance
pipeline {
agent any
stages {
stage('Deploy to EC2') {
steps {
withCredentials([aws(
credentialsId: 'aws-credentials-id',
region: 'us-east-1'
)]) {
sh '''
aws ec2 run-instances --image-id ami-12345678 --count 1 --instance-type t2.micro
'''
}
}
}
}
}
Example: Uploading Artifact to S3
pipeline {
agent any
stages {
stage('Upload to S3') {
steps {
withCredentials([aws(
credentialsId: 'aws-credentials-id',
region: 'us-east-1'
)]) {
sh '''
aws s3 cp ./build/artifact.jar s3://my-deployment-bucket/
'''
}
}
}
}
}
Note: Ensure IAM roles or credentials have appropriate permissions for EC2 and S3 operations.
Warning: Be cautious with S3 bucket policies and ensure artifacts are securely stored.
2. Using AWS CodeDeploy
| Property | Value | Description |
|---|---|---|
| aws.codedeploy.application.name | my-app |
Name of the AWS CodeDeploy application |
| aws.codedeploy.deployment.group.name | my-deployment-group |
Name of the deployment group to deploy to |
| aws.codedeploy.region | us-east-1 |
AWS region where CodeDeploy is configured |
| aws.codedeploy.s3.bucket | my-deployment-bucket |
S3 bucket containing deployment artifacts |
Example: Jenkins Pipeline with AWS CodeDeploy
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'npm install'
sh 'npm run build'
}
}
stage('Deploy') {
steps {
withCredentials([aws(
accessKeyVariable: 'AWS_ACCESS_KEY_ID',
secretKeyVariable: 'AWS_SECRET_ACCESS_KEY'
)]) {
deployToAWSCodeDeploy(
applicationName: 'my-app',
deploymentGroupName: 'my-deployment-group',
region: 'us-east-1',
s3Bucket: 'my-deployment-bucket'
)
}
}
}
}
}
Note: Ensure that the Jenkins instance has proper IAM permissions to interact with AWS CodeDeploy and S3.
Warning: The
deployToAWSCodeDeploy step requires the AWS CodeDeploy plugin to be installed in Jenkins.
Deployment Configuration Summary
- Application:
my-app - Deployment Group:
my-deployment-group - Region:
us-east-1 - S3 Bucket:
my-deployment-bucket
3. Deploying to Azure
| Option | Values | Notes |
|---|---|---|
| azure-app-service-name | my-web-app |
Name of the Azure App Service to deploy to |
| azure-resource-group | my-resource-group |
Resource group containing the App Service |
| azure-subscription-id | 12345678-1234-1234-1234-123456789012 |
Azure subscription ID |
| azure-credentials-id | azure-credentials |
Credentials ID stored in Jenkins Credentials Store |
Example: Deploying to Azure App Service
pipeline {
agent any
stages {
stage('Deploy to Azure') {
steps {
azureWebAppPublish appServiceName: 'my-web-app',
resourceGroup: 'my-resource-group',
subscriptionId: '12345678-1234-1234-1234-123456789012',
credentialsId: 'azure-credentials'
}
}
}
}
Note: Ensure the Azure CLI is installed and configured in Jenkins for deployment to work properly.
Warning: The
azure-credentials must have appropriate permissions to deploy to the specified Azure App Service.
| Deployment Method | Description | Support Status |
|---|---|---|
| Azure Web App Publish | Deploys artifacts to Azure App Service using the Azure CLI | NEW in Jenkins 2.401+ |
| Azure CLI Script | Runs custom Azure CLI commands via shell script | DEPRECATED in favor of Azure Web App Publish |
4. Using Azure DevOps Integration
| Feature | Description | Configuration |
|---|---|---|
| Azure DevOps Plugin | Enables Jenkins to integrate with Azure DevOps services for CI/CD pipelines. | azure-pipelines-plugin |
| Service Connection | Represents a secure connection to Azure resources. | Defined in Jenkins UI under Manage Jenkins > Configure System |
| Pipeline Trigger | Triggers Jenkins builds when changes occur in Azure Repos or Azure Pipelines. | Configurable via Build Triggers in job configuration |
Example: Configure Azure DevOps Service Connection
Manage Jenkins > Configure System > Azure DevOps Service Connection
Example: Trigger Pipeline on Azure Repos Change
pipeline {
agent any
triggers {
upstream upstreamProjectNames: 'azure-pipeline-job', threshold: 'SUCCESS'
}
stages {
stage('Build') {
steps {
echo 'Building...'
}
}
}
}
Note: Ensure Azure DevOps service connection has appropriate permissions to access repositories and pipelines.
Warning: Azure DevOps integration requires a valid service principal or user account with sufficient permissions.
5. Deploying to Google Cloud Platform
| Option | Values | Notes |
|---|---|---|
| gcp.project.id | my-gcp-project |
Google Cloud Project ID |
| gcp.service.account.json | path/to/service-account.json |
Path to service account JSON key file |
| gcp.region | us-central1 |
Region for GCP resources |
| gcp.zone | us-central1-a |
Zone for GCP resources |
Example: Deploying to GCP Compute Engine
pipeline {
agent any
stages {
stage('Deploy to GCP') {
steps {
script {
sh "gcloud compute instances create my-instance \
--project=my-gcp-project \
--zone=us-central1-a \
--machine-type=e2-medium \
--image-family=ubuntu-2004 \
--image-project=ubuntu-os-cloud"
}
}
}
}
}
Note: Ensure the service account has
compute.instances.create permission.
Warning: Make sure to set up proper IAM roles for the Jenkins service account.
| Deployment Method | Description | Supported GCP Services |
|---|---|---|
| Compute Engine | Deploy virtual machines | App Engine, Compute Engine, Cloud Functions |
| App Engine | Deploy applications to App Engine | App Engine, Cloud Functions |
| Cloud Functions | Deploy serverless functions | Cloud Functions, Cloud Run |
6. Using Cloud-Specific Plugins
| Plugin | Description | Supported Cloud Platforms | Features |
|---|---|---|---|
| Amazon EC2 Plugin | Enables Jenkins to launch and manage EC2 instances as build agents. | AWS | Dynamic agent provisioning, instance termination, SSH key management |
| Google Compute Engine Plugin | Allows Jenkins to use GCP instances as build agents. | GCP | Auto-scaling, instance template support, service account authentication |
| Azure VM Agents Plugin | Enables Jenkins to use Azure Virtual Machines as build agents. | Azure | Dynamic VM creation, image customization, resource group management |
| Kubernetes Plugin | Integrates Jenkins with Kubernetes for containerized builds. | Kubernetes, OpenShift | Dynamic pod provisioning, namespace isolation, resource limits |
Example: Configure Amazon EC2 Plugin
<org.jenkinsci.plugins.ec2.EC2Cloud>
<name>aws-cloud</name>
<region>us-east-1</region>
<credentialsId>aws-credentials</credentialsId>
<instanceCap>10</instanceCap>
<idleMinutes>30</idleMinutes>
<maxTotalUses>-1</maxTotalUses>
<usePrivateAddress>false</usePrivateAddress>
</org.jenkinsci.plugins.ec2.EC2Cloud>
Example: Configure Kubernetes Plugin
apiVersion: v1
kind: ConfigMap
metadata:
name: jenkins-kubernetes-config
data:
jenkins.yaml: |
cloud:
kubernetes:
name: "k8s-cloud"
serverUrl: "https://kubernetes.default.svc"
namespace: "jenkins"
credentialsId: "kubeconfig"
containerCapStr: "10"
templates:
- name: "jenkins-agent"
image: "jenkins/inbound-agent:latest"
instanceCap: 5
idleMinutes: 10
Note: Ensure that the Jenkins instance has appropriate permissions to interact with cloud resources (e.g., IAM roles for AWS, service accounts for GCP).
7. Managing Cloud Credentials
| Property | Value | Description |
|---|---|---|
| cloud.provider | aws, gcp, azure |
Cloud provider for credential management |
| credential.id | aws-credentials-123 |
Unique identifier for the credential |
| credential.type | aws-access-key, gcp-service-account |
Type of credential to store |
Example: AWS Access Key Configuration
credentials {
aws {
accessKey = 'AKIAIOSFODNN7EXAMPLE'
secretKey = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
}
}
Example: GCP Service Account Configuration
credentials {
gcp {
serviceAccountJson = '''{
"type": "service_account",
"project_id": "my-project-id",
"private_key_id": "1234567890abcdef",
"private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
"client_email": "my-service-account@my-project-id.iam.gserviceaccount.com"
}'''
}
}
Note: Ensure credentials are stored securely using Jenkins' built-in credential store or external secret management tools like HashiCorp Vault.
Warning: Never hardcode credentials in Jenkinsfiles or configuration files. Always use the credential store or environment variables.
8. Using Cloud Storage
| Property | Value | Description |
|---|---|---|
| cloud.storage.type | aws-s3, gcs, azure-blob |
Specifies the cloud storage provider to use |
| cloud.storage.bucket | my-jenkins-bucket |
Name of the storage bucket or container |
| cloud.storage.region | us-east-1 |
Region where the storage is located (AWS S3) |
| cloud.storage.credentials.id | aws-credentials |
ID of the credentials stored in Jenkins |
Example: Configure S3 Storage in Jenkins
pipeline {
agent any
stages {
stage('Upload to S3') {
steps {
script {
withCredentials([aws(credentialsId: 'aws-credentials', accessKeyVariable: 'AWS_ACCESS_KEY_ID', secretKeyVariable: 'AWS_SECRET_ACCESS_KEY')]) {
sh '''
aws s3 cp ./build-artifacts s3://my-jenkins-bucket/artifacts/ --recursive
'''
}
}
}
}
}
}
Note: Ensure that the Jenkins user has appropriate IAM permissions to access the S3 bucket.
Warning: Be cautious with sensitive data in storage paths. Use environment variables or Jenkins credentials for secure access.
9. Implementing Cloud-Native Pipelines
Cloud-native Jenkins pipelines leverage containerization and orchestration platforms to enable scalable, resilient CI/CD workflows. These pipelines are designed to run in cloud environments with minimal infrastructure dependencies.
| Feature | Description | Implementation |
|---|---|---|
| Jenkins Pipeline as Code | Define pipelines using Jenkinsfile in source control | Use Declarative or Scripted Pipeline syntax |
| Kubernetes Plugin | Run Jenkins agents on Kubernetes clusters | Configure pod templates for dynamic agent provisioning |
| Docker Integration | Use Docker containers for build environments | Define container stages in Jenkinsfile |
| ECS Plugin | Run Jenkins agents on Amazon ECS | Define task definitions and launch configurations |
| Azure Container Instances | Use Azure ACI for ephemeral build agents | Configure Jenkins to spawn containers on demand |
Example: Kubernetes Pipeline Configuration
pipeline {
agent {
kubernetes {
label 'jenkins-agent'
yamlFile 'agent-pod.yaml'
}
}
stages {
stage('Build') {
steps {
sh 'mvn clean compile'
}
}
}
}
Example: Docker Agent Pipeline
pipeline {
agent {
docker {
image 'node:18-alpine'
args '-v /home/jenkins/.npmrc:/root/.npmrc'
}
}
stages {
stage('Test') {
steps {
sh 'npm test'
}
}
}
}
Note: Ensure that Jenkins has appropriate permissions to interact with cloud platforms (e.g., Kubernetes RBAC, AWS IAM roles).
Key Benefits of Cloud-Native Pipelines
- Scalability: Dynamically provision agents based on demand
- Resource Efficiency: Reduce infrastructure overhead
- Consistency: Use standardized container images for builds
- Portability: Run pipelines across different cloud environments
10. Using Serverless Deployments
| Deployment Method | Description | Configuration | Notes |
|---|---|---|---|
| AWS Lambda | Deploy Jenkins jobs to AWS Lambda functions | lambda.deploy.region=us-east-1 |
Requires AWS CLI and IAM permissions |
| Google Cloud Functions | Execute Jenkins pipelines on GCF | gcf.project.id=my-project |
Uses service account for authentication |
| Azure Functions | Run Jenkins builds on Azure Functions | azure.function.app.name=jenkins-app |
Supports multiple triggers (HTTP, Timer) |
Example: Deploying to AWS Lambda
aws lambda create-function \
--function-name jenkins-deploy \
--runtime java17 \
--role arn:aws:iam::123456789012:role/lambda-execution-role \
--handler com.example.JenkinsHandler::handleRequest \
--zip-file fileb://jenkins-deploy.zip
Example: Jenkins Pipeline for GCF
pipeline {
agent any
stages {
stage('Deploy to GCF') {
steps {
script {
sh "gcloud functions deploy jenkins-pipeline \
--runtime java17 \
--trigger-http \
--entry-point com.example.JenkinsEntryPoint"
}
}
}
}
}
Note: Serverless deployments reduce infrastructure costs but may introduce cold start latency.
Warning: Ensure proper IAM roles and permissions are configured for serverless function execution.