You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI使用Docker执行器时Job失败,Shell执行器正常求助

GitLab CI Docker执行器执行gradlew.bat报错解决方法

问题描述

配置了两个GitLab CI Runner:一个用Docker执行器,另一个用Shell执行器。Shell执行器运行正常,但Docker执行器每次执行./gradlew.bat --stop步骤都会失败,错误日志如下:

BUILD SUCCESSFUL in 25s
5 actionable tasks: 5 executed
$ ./gradlew.bat --stop
./gradlew.bat: line 1: @rem: command not found
./gradlew.bat: line 2: @rem: command not found
./gradlew.bat: line 3: @rem: command not found
./gradlew.bat: line 4: syntax error near unexpected token `('
./gradlew.bat: line 4: `@rem Licensed under the Apache License, Version 2.0 (the "License");'
Cleaning up project directory and file based variables
ERROR: Job failed: exit code 1

原YAML配置:

build:
  stage: build
  script:
    - cd myproject/
    - ./gradlew build -x test
    - ./gradlew.bat --stop

test:
  stage: test
  script:
    - cd myproject/
    - ./gradlew test
    - ./gradlew.bat --stop

原因分析

Docker执行器默认使用Linux系统镜像,而gradlew.bat是Windows专属的批处理脚本,Linux系统无法识别@rem这类Windows批处理指令,直接执行就会触发语法错误。Shell执行器运行在Windows环境中,所以能正常处理bat脚本。

解决方法

方法1:使用Linux版Gradle脚本替换bat文件

将配置中的./gradlew.bat --stop替换为Linux环境对应的./gradlew --stop,修改后的YAML如下:

build:
  stage: build
  script:
    - cd myproject/
    - ./gradlew build -x test
    - ./gradlew --stop

test:
  stage: test
  script:
    - cd myproject/
    - ./gradlew test
    - ./gradlew --stop

方法2:改用Windows Docker镜像(仅适用于需Windows环境的场景)

如果必须在Windows环境下运行任务,需指定Windows版本的Docker镜像(例如mcr.microsoft.com/windows/servercore:ltsc2019),同时确保GitLab Runner配置支持Windows容器。注意这类镜像体积较大,仅推荐给确实需要Windows环境的场景。

内容的提问来源于stack exchange,提问作者z3r0-21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 23:40:21