Drone中ECR镜像插件settings标签下YAML变量展开问题求助
问题本质
Drone插件的settings字段与commands字段的变量解析逻辑不同:commands里的变量由shell解析,而settings字段的变量需要使用Drone自身的模板插值语法,而非shell变量写法。
正确写法
在tags字段中使用Drone的模板语法${{ 环境变量名 }}引用变量,示例配置如下:
kind: pipeline name: ecr-push # 全局环境变量 environment: GLOBAL_TAG: "v${DRONE_BUILD_NUMBER}" steps: - name: push-to-ecr image: plugins/ecr settings: access_key: "${{ AWS_ACCESS_KEY_ID }}" secret_key: "${{ AWS_SECRET_ACCESS_KEY }}" repo: 987654321012.dkr.ecr.us-east-1.amazonaws.com/org/application-name # 使用Drone模板语法引用全局变量 tags: - ${{ GLOBAL_TAG }} # 直接引用Drone内置变量 - ${{ DRONE_COMMIT_SHA }} # 步骤级环境变量 environment: STEP_TAG: "build-${DRONE_BUILD_NUMBER}" settings: tags: - ${{ STEP_TAG }}
之前写法失败的原因
你尝试的$VAR、${VAR}、$$VAR都是shell层面的变量写法,无法被Drone的settings字段解析:
$VAR:Drone不会处理该写法,直接将$VAR作为标签字符串传递给ECR插件,不符合镜像标签格式规范${VAR}:Drone模板语法不识别该写法,导致变量解析为空,最终标签变成空字符串$$VAR:会被转义为$VAR,同样被插件视为无效标签
验证方式
配置完成后,可在Drone流水线日志中查看ECR插件的执行参数,确认标签已被正确替换为变量值。
内容的提问来源于stack exchange,提问作者Swapnil Sawe
相关产品推荐
相关产品推荐

