Как автоматически развертывать репозитории git с подмодулями на AWS?

У меня есть подмодуль в моем репозитории git, и моя структура каталогов похожа на

app
  -- folder1
  -- folder2
  -- submodule @5855

Я развернул свой код на AWS с помощью сервиса autodeploy. Теперь на сервере у меня есть код в родительском каталоге, но каталоги подмодулей пусты.

Q1) Как я могу получить данные в подмодулях. Мой репозиторий на сервере не является репозиторием git. Нужно ли мне сначала преобразовать его в репозиторий git, а затем запустить submodule команды, чтобы получить его?

Q2) Как я могу также автоматизировать развертывание подмодуля?

Спасибо


person Varun Nayyar    schedule 10.03.2017    source источник
comment
Вы все еще ищете это? Я могу предложить обходной путь, который использую. AWS pipeline не поддерживает подмодули.   -  person Marcos Casagrande    schedule 09.04.2018
comment
Нет. Но, пожалуйста, опубликуйте свой ответ. Это может помочь кому-то другому.   -  person Varun Nayyar    schedule 10.04.2018
comment
Я тоже ищу решение для этого. Спасибо   -  person Jose    schedule 17.05.2018
comment
Я тоже ищу решение   -  person lopezdp    schedule 29.09.2018
comment
@MarcosCasagrande, почему бы вам не включить свою работу в качестве ответа ....?   -  person lopezdp    schedule 29.09.2018
comment
@MarcosCasagrande, можете ли вы опубликовать обходной путь?   -  person Matt Bucci    schedule 31.10.2018
comment
@lopezdp Я опубликовал обходной путь   -  person Matt Bucci    schedule 31.10.2018
comment
@JoseNunez Я опубликовал обходной путь   -  person Matt Bucci    schedule 31.10.2018
comment
В итоге я использовал пакеты NPM вместо подмодулей git для своих проектов Node. Мне больше нравится этот подход, поскольку вы лучше инкапсулируете и делитесь функциональностью. Спасибо @MattBucci   -  person Jose    schedule 12.11.2018


Ответы (8)


Изменить: Codebuild теперь имеет флаг подмодулей https://docs.aws.amazon.com/codebuild/latest/APIReference/API_GitSubmodulesConfig.html

Вот что сработало для меня

Мы собираемся повторно инициализировать репозиторий git, а затем запускать клон подмодуля на этапе сборки нашего развертывания, по сути, исправляя поддержку подмодулей в codepipeline / codebuild

  • Создайте новый SSH-ключ для своей учетной записи github, если вы используете организацию, вы можете создать пользователя для развертывания.
  • Сохраните этот ключ ssh в своем хранилище параметров aws, используя aws ssm put-parameter --name build_ssh_key --type String --value "$(cat id_rsa)", в идеале используйте SecureString вместо String, но в руководстве, которое я следовал, просто использовалась строка, поэтому я не уверен, потребуются ли для командной строки какие-либо дополнительные параметры
  • Войдите в IAM и предоставьте пользователю CodePipeline доступ для чтения к вашему хранилищу параметров, я только что предоставил доступ для чтения к SSM

Затем сделайте свой buildspec.yml следующим образом:

version: 0.2

env:
  parameter-store:
    build_ssh_key: "build_ssh_key"

phases:
  install:
    commands:
      - mkdir -p ~/.ssh
      - echo "$build_ssh_key" > ~/.ssh/id_rsa
      - chmod 600 ~/.ssh/id_rsa
      - ssh-keygen -F github.com || ssh-keyscan github.com >>~/.ssh/known_hosts
      - git config --global url."[email protected]:".insteadOf "https://github.com/"
      - git init
      - git remote add origin <Your Repo url here using the git protocol>
      - git fetch
      - git checkout -t origin/master
      - git submodule init
      - git submodule update --recursive
  build:
    commands:
      - echo '...replace with real build commands...'

artifacts:
  files:
    - '**/*'
person Matt Bucci    schedule 31.10.2018
comment
Этот aws CodeCommit действительно теряется, когда мы не можем использовать подмодули. Думаю, я просто сделаю пакетный скрипт, который намного проще, чем эти неработающие инструменты CI / CD. - person Martin Kosicky; 18.01.2019

