使用GitHub Actions部署至Azure AKS时找不到deployment.yaml的解决问询
问题解决:GitHub Actions部署AKS时找不到deployment.yaml文件
问题描述
我正尝试通过GitHub Actions将应用部署至已有的Azure AKS集群,流程是构建Docker镜像并推送至Azure容器注册表(ACR),再用该镜像部署到AKS。但执行kubectl apply -f deployment.yaml时提示找不到文件,执行echo $(ls -a)也没返回任何文件,本地路径是/home/runner/work/App/App。以下是我的acr.yml配置文件:
name: Build and Deploy to AKS on: push: branches: [ "main" ] jobs: build-and-push: runs-on: ubuntu-latest steps: # Step 1: Checkout the code - uses: actions/checkout@v4 # Step 2: Log in to Azure Container Registry (ACR) - uses: azure/docker-login@v2 with: login-server: ${{ secrets.ACR_LOGIN_SERVER }} # ACR login server username: ${{ secrets.REGISTRY_USERNAME }} # ACR username password: ${{ secrets.REGISTRY_PASSWORD }} # ACR password # Step 3: Build and push Docker image to ACR - run: | docker build . -t ${{ secrets.ACR_LOGIN_SERVER }}/app:${{ github.sha }} docker build . -t ${{ secrets.ACR_LOGIN_SERVER }}/app:latest deploy-to-aks: needs: build-and-push runs-on: ubuntu-latest steps: # Step 4: Log in to Azure - uses: azure/login@v2 with: creds: ${{ secrets.AZURE_CREDENTIALS }} # Step 5: Set up kubectl with AKS credentials - name: Set up kubectl run: | az aks get-credentials --resource-group ${{ secrets.AKS_RESOURCE_GROUP }} --name ${{ secrets.AKS_CLUSTER_NAME }} # Step 5.5: Check if files are present - run: | echo "Current directory: $(pwd)" echo $(ls -a) # Step 6: Deploy to AKS (Apply deployment and service files) - name: Deploy to AKS run: | kubectl apply -f deployment.yaml kubectl apply -f service.yaml
核心原因
GitHub Actions的每个作业都是独立的虚拟机实例,deploy-to-aks作业没有执行代码检出步骤,所以当前工作目录下没有仓库中的deployment.yaml和service.yaml文件。
修复方案
1. 给deploy-to-aks作业添加代码检出
在deploy-to-aks的步骤最开头添加actions/checkout@v4,拉取仓库代码到运行环境:
deploy-to-aks: needs: build-and-push runs-on: ubuntu-latest steps: # 新增:检出仓库代码 - uses: actions/checkout@v4 # Step 4: Log in to Azure - uses: azure/login@v2 with: creds: ${{ secrets.AZURE_CREDENTIALS }} # 后续步骤保持不变...
2. 确认文件路径(若文件不在根目录)
如果deployment.yaml等文件存放在子目录(比如k8s文件夹),执行kubectl apply时需要指定完整路径:
kubectl apply -f k8s/deployment.yaml kubectl apply -f k8s/service.yaml
3. 更优方案:使用官方Azure部署动作简化流程
用azure/aks-set-context和azure/kubernetes-deploy动作替代手动执行kubectl,自动处理镜像替换和文件路径,配置更简洁:
deploy-to-aks: needs: build-and-push runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: azure/login@v2 with: creds: ${{ secrets.AZURE_CREDENTIALS }} # 自动设置AKS上下文 - uses: azure/aks-set-context@v3 with: resource-group: ${{ secrets.AKS_RESOURCE_GROUP }} cluster-name: ${{ secrets.AKS_CLUSTER_NAME }} # 部署到AKS,自动替换manifest中的镜像地址 - uses: azure/kubernetes-deploy@v4 with: manifests: | deployment.yaml service.yaml images: ${{ secrets.ACR_LOGIN_SERVER }}/app:${{ github.sha }}
注:如果你的deployment.yaml中镜像字段用了占位符(比如image: <IMAGE_PLACEHOLDER>),这个动作会自动替换为构建好的镜像地址。
额外验证点
- 确认
deployment.yaml和service.yaml已经提交到GitHub仓库的main分支 - 添加检出步骤后,再次执行
echo $(ls -a)应该能看到这些文件
内容的提问来源于stack exchange,提问作者Tensing2009
相关产品推荐
相关产品推荐

