我在VSTS(Visual Studio online)中为我的ASP.NET核心应用程序配置CI。 我已经添加了“docker-compose build”任务来构建定义,但它失败并出现错误:
Step 4/9 : RUN dotnet restore QuizService.sln && dotnet publish QuizService.sln -c Release -o obj/Docker/publish ---> Running in 7ea0cf1881d1 ... rence = 'SilentlyContinue'; dotnet restore QuizService.sln && dotnet ... The token '&&' is not a valid statement separator in this version. + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : InvalidEndOfLine Service 'quizservice' failed to build: The command 'powershell -Command $ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue'; dotnet restore QuizService.sln && dotnet publish QuizService.sln -c Release -o obj/Docker/publish' returned a non-zero code: 1 ##[error]Building quizservice ##[error]Service 'quizservice' failed to build: The command 'powershell -Command $ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue'; dotnet restore QuizService.sln && dotnet publish QuizService.sln -c Release -o obj/Docker/publish' returned a non-zero code: 1 ##[error]C:\ProgramData\Chocolatey\bin\docker-compose.exe failed with return code: 1
问题在于我的dockerfile在线:
RUN dotnet restore QuizService.sln && dotnet publish QuizService.sln -c Release -o obj/Docker/publish
不知何故,码头工人不理解'&&'运营商: 令牌'&&'不是有效的语句分隔符。异常本身似乎与powershell有关,而不是与docker有关。 Poweshell没有'&&'语法,但为什么它开始使用powershell for RUN命令而不是cmd.exe?
当我在我的开发机器上本地构建时,它就像一个魅力。
有人遇到同样的问题吗?
答案 0 :(得分:4)
问题在于构建代理类型不正确。 "托管VS2017"构建代理程序无法构建项目,因为它使用带有Windows容器的docker(以及PowerShell作为默认shell)。但是在我的开发机器上,我使用docker和linux容器(使用/ bin / sh作为默认shell)。选择正确的构建代理类型可以解决问题(因为/ bin / sh理解'&&')。
答案 1 :(得分:2)
答案 2 :(得分:0)
如果您安装了docker桌面,则默认情况下它以Windows Container开头。
从Docker Desktop菜单中,选择切换到Linux容器,以使&&符号起作用。