Docker构建Java Maven项目:AWS CodeArtifact外部访问令牌配置方法
在AWS基础设施外配置Maven settings.xml访问AWS CodeArtifact依赖
1. 生成CodeArtifact临时认证令牌
CodeArtifact的访问令牌是临时的(有效期12小时),需通过AWS CLI生成,执行以下命令(替换占位符为你的实际信息):
aws codeartifact get-authorization-token \ --domain <你的CodeArtifact域名> \ --domain-owner <你的AWS账号ID> \ --region <CodeArtifact所在区域> \ --query authorizationToken \ --output text
执行后会输出一串令牌字符串,后续配置会用到。
2. 配置Maven settings.xml
修改你的settings.xml(本地路径一般为~/.m2/settings.xml),添加以下配置:
服务器认证配置(servers节点)
<servers> <server> <id>codeartifact-repo</id> <!-- 用户名固定填aws即可,CodeArtifact会忽略实际用户名,仅校验令牌 --> <username>aws</username> <!-- 这里替换为第一步生成的令牌 --> <password>CODEARTIFACT_AUTH_TOKEN</password> </server> </servers>
仓库配置(repositories节点)
<repositories> <repository> <!-- **这里的id必须和上面server节点的id完全一致** --> <id>codeartifact-repo</id> <!-- 替换占位符为你的CodeArtifact仓库URL,格式参考:https://<域名>-<账号ID>.d.codeartifact.<区域>.amazonaws.com/maven/<仓库名>/ --> <url>https://your-domain-1234567890.d.codeartifact.us-east-1.amazonaws.com/maven/your-repo/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
3. Docker构建时的安全传递方式
不要硬编码令牌到Dockerfile或settings.xml中,推荐用构建参数动态注入:
- 先把
settings.xml中的密码替换为占位符:
<password>CODEARTIFACT_PLACEHOLDER</password>
- 在Dockerfile中添加以下步骤:
# 定义构建参数接收令牌 ARG CODEARTIFACT_TOKEN # 复制本地settings.xml到容器的Maven配置目录 COPY settings.xml /root/.m2/settings.xml # 替换占位符为实际令牌 RUN sed -i "s/CODEARTIFACT_PLACEHOLDER/${CODEARTIFACT_TOKEN}/g" /root/.m2/settings.xml
- 执行Docker构建命令时,动态传入令牌:
docker build \ --build-arg CODEARTIFACT_TOKEN=$(aws codeartifact get-authorization-token --domain <你的域名> --domain-owner <账号ID> --region <区域> --query authorizationToken --output text) \ -t your-service-image .
注意事项
- 确保执行AWS CLI的账号拥有
codeartifact:GetAuthorizationToken权限,可通过IAM策略配置该权限。 - 令牌有效期为12小时,过期后需重新生成,可编写脚本自动化这一步骤。
- 如果你的项目是多模块构建,确保父pom或子模块的依赖声明中,
common-utilities的groupId、artifactId、version与上传到CodeArtifact的完全一致。
内容的提问来源于stack exchange,提问作者Alfredo Marin
相关产品推荐
相关产品推荐

