在子文件夹中使用 Node.js 应用程序的“工作目录”选项以及压缩/解压缩工件步骤时,GitHub Actions 部署错误

2024-03-04

我有一个简单的 Node.js 服务器,我正在使用 GitHub Actions 中的以下工作流程将其部署到 Azure 应用服务。它包括工件压缩和解压缩步骤这个答案 https://stackoverflow.com/a/69402502/197591,以提高部署性能。

name: Build and deploy Node.js app to Azure Web App - myapp

on:
  push:
    branches:
      - master
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Set up Node.js version
        uses: actions/setup-node@v1
        with:
          node-version: '16.x'

      - name: npm install, build, and test
        run: |
          npm install
          npm run build --if-present
          npm run test --if-present

      - name: Zip artifact for deployment
        run: zip release.zip ./* -r

      - name: Upload artifact for deployment job
        uses: actions/upload-artifact@v2
        with:
          name: node-app
          path: release.zip

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

    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v2
        with:
          name: node-app

      - name: Unzip artifact for deployment
        run: unzip release.zip

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

这很好用。但是,我必须将代码移动到我的存储库的子文件夹“服务器”中,这意味着我必须根据以下问题的答案更改工作流程这个问题 https://stackoverflow.com/q/57806624/197591。我必须添加working-directory的选项defaults.

另外,根据here https://github.com/actions/upload-artifact/issues/232#issuecomment-1065422577,上传步骤不使用working-directory,所以我必须明确指定这一步的路径。

我的工作流程现在如下所示:

name: Build and deploy Node.js app to Azure Web App - myapp

on:
  push:
    branches:
      - master
  workflow_dispatch:

jobs:
  build:
    defaults:
      run:
        working-directory: Server

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Set up Node.js version
        uses: actions/setup-node@v1
        with:
          node-version: '16.x'

      - name: npm install, build, and test
        run: |
          npm install
          npm run build --if-present
          npm run test --if-present

      - name: Zip artifact for deployment
        run: zip release.zip ./* -r

      - name: Upload artifact for deployment job
        uses: actions/upload-artifact@v2
        with:
          name: node-app
          path: Server/release.zip

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

    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v2
        with:
          name: node-app

      - name: Unzip artifact for deployment
        run: unzip release.zip

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

可能不相关,但我应该提到我必须设置PROJECT=Server在应用程序服务应用程序设置中,按照here https://github.com/projectkudu/kudu/wiki/Customizing-deployments#using-app-settings-instead-of-a-deployment-file.

在“部署到 Azure Web App”步骤中,发生错误。这些是日志:

Run azure/webapps-deploy@v2
  with:
    app-name: myapp
    slot-name: test
    publish-profile: ***
    package: .
Package deployment using ZIP Deploy initiated.
Updating submodules.
Preparing deployment for commit id '3fa8fc89-4'.
Generating deployment script.
Using the following command to generate deployment script: 'azure site deploymentscript -y --no-dot-deployment -r "/tmp/zipdeploy/extracted" -o "/home/site/deployments/tools" --basic --sitePath "/tmp/zipdeploy/extracted/Server"'.
The site directory path: ./Server
Generating deployment script for Web Site
Generated deployment script files
Running deployment command...
Command: "/home/site/deployments/tools/deploy.sh"
Handling Basic Web Site deployment.
Error: From directory doesn't exist
An error has occurred during web site deployment.
Kudu Sync failed
\n/opt/Kudu/Scripts/starter.sh "/home/site/deployments/tools/deploy.sh"
Deployment Failed.
Error: Failed to deploy web package to App Service.
Error: Deployment Failed with Error: Package deployment using ZIP Deploy failed. Refer logs for more details.
App Service Application URL: http://myapp-test.azurewebsites.net

问题似乎是From directory doesn't exist(我在 Kudu 代码中找到了这个here https://github.com/projectkudu/KuduSync/blob/master/lib/FileUtils.ts#L17)。但我不明白为什么会发生这种情况。

非常感谢任何帮助。


文件必须解压缩到与存储库中的压缩位置相同的文件夹中。也可能是因为PROJECT环境。

不管怎样,我通过添加解决了这个问题-d Server to the unzip命令。

值得注意的是,如果路径深度超过一级,则必须在解压缩步骤之前插入以下步骤:

- name: Create folder
  run: mkdir -p ParentFolder/Server
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在子文件夹中使用 Node.js 应用程序的“工作目录”选项以及压缩/解压缩工件步骤时,GitHub Actions 部署错误 的相关文章

  • 限制 Axios 请求

    我正在使用 axios 向 Deezer API 发出请求 不幸的是 使用 Deezer 的 API 当您请求艺术家的专辑时 它不包括专辑曲目 因此 我正在通过请求艺术家的专辑 然后对每个专辑执行后续的 axios 请求来解决这个问题 我遇
  • 使用无服务器访问 SSM 变量

    我想用无服务器变量中的 SSM 参数 https serverless com blog serverless v1 22 0 按照文档 我运行了以下命令 aws ssm put parameter name foo value bar t
  • Node 不断恢复到旧版本

    每次我在控制台中重新启动 vagrant 时 它都会询问我的登录详细信息 然后说Now using node v7 10 0 npm v4 2 0 当我做run nvm install node I get v13 11 0 is alre
  • 电子应用程序可以播放本地支持的任何视频吗?

    我知道浏览器通常会限制玩家mp4 and webm类型的媒体 但我想知道基于电子的应用程序是否可以运行 MKV 和 AVI 等格式的本地视频 我找不到明确的来源来告诉我什么是可用的 什么是不可用的 Electron 仍然仅限于网络技术 这意
  • 使用 Express.js 和 NodeJS,您可以通过响应正文中的重定向发送 JSON

    我正在尝试通过 302 重定向发送 JSON 在 ExpressJS 中这可能吗 API 声明可以添加主体res json 例如 res json 302 name larry 在接收端 重定向的目的地 主体是空的 这是一些示例代码 发送应
  • 如何使用 AMQP 以“PeekLock”模式从 Azure 服务总线队列获取消息?

    我们正在尝试在 Node 应用程序中使用 Azure 服务总线 我们的要求是从队列中获取多条消息 由于Azure SDK for Node不支持批量检索 我们决定使用AMQP 虽然我们能够使用 Peek Messages 获取消息 如此处所
  • 将随机字节转换为整数范围 - 如何?

    我试图通过读取 crypto randomBytes 来获取一定范围内的随机整数 现在 我的问题是我不知道如何从该字节流中读取整数 我想生成一个范围只是 丢弃 不在范围内的整数的问题 有任何想法吗 您可以从以下位置获取一个 32 位整数cr
  • 警告:访问循环依赖内模块导出的不存在属性“MongoError”

    我正在使用节点执行 API 并使用 Mongoose 当我给一个yarn dev启动我的 Nodemon Mongo 出现错误 我不知道如何解决这个问题 有人有什么想法吗 我使用的是 MongoDB Atlas 数据库 就在出现以下错误之后
  • 如何使用 Chai Http 发布对象数组

    我正在尝试发布一个对象数组ChaiHttp https github com chaijs chai http像这样 agent post route to api send locations lat lat1 lon lon1 lat
  • 如何导入和导出 javascript ES6 类

    我是 javascript 和 nodejs 的新手 我正在使用这个项目来发展我的技能并学习新技术 目前我的项目使用多个相互依赖的类 类文件位于不同的目录中 我当前正在尝试使用 export 和 require 语句来允许在其他文件中引用类
  • 错误关系不存在

    我得到了 error relation causes does not exist 我的节点应用程序出现错误 这种关系确实存在 我不确定问题出在哪里 我创建了该表 CREATE TABLE causes cause id bigint NO
  • 如何阻止 Node.js 服务器崩溃

    我是节点js新手 我试图创建一个简单的 HTTP 服务器 我按照著名的例子创建了一个 Hello World 服务器如下 var handleRequest function req res res writeHead 200 res1 e
  • 如何在node.js中存根process.env?

    我想存根process env FOO with bar var sinon require sinon var stub sinon stub process env FOO bar 我很困惑 我阅读了文档 但仍然不明白 sinonjs
  • Browserify - 如何在浏览器中调用通过 browserify 生成的文件中捆绑的函数

    我是 Nodejs 和 browserify 的新手 我从这个开始link http browserify org 我有文件 main js 其中包含此代码 var unique require uniq var data 1 2 2 3
  • 在ubuntu 12.04上安装nodejs和npm后找不到.npmrc文件

    我刚刚按照教程在我的 ubuntu 12 04 上安装了 nodejs 和 npm https gist github com dwayne 2983873 https gist github com dwayne 2983873 现在安装
  • 如何将多个 api 请求中的多个可读流传输到单个可写流?

    期望的行为 实际行为 我尝试过的 重现步骤 研究 期望的行为 将从多个 api 请求接收到的多个可读流传输到单个可写流 API 响应来自 ibm watsontextToSpeech synthesize https cloud ibm c
  • Node.js 升级在 Windows 中仍然显示旧版本

    我已使用 msi 安装程序下载并安装了新版本的 nodejs 4 1 2 之后我跑了node v 但它仍然显示旧版本 0 12 2 我尝试重新启动Windows 甚至卸载nodejs并重新安装它 但仍然显示相同的内容 为什么会发生这种情况
  • 全局传递 xhr onload 函数的值

    在我正在创建的应用程序中 我有以下 XMLHttpRequest 并且我正在尝试传递结果data在 的里面xhr onload 到在同一父函数中创建的数组中 var url http api soundcloud com resolve j
  • 在文件之间共享 mqtt 客户端对象

    我这样连接到 MQTT mqtt js const mqtt require mqtt var options needed options var client mqtt connect mqtt someURL options clie
  • Meteor.setTimeout 和 Meteor.methods 之间的并发

    在我的 Meteor 应用程序中实现回合制多人游戏服务器 客户端通过发布 订阅接收游戏状态 并且可以调用 Meteor 方法sendTurn将回合数据发送到服务器 他们无法直接更新游戏状态集合 var endRound function g

随机推荐

  • 不理解缺少返回语句

    我是 Java 新手 我正在进行一个小程序练习 并遇到缺少返回语句的错误 有人可以帮忙吗 import java util Scanner class nonstatic1 public static void main String ar
  • PHP 方法链 - 反射?

    是否可以反思方法调用链来确定您处于调用链中的哪个点 至少 是否可以辨别一个方法是否是链中的最后一个调用 instance gt method1 gt method2 gt method3 gt method4 是否可以使用返回对象实例的属性
  • Tensorboard上直方图的含义

    我正在研究 Google Tensorboard 我对直方图的含义感到困惑 我阅读了教程 但我似乎不清楚 如果有人能帮助我弄清楚 Tensorboard 直方图每个轴的含义 我真的很感激 来自 TensorBoard 的示例直方图 我早些时
  • 无法在jupyter笔记本中导入tensorflow_datasets模块

    I am trying tensorflow course from Udacity which uses google colab to write run the code But I want to run the code on m
  • 无法使用 NSRegularExpression(正则表达式模式)提取字符串 - iphone

    我想提取 括号之间的字符串 例如 原始字符串 这是一个测试 获取此字符串 我想在 之间提取字符串 即本例中的 获取此字符串 请在下面找到我的代码 NSMutableString predicateString NSMutableString
  • Android 4.2.2+ 上的叠加状态栏

    我想覆盖 android 状态栏 就我而言 它位于顶部 我不想覆盖或隐藏导航栏 Note 解决方案必须在 Android 4 2 2 上运行 我更喜欢非 root 设备的答案 我搜索了很多 SO 问题和答案 但没有一个适用于 4 2 2 下
  • 用一个变量求大量函数的根

    我正在使用 Python numpy scipy 编写一个小型光线追踪器 表面被建模为二维函数 给出法线平面上方的高度 我将寻找射线和表面之间的交点的问题简化为寻找具有一个变量的函数的根 这些函数是连续且连续可微的 有没有一种方法可以比使用
  • 使用模板删除任何容器

    我有很多代码要删除其中包含指针的向量容器 也就是说 我必须先删除所有指针 然后清除容器 每次我都会手动迭代并删除指针 我知道 stl algorithms for each 为了规避所有这些代码 我创建了一个模板来删除所有具有指针的向量容器
  • 跳转到下一个空白处

    Instead of using w to jump to the beginning of the next word or using e to jump to the end of the next word I want to ha
  • 来自不同线程的触发事件

    在我的主窗口中 Thread A 我开始一个新线程 Thread B 它在用户等待时做了一些工作 如果出现错误或需要用户提供额外信息 线程 B 会触发事件 线程 A 将侦听这些事件 在线程 A 的事件侦听器中 我需要向用户显示对话框消息 我
  • git 如何处理带空格的文件夹名称

    我有一个名为31 Files of oop 当我尝试运行此命令时 git rm rf 31 文件 oop 我收到这个致命错误 致命 pathspec 31 与任何文件都不匹配 我需要如何准备带空格的文件夹名称以便在 git 中使用 尝试这样
  • 如何将动态选择菜单和嵌套属性一起包含在 Rails 中?

    考虑我有三个表用户 国家 地区 州 我有一个添加新用户的页面 当我添加新用户时 我必须在选择框中列出国家 地区 并且在选择国家 地区时 多个选择框应加载该国家 地区的州 我应该能够选择所需的状态 同样 我可以单击添加按钮添加另一个选择框并选
  • Laravel 电子邮件验证 - 强制登录

    安装启用新的内置电子邮件验证后 一切正常 注册后发送电子邮件并单击激活启用帐户 但是 我面临着用户必须登录才能进行验证过程的情况 这意味着 如果用户在使用验证链接之前未登录 他将被重定向到登录页面 然后显示 resources view a
  • 为什么 observable.subscribe 只能在构造函数中工作

    在开发 Ionic 3 应用程序时 我遇到了当你订阅时的问题observable从服务于ngOnInit并将局部变量更新到其中 它不会更新视图 例如 HTML模板 p myVariable p constructor myService M
  • 如何正确实现自定义ajax

    为了保留标志文字 div class small 7 medium 4 columns logo 和菜单 div
  • 无法导入名称包括[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我按照 django 中的教程进行操作并收到以下错误 找到了一些解决方案 但它没有解决我的错误 教程链接是this ht
  • 有什么方法可以从 jinja2 模板字符串中获取变量键吗?

    这是我初始化 jinja2 模板的代码片段 from jinja2 import Template templ Template foo to bar 我愿意从模板 obj 中提取模板字符串变量键 如下所示 templ keys foo b
  • 连续字母频率

    我正在尝试编写代码来确定字符串中字母的连续频率 例如 aabbcbb gt a 2 b 2 c 1 b 2 我的代码给出了第一个字母的频率 但不会继续到下一个字母 def encrypt str array count 0 str each
  • Spring集成网关“Dispatcher没有订阅者”

    我遇到了异常Dispatcher has no subscribers on the outboundChannel并且不明白为什么 我确信它很简单 我已将代码精简为下面一个非常简单的示例 我的背景是
  • 在子文件夹中使用 Node.js 应用程序的“工作目录”选项以及压缩/解压缩工件步骤时,GitHub Actions 部署错误

    我有一个简单的 Node js 服务器 我正在使用 GitHub Actions 中的以下工作流程将其部署到 Azure 应用服务 它包括工件压缩和解压缩步骤这个答案 https stackoverflow com a 69402502 1