如何在 Amazon S3 中设置私有 Maven 存储库

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

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 完成。