Я сам столкнулся с этой проблемой, и благодаря замечательным предложениям @ matt-bucci я смог придумать то, что кажется надежным решением.

Мой конкретный вариант использования немного отличается - я использую слои лямбда, чтобы уменьшить избыточность лямбда, но все же нужно включать слои в качестве подмодулей в репозитории функций лямбда, чтобы CodeBuild мог создавать и тестировать PR. Я также использую CodePipeline для непрерывной доставки, поэтому мне нужна система, которая сама по себе работает как с CodePipeline, так и с CodeBuild.

  1. Я создал новый ключ SSH для использования "пользователем машины", следуя эти инструкции. В этом случае я использую пользователя компьютера, чтобы не создавать новый ключ ssh для каждого проекта, а также для потенциальной поддержки нескольких частных подмодулей

  2. Я сохранил закрытый ключ в хранилище параметров AWS как SecureString. На самом деле это ничего не меняет в CodeBuild, поскольку он достаточно умен, чтобы просто знать, как расшифровать ключ.

  3. Я предоставил для роли «сборка кода» управляемое свойство AWS: AmazonSSMReadOnlyAccess, что позволяет CodeBuild получить доступ к закрытому ключу.

  4. Я создал свой файл buildspec.yml, используя набор команд, предложенных @ matt-bucci, а также некоторые новые

# This example buildspec will enable submodules for CodeBuild projects that are both 
# triggered directly and via CodePipeline
#
# This buildspec is designed with help from Stack Overflow: 
# https://stackoverflow.com/questions/42712542/how-to-auto-deploying-git-repositories-with-submodules-on-aws
version: 0.2  # Always use version 2
env:
  variables:
    # The remote origin that will be used if building through CodePipeline
    remote_origin: "[email protected]:your/gitUri"
  parameter-store:
    # The SSH RSA Key used by our machine user
    ssh_key: "ssh_key_name_goes_here"
phases:
  install:
    commands:
      # Add the "machine user's" ssh key and activate it - this allows us to get private (sub) repositories
      - mkdir -p ~/.ssh                   # Ensure the .ssh directory exists
      - echo "$ssh_key" > ~/.ssh/ssh_key  # Save the machine user's private key
      - chmod 600 ~/.ssh/ssh_key          # Adjust the private key permissions (avoids a critical error)
      - eval "$(ssh-agent -s)"            # Initialize the ssh agent
      - ssh-add ~/.ssh/ssh_key            # Add the machine user's key to the ssh "keychain"
      # SSH Credentials have been set up. Check for a .git directory to determine if we need to set up our git package
      - |
        if [ ! -d ".git" ]; then
          git init                                              # Initialize Git
          git remote add origin "$remote_origin"                # Add the remote origin so we can fetch
          git fetch                                             # Get all the things
          git checkout -f "$CODEBUILD_RESOLVED_SOURCE_VERSION"  # Checkout the specific commit we are building
        fi
      # Now that setup is complete, get submodules
      - git submodule init
      - git submodule update --recursive
      # Additional install steps... (npm install, etc)
  build:
    commands:
      # Build commands...
artifacts:
  files:
    # Artifact Definitions...

Этот сценарий установки выполняет три отдельных шага.

  1. Он устанавливает и включает закрытый ключ ssh, используемый для доступа к частным репозиториям.

  2. Он определяет, есть ли папка .git - если ее нет, то скрипт инициализирует git и проверяет точный коммит, который создается. Примечание. Согласно документации AWS, $CODEBUILD_RESOLVED_SOURCE_VERSION envar не гарантированно присутствует в сборках CodePipeline. Однако я не видел этого провала

  3. Наконец, он действительно получает подмодули

Очевидно, это не лучшее решение данной проблемы. Однако это лучшее, что я могу придумать, учитывая (ненужные) ограничения CodePipeline. Побочным эффектом этого процесса является то, что этап «Source» CodePipeline совершенно бесполезен, поскольку мы просто перезаписываем заархивированные исходные файлы - он используется только для прослушивания изменений в репозитории.

Более двух лет запрашиваются улучшенные функциональные возможности: https://forums.aws.amazon.com/thread.jspa?threadID=248267

Изменено: 23 января 2019 г.

Я понял (на собственном горьком опыте), что мой предыдущий ответ не поддерживал сборки CodePipeline, только сборки запускались напрямую через CodeBuild. Когда CodeBuild отвечает на GitHub Webhook, он клонирует весь репозиторий GitHub, включая папку .git.

