GitHub Action执行Sonar扫描前遭遇Docker拉取速率限制错误
解决GitHub Action中SonarQube镜像未认证拉取速率限制问题
问题核心
你定义的Docker登录步骤执行前,SonarQube扫描动作的容器构建阶段会自动拉取sonarsource/sonar-scanner-cli:10.0镜像,此时还未完成Docker Hub认证,触发未认证用户的拉取速率限制(返回429错误)。
可行解决方案
1. 在自托管Runner上提前配置Docker Hub认证
你的Job运行在自托管Runner ros-devops-runners上,直接在Runner机器上完成Docker Hub登录,后续所有镜像拉取都会使用认证状态:
- 在Runner机器上执行命令:
登录状态会持久化,后续GitHub Action的所有Docker操作都会复用这个认证。docker login -u YOUR_DOCKERHUB_USERNAME -p YOUR_DOCKERHUB_TOKEN
2. 利用GitHub缓存跳过镜像拉取
使用actions/cache缓存已拉取的Sonar Scanner镜像,避免重复从Docker Hub拉取:
修改你的Job步骤,在登录后添加缓存步骤:
jobs: security-scans: name: Security Scans runs-on: ros-devops-runners timeout-minutes: 20 steps: - name: 1. Login to Docker Hub uses: docker/login-action@v3 with: username: ${{ vars.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: 2. Cache Sonar Scanner image uses: actions/cache@v3 id: cache-sonar-image with: path: /var/lib/docker/images key: ${{ runner.os }}-docker-sonar-scanner-10.0 - name: 3. Pull Sonar Scanner CLI image (if not cached) if: steps.cache-sonar-image.outputs.cache-hit != 'true' run: docker pull sonarsource/sonar-scanner-cli:10.0 # 后续添加你的SonarQube扫描步骤 - name: 4. Run SonarQube Scan uses: sonarsource/sonar-scanner-cli-action@v2 # 你的扫描配置...
注意:缓存Docker镜像的路径可能因Runner的Docker存储驱动不同有所调整,如果/var/lib/docker/images不生效,可以尝试/var/lib/docker/overlay2(overlay2驱动下)。
3. 强制Sonar Action使用已登录的Docker上下文
如果使用的Sonar Action支持指定已拉取的镜像,直接引用本地已拉取的镜像,避免Action重新拉取:
比如在Sonar扫描步骤中指定image参数(以sonarsource/sonar-scanner-cli-action为例):
- name: Run SonarQube Scan uses: sonarsource/sonar-scanner-cli-action@v2 with: image: sonarsource/sonar-scanner-cli:10.0 # 其他扫描参数...
这样Action会直接使用本地已拉取的镜像,不会再从Docker Hub拉取。
内容的提问来源于stack exchange,提问作者Akshay Vijay Jain
相关产品推荐
相关产品推荐

