如何将 AWS 凭证与 Jenkins 一起使用以部署到 Elastic Beanstalk?

Posted

技术标签:

【中文标题】如何将 AWS 凭证与 Jenkins 一起使用以部署到 Elastic Beanstalk?【英文标题】:How do I use AWS credentials with Jenkins to deploy to Elastic Beanstalk? 【发布时间】:2019-06-24 10:21:39 【问题描述】:

我已在 Jenkins 中通过 /credentials 输入 AWS 凭证,但是它们没有显示在 AWS Elastic Beanstalk 插件中的构建后步骤的下拉列表中。

如果我单击验证凭据,我会收到这个奇怪的错误。

失败 com.amazonaws.SdkClientException:无法从链中的任何提供商加载 AWS 凭证:[EnvironmentVariableCredentialsProvider:无法从环境变量(AWS_ACCESS_KEY_ID(或 AWS_ACCESS_KEY)和 AWS_SECRET_KEY(或 AWS_SECRET_ACCESS_KEY))加载 AWS 凭证,SystemPropertiesCredentialsProvider:无法加载 AWS 凭证来自 Java 系统属性(aws.accessKeyId 和 aws.secretKey),com.amazonaws.auth.profile.ProfileCredentialsProvider@5c932b96:配置文件不能为空,com.amazonaws.auth.EC2ContainerCredentialsProviderWrapper@32abba7:在 @ 处找不到请求的元数据987654323@ 在 com.amazonaws.auth.AWSCredentialsProviderChain.getCredentials(AWSCredentialsProviderChain.java:136)

我不知道它从哪里得到那个 IP 地址。当我在 Jenkins 目录中搜索该 IP 时,我出现了

-bash-4.2$ grep -r 169.254.169.254 *
plugins/ec2/AMI-Scripts/ubuntu-init.py:conn = httplib.HTTPConnection("169.254.169.254")

该文件的内容在这里:https://pastebin.com/3ShanSSw


实际上有 2 个不同的 Amazon Elastic Beanstalk 插件。

AWSEB Deployment Plugin,v 0.3.19,奥尔德林·莱尔 AWS Beanstalk Publisher Plugin,v 1.7.4,大卫坦纳

它们都不起作用。两者都不会在下拉列表中显示凭据。自更新 Jenkins 以来,我什至无法将“部署到 Elastic Beanstalk”显示为第一个(v0.3.19)的构建后步骤,即使它是唯一安装的。

对于第二个插件 (v1.7.4),我看到了这个屏幕截图:

当我填写我可以填写的内容并运行它时,它会给出错误

No credentials provided for build!!!
Environment found (environment id='e-yfwqnurxh6', name='appenvironment'). Attempting to update environment to version label 'sprint5-13'
'appenvironment': Attempt 0/5
'appenvironment': Problem:
com.amazonaws.services.elasticbeanstalk.model.AWSElasticBeanstalkException: No Application Version named 'sprint5-13' found. (Service: AWSElasticBeanstalk; Status Code: 400; Error Code: InvalidParameterValue; Request ID: af9eae4f-ad56-426e-8fe4-4ae75548f3b1)

我尝试将 S3 子任务添加到 Elastic Beanstalk 部署,但失败并出现异常。

没有为构建提供凭据!!! 根文件对象是一个文件。我们假设它是一个 zip 文件,这没关系。 将文件 awseb-4831053374102655095.zip 上传为 s3://appname-sprint5-15.zip 错误:构建步骤因异常而失败 com.amazonaws.services.s3.model.AmazonS3Exception:您提供的 XML 格式不正确或未针对我们发布的架构进行验证(服务:Amazon S3;状态代码:400;错误代码:MalformedXML;请求 ID:7C4734153DB2BC36; S3 扩展请求 ID:x7B5HflSeiIw++NGosos08zO5DxP3WIzrUPkZOjjbBv856os69QRBVgic62nW3GpMtBj1IxW7tc=),S3 扩展请求 ID:x7B5HflSeiIw++NGosos08zO5DxP3WIzrUPkZOjjbBvt3GpM

【问题讨论】:

“我不知道它从哪里得到那个 IP 地址。”这就是 EC2 元数据服务,它是向运行在 AWS 上的应用程序公开凭证的一种非常好的方式。如果您的 jenkins 实例在 AWS 上,请查看它,它会改变游戏规则。默认凭据提供程序链检查几个位置,通常在硬编码凭据、环境变量、~/.aws 中的默认配置文件等之后检查元数据服务。虽然是 java,docs.aws.amazon.com/sdk-for-java/v1/developer-guide/…,虽然 java,很好地解释了这些步骤它需要。 但是IP已经死了。无法访问该站点。 ERR_ADDRESS_UNREACHABLE 你在 ec2 上吗? 詹金斯在 EC2 上。我在我的笔记本电脑上。如果我从 Jenkins 服务器执行 curl http://169.254.169.254/latest/meta-data/iam/security-credentials/,则会收到 404 错误和最小的 404 html 页面。 我想,那么,您还没有为托管您的 jenkins 服务器的 EC2 实例提供实例配置文件和/或角色。 aws.amazon.com/blogs/security/… 【参考方案1】:

Jenkins 已经过时且无人维护。我添加了 Post Build Task 插件,installed eb tool 作为jenkins 用户,在作业目录中运行eb init,编辑.elasticbeanstalk/config.yml 以添加行

deploy:
  artifact: target/AppName-Sprint5-SNAPSHOT-bin.zip

然后在shell命令中输入部署构建。

/var/lib/jenkins/.local/bin/eb deploy -l sprint5-$BUILD_NUMBER

【讨论】:

【参考方案2】:

对于 Elelastic beanstalk 插件,配置 AWS 密钥的正确位置是 Jenkins Master 配置

  http://jenkinsURL/configure

【讨论】:

以上是关于如何将 AWS 凭证与 Jenkins 一起使用以部署到 Elastic Beanstalk?的主要内容,如果未能解决你的问题,请参考以下文章

何时或如何将 QSqlTableModel 上的 fetchMore() 与 SQLite 数据库一起使用以使 rowCount() 工作?

使用 Gitlab 仪表板 - 如何将 grafonnet 与 jsonnet 一起使用以生成我可以与 Grafana 一起使用的 json 文件

Jenkins 中的 Nexus 凭证与 sbt

如何将 React Context API 与 useReducer 一起使用以遵循与 Redux 类似的风格 [关闭]

python 有关如何将Flask与requests-oauthlib一起使用以使用OAuth 2令牌获取GitHub用户配置文件的示例。

python 有关如何将Flask与requests-oauthlib一起使用以使用OAuth 2令牌获取GitHub用户配置文件的示例。