Однако при использовании CodePipeline действие «Источник» будет клонировать репозиторий, проверять соответствующую ветку, а затем создавать артефакты для необработанных файлов без папки .git. Это означает, что нам нужно инициализировать репозиторий github, чтобы получить доступ к подмодулям.

person Joshua Evans    schedule 23.01.2019
comment
Что делать, если ssh-add требует ввода кодовой фразы? Как это можно автоматизировать / обойти? - person Sergey Nikitin; 14.03.2019

После того, как я весь день бился об этом головой, я нашел простое решение (для Code Pipeline), которое не требует манипулирования ключами SSH в спецификации сборки. Я использую Bitbucket, но думаю, что это сработает для других провайдеров. Я также клонирую свой подмодуль через https, я не уверен, требуется это или нет.

  1. Настройте источник для выполнения полного клонирования репозитория. Это передаст необходимые вам метаданные git. Исходная конфигурация

  2. Настройте свою роль сборки, чтобы добавить управляемое клиентом разрешение UseConnection, чтобы предоставить вашему действию сборки доступ к учетным данным, которые вы настроили для своего источника. Документация от AWS здесь: https://docs.aws.amazon.com/codepipeline/latest/userguide/troubleshooting.html#codebuild-role-connections

  3. Настройте свой env, чтобы включить git-credential-helper: yes, и клонируйте подмодуль в свой buildspec.yml:

введите описание изображения здесь

Вот и все! Подмодуль будет доступен для сборки, и вам не придется выполнять кучу ключевых настроек для каждого подмодуля, который вы хотите использовать.

Может быть, хорошее дополнение к документации, если это окажется полезным для людей.

person Doug Denniston    schedule 01.10.2020
comment
Это действительно работает, для тех, кто использует CodePipeline, вам нужно сделать это: перейти в проект CodeBuild, изменить, источники, добавить новый источник, выбрать Github, подключиться через Oauth или токен личного доступа, установить репо и сохранить (вы можете удалите источник позже) вам нужно создать соединение в CODEBUILD, а не в CodePipeline. Это включит помощник по учетным данным в контейнере CodeBuild. Вы можете выполнить отладку, проверив журналы сборки, справа под Git включен помощник по учетным данным, вы не должны видеть: GITHUB Git credential unavailable. Или BITBUCKET, если это так. Надеюсь, это кому-то поможет. - person imekinox; 23.10.2020
comment
У меня это не работает с BitBucket: Git credential helper enabled GITHUB Git credential unavailable. GITHUB_ENTERPRISE Git credential unavailable.. Не уверен, почему он думает, что это GitHub. Я не использую это ни для каких проектов. Также подтвердил, что у меня есть правильное заявление codestar для этой роли. Это странно ... черт возьми, это безумие, они все еще не поддерживают подмодули. CDK - это такая боль - person Jeremy; 11.11.2020
comment
Спасибо @imekinox! Это работает с нашей настройкой подмодулей CodePipeline + CodeBuild + GitHub. Без обновления исходного кода CodeBuild он предложит remote: Invalid username or password., а затем fatal: Authentication failed for 'https://github.com/xxx.git/' и fatal: clone of 'https://github.com/xxx.git' into submodule path '/codebuild/output/xxx' failed - person Jason Yu; 25.03.2021
comment
Это руководство + @imekinox работает отлично. Я могу только добавить, что для битбакета вы должны указать ссылку HTTPS на репо, а не на GIT. - person megapixel23; 19.05.2021

Хотя ответ @MattBucci работает, в нем есть оговорка, что вы можете извлекать только определенную ветку, а не конкретную фиксацию, которую использует подмодуль.

Чтобы справиться с этим случаем, что вероятно при использовании подмодулей, необходимо сделать несколько вещей:

1) Создайте ловушку git pre-commit со следующим содержанием:

#!/bin/bash

#   This file is used in post-commit hook
#   if .commit exists you know a commit has just taken place but a post-commit hasn't run yet
#
touch .commit

Если он у вас уже есть, вы можете добавить эту строку в начале.

2) Создайте обработчик git post-commit со следующим контнетом:

#!/bin/bash


DIR=$(git rev-parse --show-toplevel);

