当前位置:首页 > 文章列表 > Golang > Go问答 > 使用 golang 自定义启动命令的 Azure Web App

使用 golang 自定义启动命令的 Azure Web App

来源:stackoverflow 2024-02-18 12:00:27 0浏览 收藏

本篇文章给大家分享《使用 golang 自定义启动命令的 Azure Web App》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

我正在尝试将带有 github 操作的 go web 应用程序部署到 azure 应用服务。整个部署成功,直到应用程序需要使用 azure/webapps-deploy@v2 进行部署。

为了查看问题出在哪里,我创建了一个简单的 go 'hello world' 测试应用程序。只需部署这个非常简单的应用程序就可以了。然而,在尝试部署测试应用程序时,我注意到了一些事情:

  • 该应用程序在 azure 上完全重建,而不是使用可执行文件来运行。我以前的部署文件如下所示:
name: go deployment

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

jobs:
  build:
    runs-on: ubuntu-latest
    environment: production
    steps:
    # checkout the repo 
    - uses: actions/checkout@master

    # setup go
    - name: setup go
      uses: actions/setup-go@v3
      with:
       go-version: '1.20'

    - run: go version

    # install dependencies
    - name: go build
      working-directory: .
      run: |
       go build
      
    - name: upload artifact for deployment job
      uses: actions/upload-artifact@v3
      with:
        name: go-app
        path: .

  deploy:
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

    steps:
      - name: download artifact from build job
        uses: actions/download-artifact@v3
        with:
          name: go-app
          
      - name: 'deploy to azure web app'
        id: deploy-to-webapp
        uses: azure/webapps-deploy@v2
        with:
          app-name: ${{ env.azure_webapp_name }}
          slot-name: 'production'
          publish-profile: ${{ secrets.azureappservice_publishprofile }}
          package: .

这部署没有问题。代码库应用程序被馈送到 azure web 应用程序。当我尝试在最后一步中使用可执行文件时,部署失败。当然,azure web app 有一个用于设置启动命令的自定义字段。我尝试将其设置为 ./main 以在启动时运行可执行文件,但这仍然失败。

with:
          app-name: ${{ env.azure_webapp_name }}
          slot-name: 'production'
          publish-profile: ${{ secrets.azureappservice_publishprofile }}
          package: main

当使用 go build main.go 在我的本地计算机上构建 go 应用程序,然后执行 ./main 时,该应用程序运行没有问题。

  • 因为我无法只执行上一步中的可执行文件,所以我决定回滚并让 azure 应用服务按原样执行 go 应用程序。如果是这样,则不再需要整个构建步骤,只需将代码推送到 azure web 服务即可。就像这样:
name: Go

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

jobs:
  build:
    runs-on: ubuntu-latest
    environment:
      name: 'Production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
    steps:
    # checkout the repo 
    - uses: actions/checkout@master

    - name: 'Deploy to Azure Web App'
      id: deploy-to-webapp
      uses: azure/webapps-deploy@v2
      with:
        app-name: ${{ env.AZURE_WEBAPP_NAME }}
        slot-name: 'Production'
        publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE }}
        package: .

尽管必须推送整个代码库,但它仍然运行得很好。然而,在我们的生产应用程序中,由于结构原因,main.go 文件不位于根目录中。为了模仿这种行为,我将 main.go 文件放置在 /cmd 目录下。 azure web app 的部署再次失败。可以猜测,这可能是由于 azure 无法找到 main.go 文件。我想再次使用启动命令,但这次使用 go 运行 cmd/main.go。可悲的是,这也行不通。

azure web apps 显示运行管道时构建的所有内容:

有什么建议吗?我在这里缺少什么?

关于如何将上一步中创建的可执行文件上传到 azure web app 并在那里运行该可执行文件,有什么解决方案吗?


正确答案


首先,您应该在 azure web app 中设置一个环境变量:website_run_from_package1。这可以防止再次在 azure 上运行构建。从这一刻起,您应该能够上传预构建的可执行文件。

我还必须设置启动命令来运行我的特定可执行文件。

执行此操作后,我在 https://appname- 的日志中看到以下内容here.scm.azurewebsites.net/api/logstream

2023-04-26T17:20:12.596331026Z Detecting platforms...

2023-04-26T17:20:12.805572634Z Could not detect any platform in the source directory.

2023-04-26T17:20:15.792565274Z Running /home/site/wwwroot/go-test now

2023-04-26T17:20:15.928193597Z /home/site/wwwroot/go-test: /lib/x86_64-linux-gnu/libc.so.6: version 'GLIBC_2.32' not found (required by /home/site/wwwroot/go-test)

2023-04-26T17:20:15.934491135Z /home/site/wwwroot/go-test: /lib/x86_64-linux-gnu/libc.so.6: version 'GLIBC_2.34' not found (required by /home/site/wwwroot/go-test)

出现版本 glibc_2.34 是因为该应用程序是使用 ubuntu-latest 在管道中构建的。这是 ubuntu-22.04,其中有 glibc_2.35 但要运行的 azure 计算机没有此版本。使用 ubuntu-20.04 版本 glibc_2.31 构建即可完美运行。

以上就是《使用 golang 自定义启动命令的 Azure Web App》的详细内容,更多关于的资料请关注golang学习网公众号!

版本声明
本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
macOS (10.14.6) 上使用 `shirou/gopsutil` Go 包时遇到供应商包失败问题macOS (10.14.6) 上使用 `shirou/gopsutil` Go 包时遇到供应商包失败问题
上一篇
macOS (10.14.6) 上使用 `shirou/gopsutil` Go 包时遇到供应商包失败问题
使用conda管理Python虚拟环境的简便方法
下一篇
使用conda管理Python虚拟环境的简便方法
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • ChatExcel酷表:告别Excel难题,北大团队AI助手助您轻松处理数据
    ChatExcel酷表
    ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
    3179次使用
  • Any绘本:开源免费AI绘本创作工具深度解析
    Any绘本
    探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
    3390次使用
  • 可赞AI:AI驱动办公可视化智能工具,一键高效生成文档图表脑图
    可赞AI
    可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
    3419次使用
  • 星月写作:AI网文创作神器,助力爆款小说速成
    星月写作
    星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
    4525次使用
  • MagicLight.ai:叙事驱动AI动画视频创作平台 | 高效生成专业级故事动画
    MagicLight
    MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
    3798次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码