如何为AWS Code Artifact配置自定义上游仓库源?
AWS Code Artifact 自定义Maven上游源(如Jitpack)的实现方案
AWS Code Artifact目前不支持直接添加自定义URL的外部仓库作为上游源,不管是控制台操作还是associate-external-connection命令,都只能用官方预设的那7个外部源。要实现用它缓存Jitpack这类自定义Maven仓库的依赖,可以通过以下代理方案解决:
步骤1:创建无上游的Code Artifact Maven仓库
先在Code Artifact里建一个没有预设上游的空白Maven仓库,用来缓存自定义仓库的依赖:
- CLI命令方式:
aws codeartifact create-repository --domain <你的CodeArtifact域名> --domain-owner <AWS账号ID> --repository <自定义仓库名称> --description "缓存Jitpack等自定义Maven仓库的代理仓库"
- 控制台方式:进入Code Artifact控制台,创建仓库时跳过“上游源”选择,直接完成创建。
步骤2:配置构建工具,让Code Artifact作为自定义仓库的代理
以Gradle为例,在项目的build.gradle(或settings.gradle)里配置仓库顺序,优先从Code Artifact拉取,找不到再从Jitpack拉取——Code Artifact会自动缓存从Jitpack拉取到的依赖,后续请求直接走缓存:
repositories { // 先访问Code Artifact仓库 maven { url "https://<你的域名>-<账号ID>.d.codeartifact.<AWS区域>.amazonaws.com/maven/<自定义仓库名称>/" credentials { username = "aws" password = awsCodeArtifactToken // 需提前获取Code Artifact认证令牌 } } // 当Code Artifact无对应依赖时,从Jitpack拉取 maven { url "https://jitpack.io" } }
关于认证令牌的优化
可以通过脚本自动获取Code Artifact的认证令牌,避免手动更新。比如在Gradle里添加一个任务:
task getCodeArtifactToken { doLast { def tokenProcess = "aws codeartifact get-authorization-token --domain <你的CodeArtifact域名> --domain-owner <AWS账号ID> --query authorizationToken --output text".execute() tokenProcess.waitFor() project.ext.awsCodeArtifactToken = tokenProcess.in.text.trim() } } // 编译任务执行前先获取令牌 tasks.withType(JavaCompile).configureEach { dependsOn getCodeArtifactToken }
协议说明
因为是Maven仓库场景,全程使用HTTPS协议即可——Code Artifact本身通过HTTPS提供服务,自定义Maven仓库(如Jitpack)也支持HTTPS,既符合Maven的标准访问方式,也能保证依赖传输的安全性。
内容的提问来源于stack exchange,提问作者Dragas
相关产品推荐
相关产品推荐