if [[ -e $DIR/.commit ]]; then
    echo "Generating submodule integrity file"
    rm .commit

    SUBMODULE_TRACKING_FILE=$DIR/.submodule-hash
    MODULE_DIR=module
    #   Get submodule hash, this will be used by AWS Code Build to pull the correct version.
    #   AWS Code Build does not support git submodules at the moment
    #   https://forums.aws.amazon.com/thread.jspa?messageID=764680#764680
    git ls-tree $(git symbolic-ref --short HEAD) $MODULE_DIR/ | awk '{ print $3 }' > $SUBMODULE_TRACKING_FILE

    git add $SUBMODULE_TRACKING_FILE
    git commit --amend -C HEAD --no-verify
fi

exit 0

Эта ловушка помещает текущий хеш фиксации в .submodule-hash файл, этот файл необходимо передать в систему контроля версий.

3) Перейдите в проект сборки AWS Code.

Developer Tools > CodeBuild > Build projects > YOUR_PROJECT > Edit Environment

Добавьте переменную окружения с именем: GIT_KEY, и значение будет закодировано в ssh key base 64. (Без разрывов строк, иначе не получится).

Вы можете преобразовать его онлайн или использовать любой инструмент или язык программирования.

введите описание изображения здесь

4) На buildspec.yml добавьте сценарий pre_build.

version: 0.2

phases:
  pre_build:
    commands:
      - bash build/aws-pre-build.sh
...

5) Создайте build/aws-pre-build.sh со следующим содержанием:

#!/bin/bash

set -e

#   Get root path
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd .. && pwd )"

MODULE_HASH=$(cat $DIR/.submodule-hash);
GIT_HOST=bitbucket.org
MODULE_DIR=module
REPO=user/repo.git


if [[ ! -d ~/.ssh ]]; then
    mkdir ~/.ssh
fi

if [[ ! -f ~/.ssh/known_hosts ]]; then
    touch ~/.ssh/known_hosts
fi

#   Base64 decode private key, and save it to ~/.ssh/git
echo "- Adding git private key"

echo $GIT_KEY | base64 -d > ~/.ssh/git

#   Add correct permissions to key
chmod 600 ~/.ssh/git

#   Add $GIT_HOST to ssh config
echo "- Adding ssh config file"

cat > ~/.ssh/config <<_EOF_
Host $GIT_HOST
    User git
    IdentityFile ~/.ssh/git
    IdentitiesOnly yes
_EOF_

#   Check if host is present in known_hosts
echo "- Checking $GIT_HOST in known_hosts"

if ! ssh-keygen -F $GIT_HOST > /dev/null; then
    echo "- Adding $GIT_HOST to known hosts"
    ssh-keyscan -t rsa $GIT_HOST >> ~/.ssh/known_hosts
fi

#   AWS Code build does not send submodules, remove the empty folder
rm -rf $MODULE_DIR

# Clone submodule in the right folder
git clone git@$GIT_HOST:$REPO $MODULE_DIR

# cd to submodule
cd $DIR/$MODULE_DIR

# Checkout the right commit
echo "- Checking out $MODULE_HASH"

git checkout $MODULE_HASH


Дополнительно

Если у вас есть дополнительный шаг перед переходом к AWS Code Build, что-то вроде конвейеров bitbucket или аналогичных, вы можете проверить, соответствует ли фактический хэш подмодуля git хешу из сгенерированного файла: .submodule-hash.

Если он не совпадает, это означает, что у тех, кто когда-либо нажимал, не было крючка git.

#!/bin/bash

$MODULE_DIR=module

echo "- Checking submodules integrity"

SUBMODULE_TRACKING_FILE=.submodule-hash


#   Check submodule hash, this will be used by AWS Code Build to pull the correct version.
#   AWS Code Build does not support git submodules at the moment
#   https://forums.aws.amazon.com/thread.jspa?messageID=764680#764680

#   Git submodule actual hash
SUBMODULE_HASH=$(git ls-tree $(git symbolic-ref --short HEAD) $MODULE_DIR/ | awk '{ print $3 }')

if [[ ! -e $SUBMODULE_TRACKING_FILE ]]; then

    echo "ERROR: $SUBMODULE_TRACKING_FILE file not found."
    submoduleError

    exit 1
fi

