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
相关产品推荐
相关产品推荐

