如何在 Amazon S3 中设置私有 Maven 存储库
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2800+ 小伙伴加入学习 ,欢迎点击围观
Amazon S3
是保存私有
Maven
工件的完美场所。我假设您将公共工件保存在 Maven Central 中,因为您希望每个人都可以使用它们。私有工件是您不希望除团队成员以外的任何人都可以看到的工件。因此,您希望在那里部署您的
.jar
文件并确保它们仅对您的团队可见。以下是我们如何在
所有
Java 项目中执行此操作。
创建 S3 存储桶
首先,您创建一个新的 S3 存储桶。我建议您使用您的项目域和前缀来命名它。例如,对于
repo.teamed.io
,
repo
是前缀,
teamed.io
是域。
无需为此存储桶配置任何权限。只需通过 Amazon S3 控制台 创建它。
创建 IAM 用户
创建一个新的 IAM 用户。如果您的项目名称是
teamed
,我建议您将其命名为
teamed-maven
。
向用户添加新的“内联策略”:
{
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::repo.teamed.io",
"arn:aws:s3:::repo.teamed.io/*"
]
}
]
}
此处,
repo.teamed.io
是您在一分钟前创建的 S3 存储桶的名称。
确保您有这个新用户的“访问密钥”。它必须看起来类似于:
{
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::repo.teamed.io",
"arn:aws:s3:::repo.teamed.io/*"
]
}
]
}
密钥为 20 个字符(全部大写),秘密为 40 个字符。
扩展
settings.xml
将此配置添加到您的
~/.m2/settings.xml
文件中:
{
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::repo.teamed.io",
"arn:aws:s3:::repo.teamed.io/*"
]
}
]
}
配置
pom.xml
将此配置添加到
pom.xml
:
{
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::repo.teamed.io",
"arn:aws:s3:::repo.teamed.io/*"
]
}
]
}
然后,配置
S3 Wagon
,也在
pom.xml
中:
{
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::repo.teamed.io",
"arn:aws:s3:::repo.teamed.io/*"
]
}
]
}
你准备好了。您只需从命令行运行 Maven 即可部署您的工件:
{
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::repo.teamed.io",
"arn:aws:s3:::repo.teamed.io/*"
]
}
]
}
配置 s3auth.com
现在您希望通过提供安全凭据以安全模式在浏览器中查看这些工件。我建议您使用 s3auth.com ,如 S3 存储桶的基本 HTTP 身份验证中所述。
配置 Rultor
另一个建议是配置 rultor.com 以自动将工件部署到 S3。
首先,用这个
Rultor 遥控器
加密你的
settings.xml
:
{
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::repo.teamed.io",
"arn:aws:s3:::repo.teamed.io/*"
]
}
]
}
您应该使用 GitHub 项目的名称,而不是
me/test
。
结果,您将获得一个名为
settings.xml.asc
的新文件。将其添加到项目的根目录,然后提交并推送。该文件包含您的秘密信息,但只有 Rultor 服务器可以解密它。
在项目的根目录中创建一个
.rultor.yml
文件(Rultor
参考页面
更详细地解释了这种格式):
{
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::repo.teamed.io",
"arn:aws:s3:::repo.teamed.io/*"
]
}
]
}
现在是时候看看它们是如何协同工作的了。在 GitHub 问题跟踪器中创建一个新票证并将类似的内容发布到其中(阅读有关 Rultor 命令 的更多信息):
{
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::repo.teamed.io",
"arn:aws:s3:::repo.teamed.io/*"
]
}
]
}
您将在几秒钟内收到回复。其余的将由 Rultor 完成。