Github Workflow部署Angular到EC2失败:tar空归档错误求助
问题:Github Workflow部署Angular到EC2时出现tar空归档错误
我是Github Workflow新手,尝试通过它将Angular应用部署到EC2实例,使用的Workflow配置如下:
name: Deploy on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install dependencies run: npm ci - name: Build application run: npm run build --configuration test-website-angular - name: Archive build artifacts run: tar -zcvf build.tar.gz dist/ deploy: needs: build runs-on: ubuntu-latest steps: - name: Transfer build artifacts to EC2 instance uses: appleboy/scp-action@master with: host: ${{ secrets.HOST }} username: ec2-user key: ${{ secrets.SSH_PRIVATE_KEY }} source: build.tar.gz target: /var/www/html/ - name: Extract and clean up build artifacts run: ssh -i ~/.ssh/id_rsa ec2-user@test.com 'tar -zxvf /var/www/angular/build.tar.gz -C /var/www/angular/ && rm /var/www/angular/build.tar.gz'
构建环节执行正常,但在部署步骤中出现如下错误:
tar all files into /tmp/3998473294/TeBaBukwyd.tar tar: empty archive exit status 1
解决方案
1. 核心问题:作业间未传递构建产物
Github Actions的每个作业(job)都是独立的运行环境,build作业生成的build.tar.gz不会自动传递到deploy作业中。deploy作业里找不到这个文件,scp-action只能打包空归档,导致报错。
2. 具体修复步骤
步骤1:在build作业中上传构建产物到Github Artifacts
在build作业的最后添加上传artifacts的步骤,把build.tar.gz保存起来:
- name: Upload build artifact uses: actions/upload-artifact@v3 with: name: build-tar path: build.tar.gz
步骤2:在deploy作业中下载Artifacts
在deploy作业的开头添加下载步骤,拉取之前上传的归档文件:
- name: Download build artifact uses: actions/download-artifact@v3 with: name: build-tar
步骤3:修正SSH命令中的路径不一致问题
你的scp目标路径是/var/www/html/,但后续SSH命令却指向/var/www/angular/,路径不匹配会导致解压失败。同时不要硬写主机地址,用secrets中的HOST变量:
- name: Extract and clean up build artifacts run: ssh -i ~/.ssh/id_rsa ec2-user@${{ secrets.HOST }} 'tar -zxvf /var/www/html/build.tar.gz -C /var/www/html/ && rm /var/www/html/build.tar.gz'
3. 完整修正后的Workflow配置
name: Deploy on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install dependencies run: npm ci - name: Build application run: npm run build --configuration test-website-angular - name: Archive build artifacts run: tar -zcvf build.tar.gz dist/ - name: Upload build artifact uses: actions/upload-artifact@v3 with: name: build-tar path: build.tar.gz deploy: needs: build runs-on: ubuntu-latest steps: - name: Download build artifact uses: actions/download-artifact@v3 with: name: build-tar - name: Transfer build artifacts to EC2 instance uses: appleboy/scp-action@master with: host: ${{ secrets.HOST }} username: ec2-user key: ${{ secrets.SSH_PRIVATE_KEY }} source: build.tar.gz target: /var/www/html/ - name: Extract and clean up build artifacts run: ssh -i ~/.ssh/id_rsa ec2-user@${{ secrets.HOST }} 'tar -zxvf /var/www/html/build.tar.gz -C /var/www/html/ && rm /var/www/html/build.tar.gz'
内容的提问来源于stack exchange,提问作者PilotPatel
相关产品推荐
相关产品推荐

