无法触发自定义(手动)Bitbucket Pipeline,yml报错缺少import属性
自定义Bitbucket Pipeline触发失败问题解决
问题场景
- 自动Pipeline的执行步骤可正常运行,但手动触发自定义
staging-deploy流水线时失败 - 流水线预期执行流程:
- 构建镜像并推送到DockerHub
- 通过SSH连接到DO Droplet,拉取镜像并运行容器
错误提示
There is an error in your bitbucket-pipelines.yml at [pipelines > custom > staging-deploy]. Required attributes are not set: import
原配置代码
image: atlassian/default-image:3 pipelines: custom: staging-deploy: deploy: - step: name: Deploy to DockerHub services: - docker script: - export IMAGE_NAME=$DOCKER_HUB_USERNAME/$PROJECT_NAME:$BITBUCKET_COMMIT - docker build -t $IMAGE_NAME . - docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD - docker push $IMAGE_NAME - step: name: Deploy to Droplet script: - export IMAGE_NAME=$DOCKER_HUB_USERNAME/$PROJECT_NAME:$BITBUCKET_COMMIT - pipe: atlassian/ssh-run:0.6.1 variables: SSH_USER: $SSH_USER SERVER: $SSH_SERVER COMMAND: 'docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD; docker pull $IMAGE_NAME; docker stop $PROJECT_NAME; docker rm $PROJECT_NAME; docker run -d --restart always --name $PROJECT_NAME -p $SERVER_PORT:$SERVER_PORT $IMAGE_NAME; docker image prune -a -f'
问题原因及修复方案
自定义Pipeline的语法规则和自动Pipeline不同,不能在自定义流水线节点下直接使用deploy关键字。自动Pipeline中的deploy是用于指定部署阶段的专属关键字,但自定义流水线要求直接将步骤列表挂载在流水线名称节点下,不需要额外的层级包裹。
修改后的正确配置:
image: atlassian/default-image:3 pipelines: custom: staging-deploy: - step: name: Deploy to DockerHub services: - docker script: - export IMAGE_NAME=$DOCKER_HUB_USERNAME/$PROJECT_NAME:$BITBUCKET_COMMIT - docker build -t $IMAGE_NAME . - docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD - docker push $IMAGE_NAME - step: name: Deploy to Droplet script: - export IMAGE_NAME=$DOCKER_HUB_USERNAME/$PROJECT_NAME:$BITBUCKET_COMMIT - pipe: atlassian/ssh-run:0.6.1 variables: SSH_USER: $SSH_USER SERVER: $SSH_SERVER COMMAND: 'docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD; docker pull $IMAGE_NAME; docker stop $PROJECT_NAME; docker rm $PROJECT_NAME; docker run -d --restart always --name $PROJECT_NAME -p $SERVER_PORT:$SERVER_PORT $IMAGE_NAME; docker image prune -a -f'
核心修改点:移除staging-deploy节点下的deploy层级,直接将两个step作为列表项挂载在staging-deploy下,符合自定义流水线的结构要求。
内容的提问来源于stack exchange,提问作者Alooza
相关产品推荐
相关产品推荐

