Что такое Stage dependency failed?

Ошибка Stage dependency failed возникает, когда один этап CI/CD пайплайна не может выполниться из-за неудачного завершения предыдущего этапа или проблем с зависимостями.

Причины возникновения

  • Предыдущий этап завершился неудачно
  • Проблемы с передачей артефактов между этапами
  • Ошибки в конфигурации зависимостей
  • Проблемы с условиями выполнения этапов
  • Ошибки в скриптах передачи данных

Как исправить ошибку

1. Настрой правильные зависимости

 1# .github/workflows/stage-dependencies.yml
 2name: Stage Dependencies
 3on: [push]
 4
 5jobs:
 6  build:
 7    runs-on: ubuntu-latest
 8    outputs:
 9      image-tag: ${{ steps.build.outputs.tag }}
10    steps:
11    - uses: actions/checkout@v3
12    - name: Build
13      id: build
14      run: |
15        echo "tag=v1.0.0" >> $GITHUB_OUTPUT
16        docker build -t myapp:v1.0.0 .
17
18  test:
19    runs-on: ubuntu-latest
20    needs: build
21    steps:
22    - uses: actions/checkout@v3
23    - name: Test
24      run: |
25        echo "Testing image: ${{ needs.build.outputs.image-tag }}"
26        docker run myapp:${{ needs.build.outputs.image-tag }} npm test
27
28  deploy:
29    runs-on: ubuntu-latest
30    needs: [build, test]
31    steps:
32    - uses: actions/checkout@v3
33    - name: Deploy
34      run: |
35        echo "Deploying image: ${{ needs.build.outputs.image-tag }}"
36        kubectl set image deployment/my-app my-app=myapp:${{ needs.build.outputs.image-tag }}

2. Настрой проверку артефактов

 1# .github/workflows/artifact-validation.yml
 2name: Artifact Validation
 3on: [push]
 4
 5jobs:
 6  build:
 7    runs-on: ubuntu-latest
 8    steps:
 9    - uses: actions/checkout@v3
10    - name: Build and upload
11      run: |
12        docker build -t myapp .
13        docker save myapp > myapp.tar
14    - name: Upload artifact
15      uses: actions/upload-artifact@v3
16      with:
17        name: docker-image
18        path: myapp.tar
19
20  validate:
21    runs-on: ubuntu-latest
22    needs: build
23    steps:
24    - uses: actions/checkout@v3
25    - name: Download artifact
26      uses: actions/download-artifact@v3
27      with:
28        name: docker-image
29    - name: Validate artifact
30      run: |
31        if [ ! -f "myapp.tar" ]; then
32          echo "Artifact not found"
33          exit 1
34        fi
35        docker load < myapp.tar
36        docker run myapp echo "Image loaded successfully"

Лучшие практики

  • Явно определяй зависимости между этапами
  • Проверяй артефакты перед использованием
  • Настрой правильные условия выполнения
  • Используй валидацию данных между этапами