#   Custom submodule hash - The is used by AWS Code Build
SUBMODULE_TRACKING_FILE_HASH=$(cat $SUBMODULE_TRACKING_FILE)

if [[ "$SUBMODULE_TRACKING_FILE_HASH" != "$SUBMODULE_HASH"  ]]; then

    echo "ERROR: $SUBMODULE_TRACKING_FILE file content does not match submodule hash: $SUBMODULE_HASH"

    echo -e "\tYou should have pre-commit && post-commit hook enabled or update $SUBMODULE_TRACKING_FILE manually:"
    echo -e "\tcmd: git ls-tree $(git symbolic-ref --short HEAD) $MODULE_DIR/ | awk '{ print \$3 }' > $SUBMODULE_TRACKING_FILE"

    exit 1
fi

ПРИМЕЧАНИЕ. Вы также можете создать этот файл в конвейере перед сборкой кода AWS, создать фиксацию, пометить его и отправить, чтобы запустить конвейер сборки кода AWS.

git ls-tree $(git symbolic-ref --short HEAD) module/ | awk '{ print \$3 }' > .submodule-hash
person Marcos Casagrande    schedule 24.01.2019

SSH не нужен, если вы используете CodeCommit в качестве репозитория. Используйте AWS CLI Credential Helper. и клонировать по https.

git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.UseHttpPath true
git clone https://git-codecommit.[region].amazonaws.com/v1/repos/[repo]
person Tyler    schedule 14.05.2019

Я столкнулся с той же проблемой на AWS CodeBuild. Я отмечаю Use Git submodules, как показано ниже, чтобы обновить свой submodule.

введите описание изображения здесь

Когда я запустил сборку, я получил следующую ошибку:

CLIENT_ERROR: Submodule error error creating SSH agent: "SSH agent requested but SSH_AUTH_SOCK not-specified" for primary source and source version refs/heads/dev

Итак, я погуглил вышеуказанную ошибку и получил эту DOWNLOAD_SOURCE с подмодулями Git ветка с форума AWS. Они упомянули,

Подмодули должны быть настроены как https, а не ssh.

Думаю, это бесполезно, что будет, если кто-то установит submodule как ssh. Я тоже сделал то же самое, вот мой .gitmodules файл.

[submodule "common"]
    path = common
    url = [email protected]:organization_id/common.git

На самом деле я не хочу менять его на https. Затем я нашел этот Работа с подмодулями Git в CodePipeline статья с медиума. Я хотел бы представить себе, что я сделал для решения этой проблемы, и произошла ошибка, о которой не упоминалось в этом article. Давайте сделаем это более безопасным способом.


Сначала перейдите в AWS Key Management Service (KMS), перейдите в раздел Customer managed keys и нажмите Create key создать ключ.

  1. Щелкните Symmetric и щелкните Next.

введите описание изображения здесь

  1. Дайте любое имя (например: - bitbucket-credentials) для создания Alias и щелкните Next.

введите описание изображения здесь

  1. Скорее всего, у вас уже есть AWS Role для настройки любого из инструментов разработчика на AWS, поэтому в моем случае я создал AWS Role вызов ecsCodeBuildRole для AWS CodeBuild, присвоил ему Define key administrative permissions и нажал Next .

введите описание изображения здесь

  1. Затем присвойте Define key usage permissions своему AWS Role и щелкните Next.

введите описание изображения здесь

  1. Наконец, просмотрите, что вы сделали до сих пор, и нажмите Finish, чтобы создать CMK.

введите описание изображения здесь

  1. Вы можете просмотреть его, как показано ниже.

введите описание изображения здесь


Итак, AWS Key Management Service (KMS) завершена, теперь перейдите к AWS Systems Manager и найдите раздел Parameter Store. Щелкните Create parameter.

  1. Просто назовите его id_rsa и поставьте то же, что и ниже.

введите описание изображения здесь  введите описание изображения здесь

  1. Для раздела value просто запустите команду cat ~/.ssh/id_rsa в своем терминале, и вы получите результат, как показано ниже. Добавьте его в раздел value.
