Достаточно ли два блога подобных подобных теме, чтобы называть это серией блога? Давайте скажем, да и продолжайте наше путешествие в мире развертывания предприятия, где вы не можете использовать уже сделанные интеграции автоматизации Evens, из-за конфигурации компании VPN.
Опять не круто.
Во всяком случае, нахождение решений проблем — это навык # 1 программного обеспечения инженера, поэтому давайте погрузимся о том, как решать этому. AWS Amplify — это сервис для мобильных и веб-приложений для мобильных и веб-приложений, но функция, который получил мой интерес, является статический хостинг. Я хотел использовать усиление, чтобы развернуть Nuxt.js Статическое приложение, со встроенным глобальным доступом и интеграцией на экосистему AWS, усиление — отличная альтернатива для NetLify и Vercel для компаний, таких как большие счета-фактуры хостинга. Усилительнее быть довольно недавним (2018), я жестко было бы проще развернуть на нем, чем на упругой фасоне, но я был замечательно неверным.
Мне очень много времени потребовалось слишком много времени, чтобы написать сценарий развертывания для него, поскольку документация не пропускает много важной информации, вероятно, потому что я один из немногих людей на Земле, которые не могут использовать встроенную интеграцию репозитории для включения автоматического Развертывание.
Сценарий развертывания, с которым я оказался из 10 шагов, да, 10 шагов:
- Создание .zip. архив
- Убедитесь, что точно такой же архив уже развернут
- Загрузить архив на S3
- Проверьте состояние последней работы усилителя
- Остановить последнюю работу, если она все еще работает
- Создать усиление развертывания
- Загрузить архив AWS Amplify Url развертывания URL
- Начать развертывание
- Опрос статус задания развертывания до конца
- Убедитесь, что развертывание успешно
Вот полный пример для проекта Nuxtjs:
#!/bin/bash archive="archive.zip" s3_bucket="elasticbeanstalk-eu-west-3-something" amplify_id="something" git_branch=$(git rev-parse --abbrev-ref HEAD) if [ -f "$archive" ] ; then printf "Delete previously created archive\n" rm "$archive" fi # We create the Nuxtjs dist/ build directory printf "Make bundle build\n" yarn run build # Create the archive of the dist/ directory printf "Create the code archive\n" zip -q -r $archive dist/* # Check that the latest archive on s3 is not the same as the one we just created # to avoid useless deployments printf "Generate current deploy checksum\n" CURRENT_MD5=$(find dist/ -type f -exec md5sum {} \; | sort -k 2 | md5sum) printf "Verify latest deploy checksum\n" LATEST_MD5=$(aws s3api head-object --bucket $s3_bucket --key $archive \ | jq -r '.Metadata.md5') if [ "$CURRENT_MD5" = "$LATEST_MD5" ]; then # No deploy required printf "The Latest project version is already deployed\n" else # Save the archive to S3 with the MD5 checksum in metadata to simplify # checks in the next deployment aws s3 cp $archive s3://$s3_bucket/ --metadata md5="$CURRENT_MD5" # Get the latest Amplify job printf "Get latest Amplify job\n" aws amplify list-jobs \ --app-id $amplify_id \ --branch-name $git_branch \ --max-items 1 > amplify-last-job.json # Store latest Amplify job status and id AMPLIFY_LAST_JOB_STATUS=$(cat amplify-last-job.json \ | jq -r '.jobSummaries[].status') AMPLIFY_LAST_JOB_ID=$(cat amplify-last-job.json \ | jq -r '.jobSummaries[].jobId') # Kill the last job if it is still pending from a previous deploy if [ "$AMPLIFY_LAST_JOB_STATUS" = "PENDING" ]; then aws amplify stop-job \ --app-id $amplify_id \ --branch-name $git_branch \ --job-id $AMPLIFY_LAST_JOB_ID fi # Create a Amplify deployment printf "Create Amplify deployment\n" aws amplify create-deployment \ --app-id $amplify_id \ --branch-name $git_branch > amplify-deploy.json # Retrieve the newly created deployment ID and zip upload URL AMPLIFY_ZIP_UPLOAD_URL=$(cat amplify-deploy.json | jq -r '.zipUploadUrl') AMPLIFY_JOB_ID=$(cat amplify-deploy.json | jq -r '.jobId') # Upload the archive to Amplify printf "Upload archive\n" curl -H "Content-Type: application/zip" \ $AMPLIFY_ZIP_UPLOAD_URL \ --upload-file $archive # Start the deployment printf "Start Amplify deployment\n" aws amplify start-deployment \ --app-id $amplify_id \ --branch-name $git_branch \ --job-id $AMPLIFY_JOB_ID while : do sleep 10 # Poll the deployment job status every 10 seconds until it's not pending # anymore STATUS=$(aws amplify get-job \ --app-id $amplify_id \ --branch-name $git_branch \ --job-id $AMPLIFY_JOB_ID \ | jq -r '.job.summary.status') if [ $STATUS != 'PENDING' ]; then break fi done printf "Amplify deployment status $STATUS\n" fi
Я скучаю по этому времени, когда все это заняло, был FTP, а пучок PHP-файлов.
Оригинал: «https://dev.to/nicolasbeauvais/continuous-aws-amplify-deployment-22d0»