Github Action切换目录不生效问题求助
GitHub Action目录切换不生效问题分析与解决
问题现象
在GitHub Action拉取请求工作流中,尝试通过run: cd ${{ github.workspace }}/demo_project切换目录,但后续步骤出现以下异常:
mkdir _build创建的文件夹位于${{ github.workspace }}根目录,而非预期的demo_project目录下nuget restore抛出错误:
Input file does not exist: D:\demo_project.csproj.
问题根源
GitHub Action的每个run步骤都是独立的Shell会话,cd命令的作用范围仅局限于当前步骤。执行完cd步骤后,后续步骤会自动回到默认工作目录(即${{ github.workspace }}),因此之前的目录切换无法持久生效。
解决方案
有两种可靠的解决方式:
方式1:使用working-directory参数(推荐)
为每个需要在demo_project目录下执行的步骤添加working-directory参数,直接指定该步骤的工作目录,无需手动切换:
name: Publish demo on: push: branches: - 'develop' pull_request: branches: - 'develop' jobs: web-deploy: name: Deploy runs-on: windows-latest steps: - name: Get latest code uses: actions/checkout@v3 - name: Setup MSBuild uses: microsoft/setup-msbuild@v1 - name: Setup NuGet uses: NuGet/setup-nuget@v1.1.1 - name: Create Build Directory run: mkdir _build working-directory: ${{ github.workspace }}/demo_project - name: Restore Packages run: nuget restore demo_project.csproj working-directory: ${{ github.workspace }}/demo_project - name: Build Solution run: | msbuild.exe demo_project.csproj /nologo /nr:false /p:DeployOnBuild=true /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:platform="Any CPU" /p:configuration="Release" /p:PublishUrl="_build" working-directory: ${{ github.workspace }}/demo_project - name: Sync files uses: SamKirkland/FTP-Deploy-Action@4.3.3 with: local-dir: "demo_project/_build" server: <server> username: <username> password: ${{ secrets.password }}
方式2:在同一run块中组合cd与后续命令
如果不想使用working-directory,可以将cd命令和后续需要执行的命令放在同一个run块里,确保在同一个Shell会话中执行:
# 示例:将目录切换、创建文件夹、恢复包的操作合并到一个步骤 - name: Prepare & Restore Packages run: | cd ${{ github.workspace }}/demo_project mkdir _build nuget restore demo_project.csproj
内容的提问来源于stack exchange,提问作者Nomic
相关产品推荐
相关产品推荐

