0

0

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

王林

王林

发布时间:2024-02-09 12:03:08

|

1090人浏览过

|

来源于stackoverflow

转载

azure web app 上的自定义 golang 启动命令

php小编草莓今天为大家介绍Azure Web App上的自定义golang启动命令。Azure Web App是一种托管的云服务,可帮助开发者轻松部署和扩展Web应用程序。而golang是一种高效的编程语言,具有快速、可靠和简洁的特点。通过自定义golang启动命令,开发者可以更好地控制Web应用程序的启动过程,实现更多个性化的功能。本文将详细介绍如何在Azure Web App上进行自定义golang启动命令的配置和使用,帮助开发者更好地利用这一功能。

问题内容

我正在尝试将带有 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 以在启动时运行可执行文件,但这仍然失败。

立即学习go语言免费学习笔记(深入)”;

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 显示运行管道时构建的所有内容:

MakeSong
MakeSong

AI音乐生成,生成高质量音乐,仅需30秒的时间

下载

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

关于如何将上一步中创建的可执行文件上传到 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 构建即可完美运行。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
golang如何定义变量
golang如何定义变量

golang定义变量的方法:1、声明变量并赋予初始值“var age int =值”;2、声明变量但不赋初始值“var age int”;3、使用短变量声明“age :=值”等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

182

2024.02.23

golang有哪些数据转换方法
golang有哪些数据转换方法

golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

229

2024.02.23

golang常用库有哪些
golang常用库有哪些

golang常用库有:1、标准库;2、字符串处理库;3、网络库;4、加密库;5、压缩库;6、xml和json解析库;7、日期和时间库;8、数据库操作库;9、文件操作库;10、图像处理库。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

342

2024.02.23

golang和python的区别是什么
golang和python的区别是什么

golang和python的区别是:1、golang是一种编译型语言,而python是一种解释型语言;2、golang天生支持并发编程,而python对并发与并行的支持相对较弱等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

209

2024.03.05

golang是免费的吗
golang是免费的吗

golang是免费的。golang是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,采用bsd开源协议。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

394

2024.05.21

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

220

2025.06.09

golang相关判断方法
golang相关判断方法

本专题整合了golang相关判断方法,想了解更详细的相关内容,请阅读下面的文章。

193

2025.06.10

golang数组使用方法
golang数组使用方法

本专题整合了golang数组用法,想了解更多的相关内容,请阅读专题下面的文章。

396

2025.06.17

php中文乱码如何解决
php中文乱码如何解决

本文整理了php中文乱码如何解决及解决方法,阅读节专题下面的文章了解更多详细内容。

0

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号