将ASP.NET Core部署到Azure VM时遇dotnet: command not found问题
问题描述
我在Microsoft Azure中创建并配置了一台VM,正通过GitHub Actions将ASP.NET Core应用部署至该Azure VM。deploy.yml文件中的所有步骤均成功执行,但最后一步抛出错误:
dotnet: command not found
尽管dotnet已安装且我已配置了环境变量路径,但仍出现该问题,疑似路径配置存在异常。
以下是deploy.yml文件内容:
name: Deploy to Azure VM on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: '8.x' - name: Cache .NET packages uses: actions/cache@v2 with: path: | ~/.nuget/packages ~/.dotnet key: ${{ runner.os }}-dotnet-${{ hashFiles('**/*.csproj') }} restore-keys: | ${{ runner.os }}-dotnet- - name: Install .NET Core on Azure VM uses: appleboy/ssh-action@master with: host: ${{ secrets.AZURE_VM_IP_ADDRESS }} username: ${{ secrets.AZURE_VM_USERNAME }} key: ${{ secrets.AZURE_VM_SSH_PRIVATE_KEY }} script: | wget https://dot.net/v1/dotnet-install.sh chmod +x dotnet-install.sh sudo ./dotnet-install.sh --install-dir /usr/share/dotnet --version latest export PATH=$PATH:/usr/share/dotnet - name: Build and publish ASP.NET Core app run: | dotnet restore dotnet build -c Release dotnet publish -c Release -o ./publish - name: Cache published files uses: actions/cache@v2 with: path: | ./publish key: ${{ runner.os }}-dotnet-publish-${{ hashFiles('**/*.csproj') }} restore-keys: | ${{ runner.os }}-dotnet-publish- - name: Create /applocation folder on Azure VM uses: appleboy/ssh-action@master with: host: ${{ secrets.AZURE_VM_IP_ADDRESS }} username: ${{ secrets.AZURE_VM_USERNAME }} key: ${{ secrets.AZURE_VM_SSH_PRIVATE_KEY }} script: | sudo mkdir -p /applocation sudo chown $USER:$USER /applocation - name: Copy files to Azure VM uses: appleboy/scp-action@master with: host: ${{ secrets.AZURE_VM_IP_ADDRESS }} username: ${{ secrets.AZURE_VM_USERNAME }} key: ${{ secrets.AZURE_VM_SSH_PRIVATE_KEY }} source: './publish' target: '/applocation' - name: SSH into Azure VM and deploy uses: appleboy/ssh-action@master with: host: ${{ secrets.AZURE_VM_IP_ADDRESS }} username: ${{ secrets.AZURE_VM_USERNAME }} key: ${{ secrets.AZURE_VM_SSH_PRIVATE_KEY }} script: | cd /applocation source ~/.bashrc || source ~/.bash_profile || true export PATH=$PATH:/usr/share/dotnet echo "Current PATH: $PATH" which dotnet || true dotnet AzureVirtualMachineDeploymentDemo2.dll - name: Clean up run: | rm -rf ./publish
解决方案
核心问题
- 每次
appleboy/ssh-action执行的是独立SSH会话,之前会话设置的PATH不会保留到后续会话 dotnet-install.sh默认不会自动将dotnet路径写入全局环境变量,仅当前临时会话生效
具体修复步骤
1. 安装dotnet时配置全局环境变量
修改Install .NET Core on Azure VM步骤的脚本,将dotnet路径写入系统全局profile文件,确保所有会话都能读取:
wget https://dot.net/v1/dotnet-install.sh chmod +x dotnet-install.sh sudo ./dotnet-install.sh --install-dir /usr/share/dotnet --version latest # 将dotnet路径添加到全局环境变量文件 echo 'export PATH=$PATH:/usr/share/dotnet' | sudo tee /etc/profile.d/dotnet.sh # 让当前会话立即生效 source /etc/profile.d/dotnet.sh
2. 直接用绝对路径执行dotnet(最可靠)
在最后部署步骤中,跳过依赖PATH的环节,直接使用dotnet的绝对路径执行:
cd /applocation /usr/share/dotnet/dotnet AzureVirtualMachineDeploymentDemo2.dll
3. 可选:验证dotnet安装状态
如果问题仍存在,在部署脚本中先确认dotnet文件是否存在且可执行:
cd /applocation # 检查文件存在性与权限 ls -la /usr/share/dotnet/dotnet if [ -x /usr/share/dotnet/dotnet ]; then /usr/share/dotnet/dotnet --version fi
修复后的关键配置片段
- name: Install .NET Core on Azure VM uses: appleboy/ssh-action@master with: host: ${{ secrets.AZURE_VM_IP_ADDRESS }} username: ${{ secrets.AZURE_VM_USERNAME }} key: ${{ secrets.AZURE_VM_SSH_PRIVATE_KEY }} script: | wget https://dot.net/v1/dotnet-install.sh chmod +x dotnet-install.sh sudo ./dotnet-install.sh --install-dir /usr/share/dotnet --version latest echo 'export PATH=$PATH:/usr/share/dotnet' | sudo tee /etc/profile.d/dotnet.sh source /etc/profile.d/dotnet.sh - name: SSH into Azure VM and deploy uses: appleboy/ssh-action@master with: host: ${{ secrets.AZURE_VM_IP_ADDRESS }} username: ${{ secrets.AZURE_VM_USERNAME }} key: ${{ secrets.AZURE_VM_SSH_PRIVATE_KEY }} script: | cd /applocation /usr/share/dotnet/dotnet AzureVirtualMachineDeploymentDemo2.dll
内容的提问来源于stack exchange,提问作者Goober
相关产品推荐
相关产品推荐

