Jef*_*mer 5 java kotlin docker amazon-ecr testcontainers
GenericContainer
我正在尝试以编程方式从托管在私有 AWS ECR 存储库中的 docker 映像创建并启动 Testcontainers 。这将用于自动化集成测试,将在本地和 CICD 管道内运行。我知道我需要进行身份验证才能下载映像,但我不清楚如何最好地从 AWS 获取身份验证信息并将其传递到 Testcontainers 上下文。我已阅读 Testcontainers 文档,但尚未找到有关如何对私有 docker 容器存储库进行身份验证的详细信息。
到目前为止我的代码是:
import org.testcontainers.containers.GenericContainer
import org.testcontainers.utility.DockerImageName
const val imageName = "<account>.dkr.ecr.<region>.amazonaws.com/<imageName>:<version>"
val testContainer = GenericContainer(DockerImageName.parse(imageName))
testContainer.start()
Run Code Online (Sandbox Code Playgroud)
当然,这会产生错误:
at org.testcontainers.shaded.com.github.dockerjava.core.DefaultInvocationBuilder.execute(DefaultInvocationBuilder.java:247)
at org.testcontainers.shaded.com.github.dockerjava.core.DefaultInvocationBuilder.lambda$executeAndStream$1(DefaultInvocationBuilder.java:269)
at java.base/java.lang.Thread.run(Thread.java:833)
com.github.dockerjava.api.exception.InternalServerErrorException: Status 500: {"message":"Head \"https://<account>.dkr.ecr.<region>.amazonaws.com/v2/<imageName>/manifests/<version>\": no basic auth credentials"}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我发现 Testcontainers 对于所有事情来说都很直观,但这个问题让我难住了。如何将 Testcontainers 与私有 AWS ECR 存储库结合使用?
你好。
以下步骤至少适用于(Ubuntu + testcontainers:1.19.3)。
不知道这是否是最佳方法,但对我来说效果很好。
默认情况下,要拉取测试容器使用的图像DefaultPullPolicy
:
package org.testcontainers.images;
....
/**
* The default imagePullPolicy, which pulls the image from a remote repository only if it does not exist locally
*/
@Slf4j
@ToString
class DefaultPullPolicy extends AbstractImagePullPolicy {
@Override
protected boolean shouldPullCached(DockerImageName imageName, ImageData localImageData) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
如上所述,仅当您本地没有图像时,它才会尝试获取图像。
因此,要在本地运行通过testcontainers使用私有 AWS ECR 映像的测试,您可以执行以下两件事:
aws ecr get-login-password --region ${your_region} | \
docker login --username AWS --password-stdin ${your_ecr_registry}
Run Code Online (Sandbox Code Playgroud)
并以标准方式运行测试,例如./mvnw clean test
。然后,如果图像无法在本地访问,那么testcontainers将为您拉取它。当然,您的用户必须在 ECR 中拥有适当的权限。
然后要在GitHub Actions上运行它,您无需更改任何内容:
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ECR_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_ECR_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
- name: Setup Maven Action
uses: s4u/setup-maven-action@v1.7.0
with:
java-version: '21'
java-distribution: 'temurin'
- name: Test with Maven
run: ./mvnw --batch-mode --no-transfer-progress clean test
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2073 次 |
最近记录: |