-----BEGIN RSA PRIVATE KEY-----
qdjbXp+42VTnccC7pxOZcofomfwGXPWuqcv99sQEPtToODvGIxWoooJUpb6qMIWY
1zccEuwAhmqcPvpsJyWhcctZB/wWglNvViZcOYjrQ8HBUBKJT8pF
-----END RSA PRIVATE KEY-----
  1. Создайте еще один параметр и назовите его id_rsa.pub. Выполните те же действия, что и выше.

  2. Для раздела value просто запустите команду cat ~/.ssh/id_rsa.pub в своем терминале, и вы получите результат, как показано ниже. Добавьте его в раздел value.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGtf8jjkogWxRGNGjJlOZ1G+pWExgDOdA5wVML6TMTT2YtvhPJD60nPx5TfA8zRzGWubwrPp40SPAhSs5wiAAg38HlS4pz9X wasdkiller@wasdkiller

Что касается моего исследования (возможно, я ошибаюсь, поправьте меня), у меня нет другого способа передать ssh учетные данные в AWS CodeBuild без особых усилий. Итак, я вручную изменил свой buildspec.yml файл.

version: 0.2

env:
  parameter-store:
    ssh_key: id_rsa
    ssh_pub: id_rsa.pub

phases:
  install:
    commands:
      - mkdir -p ~/.ssh
      - echo "$ssh_key" > ~/.ssh/id_rsa   
      - echo "$ssh_pub" > ~/.ssh/id_rsa.pub
      - chmod 600 ~/.ssh/id_rsa
      - eval "$(ssh-agent -s)"
      - git submodule update --init --recursive

Когда вы продолжите, вы обязательно получите ошибку ниже,

Decrypted Variables Error: AccessDeniedException: User: arn:aws:sts::organization_id:assumed-role/ecsCodeBuildRole/AWSCodeBuild-12896abb-bdcf-4cfc-a12b-bcf30d6e96ab is not authorized to perform: ssm:GetParameters on resource: arn:aws:ssm:ap-southeast-2:organization_id:parameter/wasd status code: 400, request id: 23b94bc2-961e-4d86-9b73-d16e3bda357c

Он запросит у вас разрешение ssm:GetParameters. Просто прикрепите AmazonSSMReadOnlyAccess политику или создайте политику вручную с разрешением ssm:GetParameters и прикрепите ее к вашему AWS Role, это решит эту проблему.

person Kushan Gunasekera    schedule 24.05.2020

Проблема с подмодулями была обнаружена так давно. Но AWS не может это исправить. Таким образом, codepipeline не может отправить каталог .git в сборку кода. Итак, мы должны изобрести новые бицеклы, я исправлю это в команде предварительной сборки buildspec.yml.

rm -rf $PWD/*
git clone --depth 1 https://<REPO NAME>  -b develop .
git submodule update --init --recursive

AWS поторопитесь, потому что наша команда рассматривает возможность возврата на github.

person Taras Vaskiv    schedule 15.08.2019

Заимствуя концепции @MattBucci и @JoshuaEvans. Вот что мы сделали. Нам не удалось установить git в наш конвейер из-за серьезных проблем с доступом / безопасностью с ssh. В итоге мы сделали это через HTTP.

  1. Я создал новый токен личного доступа Github
  2. Я сохранил PAT в диспетчере секретов AWS как SecureString. На самом деле это ничего не меняет в CodeBuild, поскольку он достаточно умен, чтобы просто знать, как расшифровать ключ.
  3. Я дал роль "codebuild" читать из менеджера секретов
  4. Я создал свой файл buildspec.yml, используя набор команд, предложенных @ matt-bucci и @JoshuaEvans, а также некоторые новые.
version: 0.2
env:
    variables:
      token: " token "
    secrets-manager:
      personalAccessToken: $personalAccessTokenPath
phases:
    install:
      runtime-versions:
        nodejs: 12
      commands:
          - cd <to the folder where you want the submodules>
          - wget --header="Authorization:$token$personalAccessToken" --content-disposition  https://github.com/uri/zipball/$branch/
          - unzip project*.zip -d project-folder
          - rm -rf project*.zip
          - cd project-folder
          - mv project*/* .
          - rm -rf project*
          - cd <back to your base folder where the buildspec is>
    pre_build:
      commands:
        - xxx
    build:
      commands:
        - xxx
    post_build:
      commands:
        - xxx
artifacts:
    files:
      - '**/*'
    base-directory: dist

Надеюсь это поможет!

person KRV    schedule 27.03.2020