如何从GitHub Actions部署AWS Amplify应用程序



我想从GitHub Actions控制Amplify部署,因为Amplify自动构建

  • 不提供GitHub环境
  • 不监视CI的故障,并且将以任何方式进行部署,或者
  • 需要我复制CI设置并在Amplify中重新运行
  • 不支持开箱即用运行cypress作业
  • 关闭自动构建(在App settings / General / Branches中(
  • 添加以下脚本和作业

scripts/amplify-deploy.sh

echo "Deploy app $1 branch $2"
JOB_ID=$(aws amplify start-job --app-id $1 --branch-name $2 --job-type RELEASE | jq -r '.jobSummary.jobId')
echo "Release started"
echo "Job ID is $JOB_ID"
while [[ "$(aws amplify get-job --app-id $1 --branch-name $2 --job-id $JOB_ID | jq -r '.job.summary.status')" =~ ^(PENDING|RUNNING)$ ]]; do sleep 1; done
JOB_STATUS="$(aws amplify get-job --app-id $1 --branch-name $2 --job-id $JOB_ID | jq -r '.job.summary.status')"
echo "Job finished"
echo "Job status is $JOB_STATUS"
deploy:
runs-on: ubuntu-latest
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: us-east-1
AWS_DEFAULT_OUTPUT: json
steps:
- uses: actions/checkout@v2
- name: Deploy
run: ./scripts/amplify-deploy.sh xxxxxxxxxxxxx master

如果发布失败,您可以改进脚本以使其失败,添加所需的步骤(例如lint、测试(,添加GitHub环境等。

还有amplify-cli-action,但它对我不起作用

  1. 禁用自动生成:
  • 转到AWS Amplify控制台中的App settings > general并在那里禁用自动构建
  1. 转到App settings > Build Settings并创建一个web挂钩,这是一个将触发构建的curl命令
  • 示例:curl -X POST -d {} URL -H "Content-Type: application/json"
  1. 将GitHub中的URL保存为机密
  2. curl脚本添加到GitHub操作YAML脚本中,如下所示:
deploy:
runs-on: ubuntu-latest
steps:
- name: deploy
run: |
URL="${{ secrets.WEBHOOK_URL }}"
curl -X POST -d {} "$URL" -H "Content-Type: application/json"

类似于这里的答案2,但我使用了标记。

创建一个类似ci.yml的操作,关闭staging&prod-envs在放大和创建webhook触发器。

name: CI-Staging
on:
release:
types: [prereleased]
permissions: read-all # This is required to read the secrets
jobs:
deploy-staging:
runs-on: ubuntu-latest
permissions: read-all # This is required to read the secrets
steps:
- name: deploy
run: |
URL="${{ secrets.STAGING_DEPLOY_WEBHOOK }}"
curl -X POST -d {} "$URL" -H "Content-Type: application/json"
name: CI-production
on:
release:
types: [released]
permissions: read-all # This is required to read the secrets
jobs:
deploy-production:
runs-on: ubuntu-latest
permissions: read-all # This is required to read the secrets
steps:
- name: deploy
run: |
URL="${{ secrets.PRODUCTION_DEPLOY_WEBHOOK }}"
curl -X POST -d {} "$URL" -H "Content-Type: application/json"

最新更新