如何创建 jenkins 作业以部署在多个 ec2 实例上
How to create jenkins job to deploy on multiple ec2 instances
我是云新手,我创建了一个 Jenkins 服务器和 tomcat 个服务器,
我已经成功地测试了简单的 CICD 实现。
现在我想知道如何将我的代码部署到多个服务器。
例如。如果我有 4 个安装了 tomcat 的不同实例。那如何将单个源代码部署到不同的服务器上呢?
您没有提到,但我假设您正在使用带有声明性管道的 Jenkinsfile,因为您确实应该这样做。不要尝试在网页上配置所有内容,它不可扩展且没有版本控制。
首先,对于多次使用的步骤,我总是将其设置为共享库。基本上,您为共享库设置一个 git 存储库并将其导入 Jenkinsfile。阅读此 official document 了解详细说明。 一种更简单的快速执行方法是将它们作为函数简单地放在 Jenkinsfile 的末尾。
在我必须部署到多个位置的 Jenkinsfile 中,这是我将要执行的操作的一个最小示例。
@Library('shared-library') _
pipeline {
agent any
environment
{
DEPLOYMENT_URL_A = 'a.example.com'
DEPLOYMENT_URL_B = 'b.example.com'
}
stages {
stage ('Build') {
steps {
script {
YOUR BUILD STEPS HERE
}
}
}
}
stage ('Deployment') {
steps {
script {
deployment("${deploymentUrlA}")
deployment("${deploymentUrlB}")
}
}
}
}
}
post {
always {
deleteDir()
}
}
}
请注意 deployment 是 shared-library 中的一个方法。可能是这样的(我在所有服务器上都设置了 jenkins 用户以进行远程部署)。
#!/usr/bin/env groovy
def call(deploymentUrl) {
sh """ssh -o StrictHostKeyChecking=no \
jenkins@${deploymentUrl} \
YOUR DEPLOYMENT STEP HERE"""
}
但这绝对不是一个可扩展的解决方案。对于更大的一组动态服务器,您可能希望将服务器列表存储在别处,然后在运行时获取它,并将它作为列表传递给部署函数。
我是云新手,我创建了一个 Jenkins 服务器和 tomcat 个服务器, 我已经成功地测试了简单的 CICD 实现。 现在我想知道如何将我的代码部署到多个服务器。 例如。如果我有 4 个安装了 tomcat 的不同实例。那如何将单个源代码部署到不同的服务器上呢?
您没有提到,但我假设您正在使用带有声明性管道的 Jenkinsfile,因为您确实应该这样做。不要尝试在网页上配置所有内容,它不可扩展且没有版本控制。
首先,对于多次使用的步骤,我总是将其设置为共享库。基本上,您为共享库设置一个 git 存储库并将其导入 Jenkinsfile。阅读此 official document 了解详细说明。 一种更简单的快速执行方法是将它们作为函数简单地放在 Jenkinsfile 的末尾。
在我必须部署到多个位置的 Jenkinsfile 中,这是我将要执行的操作的一个最小示例。
@Library('shared-library') _
pipeline {
agent any
environment
{
DEPLOYMENT_URL_A = 'a.example.com'
DEPLOYMENT_URL_B = 'b.example.com'
}
stages {
stage ('Build') {
steps {
script {
YOUR BUILD STEPS HERE
}
}
}
}
stage ('Deployment') {
steps {
script {
deployment("${deploymentUrlA}")
deployment("${deploymentUrlB}")
}
}
}
}
}
post {
always {
deleteDir()
}
}
}
请注意 deployment 是 shared-library 中的一个方法。可能是这样的(我在所有服务器上都设置了 jenkins 用户以进行远程部署)。
#!/usr/bin/env groovy
def call(deploymentUrl) {
sh """ssh -o StrictHostKeyChecking=no \
jenkins@${deploymentUrl} \
YOUR DEPLOYMENT STEP HERE"""
}
但这绝对不是一个可扩展的解决方案。对于更大的一组动态服务器,您可能希望将服务器列表存储在别处,然后在运行时获取它,并将它作为列表传递给部署函数。