自动部署navitem导航站到SAP #1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: 自动部署navitem导航站到SAP | |
| on: | |
| workflow_dispatch: # 只允许手动触发 | |
| inputs: | |
| region: | |
| description: '选择部署区域' | |
| required: true | |
| default: 'US(free)' | |
| type: choice | |
| options: | |
| # 免费区域 | |
| - SG(free) # azure新加披 | |
| - US(free) # aws美国 | |
| # AWS 区域 | |
| - AWS-AU(Sydney) | |
| - AWS-BR(São Paulo) | |
| - AWS-KR(Seoul) | |
| - AWS-CA(Montreal) | |
| - AWS-US(VA) | |
| - AWS-US(OR) | |
| - AWS-EU(Frankfurt) | |
| - AWS-JP(Tokyo) | |
| - AWS-SG(Singapore) | |
| # GCP 区域 | |
| - GCP-AU(Sydney) | |
| - GCP-BR(São Paulo) | |
| - GCP-US(IA) | |
| - GCP-EU(Frankfurt) | |
| - GCP-JP(Osaka) | |
| - GCP-JP(Tokyo) | |
| - GCP-IL(Tel Aviv) | |
| - GCP-IN(Mumbai) | |
| - GCP-KSA(Dammam) | |
| # Azure 区域 | |
| - Azure-AU(Sydney) | |
| - Azure-BR(São Paulo) | |
| - Azure-CA(Montreal) | |
| - Azure-US(VA) | |
| - Azure-US(WA) | |
| - Azure-EU(Netherlands) | |
| - Azure-JP(Tokyo) | |
| - Azure-SG(Singapore) | |
| # SAP Neo 区域 | |
| - Neo-UAE(Dubai) | |
| - Neo-KSA(Riyadh) | |
| app_name: | |
| description: '应用名称(可选,留空则自动生成)' | |
| required: false | |
| default: '' | |
| env: | |
| DOCKER_IMAGE: ${{ secrets.DOCKER_IMAGE || 'ghcr.io/eooce/nav-item:latest' }} | |
| MEMORY: ${{ secrets.MEMORY || '256M' }} | |
| DISK: ${{ secrets.DISK || '300M' }} | |
| jobs: | |
| deploy-app: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Install CF CLI | |
| run: | | |
| wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add - | |
| echo "deb https://packages.cloudfoundry.org/debian stable main" | sudo tee /etc/apt/sources.list.d/cloudfoundry-cli.list | |
| sudo apt-get update | |
| sudo apt-get install -y cf8-cli | |
| - name: Determine CF API endpoint and app name | |
| run: | | |
| # 设置API端点和生成随机字符串 | |
| RANDOM_STR=$(head /dev/urandom | tr -dc 'a-z' | head -c 6) | |
| case "${{ github.event.inputs.region }}" in | |
| # 免费区域 | |
| "SG(free)") | |
| echo "CF_API=https://api.cf.ap21.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-freesg$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "US(free)") | |
| echo "CF_API=https://api.cf.us10-001.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-freeus$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| # AWS 区域 | |
| "AWS-AU(Sydney)") | |
| echo "CF_API=https://api.cf.ap10.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-awsau$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "AWS-BR(São Paulo)") | |
| echo "CF_API=https://api.cf.br10.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-awsbr$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "AWS-KR(Seoul)") | |
| echo "CF_API=https://api.cf.ap12.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-awskr$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "AWS-CA(Montreal)") | |
| echo "CF_API=https://api.cf.ca10.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-awsca$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "AWS-US(VA)") | |
| echo "CF_API=https://api.cf.us10-001.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-awsusva$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "AWS-US(OR)") | |
| echo "CF_API=https://api.cf.us11.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-awsusor$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "AWS-EU(Frankfurt)") | |
| echo "CF_API=https://api.cf.eu10-005.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-waseu$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "AWS-JP(Tokyo)") | |
| echo "CF_API=https://api.cf.jp10.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-awsjp$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "AWS-SG(Singapore)") | |
| echo "CF_API=https://api.cf.ap11.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-awssg$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| # GCP 区域 | |
| "GCP-AU(Sydney)") | |
| echo "CF_API=https://api.cf.ap30.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-gcpau$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "GCP-BR(São Paulo)") | |
| echo "CF_API=https://api.cf.br30.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-gcpbr$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "GCP-US(IA)") | |
| echo "CF_API=https://api.cf.us30.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-gcpus$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "GCP-EU(Frankfurt)") | |
| echo "CF_API=https://api.cf.eu30.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-gcpeu$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "GCP-JP(Osaka)") | |
| echo "CF_API=https://api.cf.jp30.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-gcpjpo$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "GCP-JP(Tokyo)") | |
| echo "CF_API=https://api.cf.jp31.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-gcpjpt$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "GCP-IL(Tel Aviv)") | |
| echo "CF_API=https://api.cf.il30.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-gcpil$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "GCP-IN(Mumbai)") | |
| echo "CF_API=https://api.cf.in30.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-gcpin$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "GCP-KSA(Dammam)") | |
| echo "CF_API=https://api.cf.sa31.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-gcpsa$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| # Azure 区域 | |
| "Azure-AU(Sydney)") | |
| echo "CF_API=https://api.cf.ap20.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-azau$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "Azure-BR(São Paulo)") | |
| echo "CF_API=https://api.cf.br20.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-azbr$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "Azure-CA(Montreal)") | |
| echo "CF_API=https://api.cf.ca20.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-azca$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "Azure-US(VA)") | |
| echo "CF_API=https://api.cf.us21.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-azva$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "Azure-US(WA)") | |
| echo "CF_API=https://api.cf.us20.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-azwa$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "Azure-EU(Netherlands)") | |
| echo "CF_API=https://api.cf.eu20-001.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-azeu$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "Azure-JP(Tokyo)") | |
| echo "CF_API=https://api.cf.jp20.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-azjp$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "Azure-SG(Singapore)") | |
| echo "CF_API=https://api.cf.ap21.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-azsg$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| # SAP Neo 区域 | |
| "Neo-UAE(Dubai)") | |
| echo "CF_API=https://api.cf.neo-ae1.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-neouae$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| "Neo-KSA(Riyadh)") | |
| echo "CF_API=https://api.cf.neo-sa1.hana.ondemand.com" >> $GITHUB_ENV | |
| echo "APP_NAME=navitem-neoksa$RANDOM_STR" >> $GITHUB_ENV | |
| ;; | |
| esac | |
| # 如果用户提供了应用名称,则使用用户提供的 | |
| if [ -n "${{ github.event.inputs.app_name }}" ]; then | |
| echo "APP_NAME=${{ github.event.inputs.app_name }}" >> $GITHUB_ENV | |
| fi | |
| echo "使用API端点: $CF_API" | |
| echo "应用名称: $APP_NAME" | |
| echo "部署类型: ${{ env.DOCKER_IMAGE }}" | |
| - name: Login to Cloud Foundry | |
| run: | | |
| cf login -a ${{ env.CF_API }} -u "${{ secrets.EMAIL }}" -p "${{ secrets.PASSWORD }}" | |
| # 获取组织列表 | |
| ORG=$(cf orgs | sed -n '4p') | |
| echo "Selected org: $ORG" | |
| echo "ORG=$ORG" >> $GITHUB_ENV | |
| # 获取空间列表 | |
| SPACE=$(cf spaces | sed -n '4p') | |
| echo "Selected space: $SPACE" | |
| echo "SPACE=$SPACE" >> $GITHUB_ENV | |
| # 使用获取的组织和空间重新登录 | |
| cf login -a ${{ env.CF_API }} -u "${{ secrets.EMAIL }}" -p "${{ secrets.PASSWORD }}" -o "$ORG" -s "$SPACE" | |
| - name: Deploy application | |
| run: | | |
| if cf push ${{ env.APP_NAME }} --docker-image ${{ env.DOCKER_IMAGE }} -m ${{ env.MEMORY }} -k ${{ env.DISK }} --health-check-type port; then | |
| echo "Deployment successful" | |
| else | |
| cf delete ${{ env.APP_NAME }} -r -f | |
| echo "伙计,没资源了,部署失败,请明天早上8:10至9:00再尝试部署,已清理失败部署残留" | |
| exit 1 | |
| fi | |
| - name: Verify deployment | |
| run: | | |
| STATUS=$(cf app ${{ env.APP_NAME }} | grep "requested state:" | awk '{print $3}') | |
| if [ "$STATUS" = "started" ]; then | |
| echo "✅ navitem启动成功" | |
| else | |
| echo "❌ 应用启动失败,当前状态: $STATUS" | |
| echo "查看应用日志:" | |
| cf logs ${{ env.APP_NAME }} --recent | |
| exit 1 | |
| fi | |
| - name: 详细部署信息 | |
| run: | | |
| echo "🚀 部署完成!详细信息如下:" | |
| echo "区域(Region): ${{ github.event.inputs.region }}" | |
| echo "组织(ORG): ${{ env.ORG }}" | |
| echo "空间(SPACE): ${{ env.SPACE }}" | |
| echo "应用名称(App Name): ${{ env.APP_NAME }}" | |
| # 获取应用路由 | |
| ROUTE=$(cf app ${{ env.APP_NAME }} | grep "routes:" | awk '{print $2}') | |
| if [ -n "$ROUTE" ]; then | |
| echo "navitem—url: https://$ROUTE" | |
| else | |
| echo "⚠️ 未找到应用路由,请检查部署状态。" | |
| fi |