CDK Pipeline部署Fargate时,Docker构建找不到凭据文件.mysecrets
问题根源分析
你遇到的文件找不到问题,核心原因是CDK流水线的Synth阶段与资产发布(Docker构建)阶段是完全独立的CodeBuild任务,两者的文件系统和工作环境相互隔离:
- 你在Synth阶段生成的
.mysecrets文件仅存在于Synth任务的运行容器中,不会自动同步到后续的Docker构建任务环境里。 - 你配置的
DockerImageAsset指定了./App/Subfolder作为构建目录,即便文件能传递过来,.mysecrets也不在这个目录下,Docker构建时自然无法找到。
解决方案
推荐直接在资产构建阶段生成凭据文件,避免跨阶段传递敏感信息的安全风险,具体修改如下:
修改资产发布阶段的CodeBuild配置
在assetPublishingCodeBuildDefaults中添加凭据拉取和文件生成逻辑,确保.mysecrets出现在Docker构建的目标目录下:
assetPublishingCodeBuildDefaults: { partialBuildSpec: BuildSpec.fromObject({ env: { variables: { DOCKER_BUILDKIT: '1', }, 'secrets-manager': { TOKEN: `${NugetCredentialsArn}:NUGET_TOKEN`, USER: `${NugetCredentialsArn}:NUGET_USER` } }, phases: { pre_build: { commands: [ // 进入Docker构建的目标目录,生成凭据文件 'cd ./App/Subfolder', 'echo TOKEN=${TOKEN} >> .mysecrets', 'echo USER=${USER} >> .mysecrets', ] } } }), }
确保Dockerfile正确使用Secret
同时要保证你的Dockerfile.aws启用了BuildKit并正确引用Secret:
# 必须声明使用支持BuildKit的Dockerfile语法 # syntax=docker/dockerfile:1.4 # 示例:将Secret内容写入容器内的指定位置 RUN --mount=type=secret,id=mysecrets,target=/tmp/.mysecrets \ cat /tmp/.mysecrets >> /app/nuget.config
内容的提问来源于stack exchange,提问作者KatKibo
相关产品推荐
相关产品推荐

