【问题标题】:How do I use the Serverless Framework in an Azure DevOps Build Pipeline without Browser Authentication?如何在没有浏览器身份验证的情况下在 Azure DevOps 构建管道中使用无服务器框架?
【发布时间】:2021-05-25 00:29:33
【问题描述】:

我正在尝试使用我最初从桌面进行部署时创建的服务主体凭据,从 Azure DevOps 构建管道向我的 Azure 免费层帐户部署无服务器框架提供的简单 NodeJS hello-world 功能。我使用了多个构建代理和任务组合,包括 Windows 和 Ubuntu 代理以及 Bash、命令行、Azure Powershell 和 Azure CLI 任务,并使用 DevOps 提供了指向服务主体凭据的链接。我确保将它们添加为管道变量,以便它们包含在任务的环境变量中,并且我已经确认它们在任务运行时就在那里。我还确保已安装 Azure CLI 并使用订阅集登录。无论我调整什么设置/权限或尝试新配置,当任务成功运行到无服务器框架尝试部署时,它总是试图让我使用浏览器来验证我的帐户。这显然违背了 CI/CD 管道的目的,即使我确实使用浏览器进行身份验证,该过程也只是挂在那里。

示例代码和部署可以在我的桌面上运行,所以我知道凭据可以正常工作。我相信我已经在构建管道中模拟了我在桌面上执行的每个步骤,但是当我的桌面在没有浏览器身份验证的情况下部署时,构建总是会请求它。有没有人有这种方式的经验并且知道我缺少什么步骤/配置?

要查看示例代码和流程,请查看here 或运行以下步骤:

  1. 无服务器创建 -t azure-nodejs -p testApp

  2. cd .\testApp\

  3. 在 serverless.yml 中更改节点运行时和区域(不支持 nodejs12.x,美国西部没有免费层)

  4. 无服务器部署

这是我用来在我的桌面上运行它的链接:link

编辑:这是通过上述步骤创建的默认 serverless.yml:

service: azure-serverless-helloworld

provider:
  name: azure
  region: East US
  runtime: nodejs8.10

  environment:
    VARIABLE_FOO: 'foo'

plugins:
  - serverless-azure-functions

package:
  exclude:
    - local.settings.json
    - .vscode/**
    - index.html

functions:
  hello:
    handler: src/handlers/hello.sayHello
    events:
      - http: true
        x-azure-settings:
          methods:
            - GET
          authLevel: anonymous

  goodbye:
    handler: src/handlers/goodbye.sayGoodbye
    events:
      - http: true
        x-azure-settings:
          methods:
            - GET
          authLevel: anonymous

【问题讨论】:

    标签: azure azure-devops azure-functions azure-pipelines serverless-framework


    【解决方案1】:

    您可以尝试以下步骤在command line task 中运行sls package 以创建部署包,然后使用Azure Function App 任务部署到azure。

    1、使用Node.js工具安装程序任务安装特定版本的nodejs

    _

    2、使用 npm task 安装 serverless 以运行自定义命令

    3、使用npm task运行install命令安装依赖项

    _

    4、使用命令行任务运行sls package创建部署包

    _

    5、使用azure function app deploy任务部署部署包

    【讨论】:

    • 遗憾的是,这不起作用/帮助。我今天对这种方法进行了一些尝试,但没有成功。它会“部署”创建的包/压缩文件,但是当我进行 API 调用时,它们无法正常工作,当我通过 Azure 门户查看 App/Function 时,那里什么也没有。我想我们将不得不为我们的新 Azure 环境放弃无服务器框架,因为没有什么能像在 AWS 中那样工作。感谢您的努力,真的很感激。
    【解决方案2】:

    目前,无服务器框架认为您正在尝试使用无服务器仪表板(尚不支持 Azure)部署应用程序。

    我不确定,因为它没有发布您的serverless.yml 文件,但我认为您需要从serverless.yml 配置文件中删除apporg 属性。然后它将停止要求您登录。

    【讨论】:

    • 我已经继续并编辑了问题以包含我最初发布的无服务器命令创建的 serverless.yml:serverless create -t azure-nodejs -p testApp 为了便于阅读,我已经排除了他们的 cmets。我在此文件中看不到任何组织或应用程序属性。上面的命令应该生成任何相关的代码/配置文件,因为我试图在进行任何个人修改之前保持简单。
    • 哦!我想我没听懂你的帖子——你是在哪里被要求登录的?是蔚蓝吗?还是 Serverless.com?
    • 无服务器框架要求我获取 Azure CLI 令牌并将其放入 https://aka.ms/devicelogin,以便它可以验证我的 Azure 帐户并代表我进行部署。
    • @MitchellEtzel 你最终找到解决这个问题的方法了吗?面临与您完全相同的问题,我找不到一些好的文档来解释这些身份验证自动化过程
    【解决方案3】:

    使用无服务器框架通过 DevOps 部署功能给了我同样的问题。 问题是 sls deplopy 命令将构建、打包和部署代码,但每次运行管道时都会要求您提供凭据。

    我在构建任务中使用命令 serverless 包解决了这个问题,之后我部署了为该命令生成的 zip,并使用普通的 Web 应用程序部署任务。

    【讨论】:

      猜你喜欢
      • 2021-03-09
      • 2020-04-17
      • 2015-06-22
      • 2020-05-12
      • 2016-12-03
      • 2023-03-13
      • 2018-03-19
      • 2016-02-19
      • 1970-01-01
      相关资源
      最近更新 更多