问题
由于后台Java代码需要,发布jar到maven私有库后,另外一个Java项目,通过maven私有库再拉去这个jar使用。这里就需要部署一个maven私有库。
1. 创建域
打开CodeArtifact主页,开始创建域,如下图:
创建dev域,如下图:
按照上述可以,依次创建test,uat,prod域。最后结果,如下图:
2.创建存储库
点击“创建存储库”,如下图:
设置名称,如下图:
下一步设置域,如下图:
点击创建存储库,如下图:
创建完成后,点击连接说明,如下图:
3.代码集成测试
3.1拉取
接下来,我们在本地Spring项目中拉去代码配置,主要依据如下图配置:
pom.xml
在Spring项目的pom.xml中设置maven私有库,如下图:
主要是添加如下内容:
<repositories>
<repository>
<id>dev-maven</id>
<url>https://dev-xxxx.d.codeartifact.us-east-1.amazonaws.com/maven/maven</url>
</repository>
</repositories>
注意这里的id
是dev-maven
。
settings.xml
打开文件~/.m2/setting.xml
,添加如下内容:
<server>
<id>dev-maven</id>
<username>aws</username>
<password>${env.CODEARTIFACT_AUTH_TOKEN}</password>
</server>
注意这里的id
是dev-maven
与pom.xml文件中是一样的。其中的环境变了CODEARTIFACT_AUTH_TOKEN是通过如下命令获得:
export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain dev --domain-owner xxx --region us-east-1 --query authorizationToken --output text`
到这里spring项目中拉取maven私有库,就没问题了。
3.2发布
pom.xml
在项目pom.xml,添加如下内容即可:
<distributionManagement>
<repository>
<id>dev-maven</id>
<name>dev-maven</name>
<url>https://dev-xxxx.d.codeartifact.us-east-1.amazonaws.com/maven/maven/</url>
</repository>
</distributionManagement>
运行mve deploy
命令,就可以发布自己的jar到私有maven库了。
4.CodeBuild中使用
竟然在Spring项目中使用了私有库,自然就需要调整CodeBuild的配置,我们先找到已经正在使用的CodeBuild角色,如下图:
找到正在使用的codebuild角色后,添加codebuild对codeartifact的AWSCodeArtifactReadOnlyAccess读权限,如下图:
创建自定义codeartifact push权限策略
权限策略内容如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "codeartifactPublish",
"Effect": "Allow",
"Action": [ "codeartifact:PublishPackageVersion",
"codeartifact:PutPackageMetadata"
],
"Resource": "*"
}
]
}
具体配置如下图:
设置名称,如下图:
创建完成后,将该策略,也绑定到codebuild使用角色中,最后角色权限策略如下图:
接下来,这需要修改codebuild的构建脚本,主要是添加如下内容:
pre_build:
commands:
- pip3 install awscli --upgrade --user
- export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --query authorizationToken --output text`
到这里就是AWS上面的Maven私有库的基本使用方式。
参考:
- 在 mvn 中使用 CodeArtifact
- 在 CodeBuild 中使用 Maven 程序包