Действия Github создают матрицу для лямбда-функций

#github-actions

#github-действия

Вопрос:

Ищу предложения о наилучшем способе запуска набора параллельных действий Github для каждой лямбда-функции в папке. Итак, структура папок похожа:

 lambdas/example1/index.js
lambdas/example2/index.js
  

….

а затем передают их в эту настройку матрицы

   deploy_source:
name: Deploy Lambda From Source
runs-on: ubuntu-latest
strategy:
  matrix:
    lambdafile:['example1/index.js','example12/index.js',....]
steps:
  - name: checkout source code
    uses: actions/checkout@v1
  - name: default deploy
    uses: appleboy/lambda-action@master
    with:
      aws_access_key_id: '123123123123'
      aws_secret_access_key: '123123123123'
      aws_region: '123123123123'
      function_name: gorush
      source: ${{ matrix.lambdafile }}
  

Комментарии:

1. Непонятно, о чем вы спрашиваете. Рабочий процесс, который вы опубликовали с помощью matrix , не работает? Вы просто спрашиваете, есть ли лучший способ? Использование matrix — хороший способ запустить параллельные задания.

Ответ №1:

Вы можете создать job1 для чтения вашей папки и динамического создания вашего матричного массива на основе этих данных. А затем создайте второе задание для сбора динамической матрицы и ее использования.

Вот пример рабочего процесса для динамического массива файловых матриц для файлов в каталоге lambda

  name: build
 on: push
 jobs:
   job1:
     runs-on: ubuntu-latest
     outputs:
        matrix: ${{ steps.setmatrix.outputs.matrix }}
     steps:
     - name: checkout source code
       uses: actions/checkout@v1
     - id: setmatrix
       run: |
         matrixArray=$(find ./lambdas -name '*.js') # Creates array of all files .js withing lambdas
         # Start Generate Json String
         echo "$matrixArray" | 
         jq --slurp --raw-input 'split("n")[:-1]' | 
         jq  "{"filepath": .[] }" | 
         jq -sc "{ "include": . }" > tmp
         cat ./tmp
         # End Generate Json String
         matrixStringifiedObject=$(cat ./tmp) # Use this as jq @sh wasn't cooperating
         echo "::set-output name=matrix::$matrixStringifiedObject"
   job2:
     needs: job1
     runs-on: ubuntu-latest
     strategy:
       matrix: ${{fromJson(needs.job1.outputs.matrix)}}
     steps:
      - name: checkout source code
        uses: actions/checkout@v1
      - run: echo ${{ matrix.filepath }}
  

Пример запуска рабочего процесса

Репозиторий конвейерного кода