jenkins管道中面临SSH连接问题

jenkins管道中面临SSH连接问题,jenkins,Jenkins,我在AWS EC2上有2台服务器。我想将我们的NodeJS应用程序部署到这两个实例中。 如果这两个实例都可用,我下面的代码可以正常工作 节点(标签:“测试”){ " } } 但我的用例是 若其中一个服务器将停止,那个么构建作业必须成功,并且应用程序应该部署在可用实例上 目前,如果停止server1并运行jenkins作业,我将面临超时错误。取决于您的设置 1) 您可以将您的节点连接到jenkins作为slaves vi ssh slaves插件。 然后,您可以通过 node('node_labe

我在AWS EC2上有2台服务器。我想将我们的NodeJS应用程序部署到这两个实例中。 如果这两个实例都可用,我下面的代码可以正常工作

节点(标签:“测试”){

" }

}

但我的用例是

若其中一个服务器将停止,那个么构建作业必须成功,并且应用程序应该部署在可用实例上

目前,如果停止server1并运行jenkins作业,我将面临超时错误。

取决于您的设置

1) 您可以将您的节点连接到jenkins作为slaves vi ssh slaves插件。 然后,您可以通过

node('node_label') {
  sh('any command here')
}
2) 您可以使用ssh代理插件。您可以将私钥放入Jenkins凭据中 3) 使用重试

retry(3) {
// your code
}
取决于您的设置

1) 您可以将您的节点连接到jenkins作为slaves vi ssh slaves插件。 然后,您可以通过

node('node_label') {
  sh('any command here')
}
2) 您可以使用ssh代理插件。您可以将私钥放入Jenkins凭据中 3) 使用重试

retry(3) {
// your code
}

您可以通过aws cli命令检查ec2实例的状态,并根据它们的状态进行部署:

如果你想试一试,你必须使用“CloudBees AWS凭据”插件在jenkins中声明你的AWS凭据

并向管道中添加类似的内容:

        withCredentials([[$class: 'AmazonWebServicesCredentialsBinding',
        accessKeyVariable: 'aV',
        secretKeyVariable: 'sV',
        credentialsId: 'id_of_your_credentials',]]) {
            sh '''
            AWS_ACCESS_KEY_ID=${aV}\
            AWS_SECRET_ACCESS_KEY=${sV}\
            AWS_DEFAULT_REGION=us-east-1\
            aws ec2 describe-instances --instance-id --filters Name=instance-state-name,Values=running  --query "Reservations[*].Instances[?Tags[?Key == 'Name' && contains(Value, 'server1')]].[Tags[3].Value,NetworkInterfaces[0].PrivateIpAddress,InstanceId,State.Name]" --output text
            '''
    }
与AWS cli命令无关: 我不知道您是如何管理服务器的,我假设您使用标记“Name”来标识您的服务器


此外,我认为你应该考虑Max建议并使用SSH插件来管理配置、凭据等等…

< P>你可以通过AWS CLI命令检查EC2实例状态,并且根据他们的状态做或不部署:

如果你想试一试,你必须使用“CloudBees AWS凭据”插件在jenkins中声明你的AWS凭据

并向管道中添加类似的内容:

        withCredentials([[$class: 'AmazonWebServicesCredentialsBinding',
        accessKeyVariable: 'aV',
        secretKeyVariable: 'sV',
        credentialsId: 'id_of_your_credentials',]]) {
            sh '''
            AWS_ACCESS_KEY_ID=${aV}\
            AWS_SECRET_ACCESS_KEY=${sV}\
            AWS_DEFAULT_REGION=us-east-1\
            aws ec2 describe-instances --instance-id --filters Name=instance-state-name,Values=running  --query "Reservations[*].Instances[?Tags[?Key == 'Name' && contains(Value, 'server1')]].[Tags[3].Value,NetworkInterfaces[0].PrivateIpAddress,InstanceId,State.Name]" --output text
            '''
    }
与AWS cli命令无关: 我不知道您是如何管理服务器的,我假设您使用标记“Name”来标识您的服务器


此外,我认为你应该考虑Max建议并使用SSH插件来管理配置、凭据等等…

使用命令捕获尝试,使用命令捕捉詹金斯命令,如下所示。我已经安装了詹金斯在PROD和2从机上创建了一个用于测试和其他的DEV。s url我们正在配置我们的管道作业。我们在作业中定义了类似于测试或开发的标签。每个环境都有2台服务器。我想在其中部署我们的应用程序。首先,我们在两台服务器中建立了ssh连接,然后部署我们的应用程序。如果停止一台服务器,我将面临问题。我已创建jenkins安装程序,如下所示。我已安装jenprod上的kins和2台从机创建了一台用于测试,另一台用于开发。通过使用prod jenkins url,我们正在配置管道作业。我们在作业中定义了类似于测试或开发的标签。每个环境都有2台服务器。我想在其中部署我们的应用程序。首先我们在两台服务器中建立ssh连接,然后部署我们的应用程序。我是fac如果我停止一台服务器,则会导致问题。