微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

选择节点版本时权限被拒绝的部署问题

如何解决选择节点版本时权限被拒绝的部署问题

从一开始,我就一直在为我的 node 12 Web 应用程序使用 kudu 部署时遇到问题。 这次我在管道日志中有 select node version Failed,但是当我从链接访问日志详细信息时有 Not setting execute permissions for bash。最糟糕的是,代码或管道中没有任何变化,有一天你醒来,你的应用程序不再工作。这是第三次发生,每次在可用版本列表中都有新版本的节点可用。有人可以指出我可以使用一个多月的解决方案吗?我使用了 kudu 文档中节点 Web 应用程序的认脚本,只是用纱线替换了 npm。并在应用配置中使用环境变量 WEBSITE_NODE_DEFAULT_VERSIONWEBSITE_NPM_DEFAULT_VERSION。我尝试了带有或不带有 npm 的节点版本 var 的所有组合,......没有任何效果。我真的需要一个长期的解决方案来最终解决这个问题,否则我想我会转向更稳定的替代方案。任何帮助深表感谢。 一个可能相关的问题https://github.com/projectkudu/kudu/issues/2870#issuecomment-443464291

编辑

这是我的 .deployment 文件

[config]
command = bash ./scripts/bash/deploy.sh

这是我在 scripts/bash/deploy.sh 中的 shell 文件,您可以看到与使用命令 kuduscript -y --node 检索的自定义部署脚本的唯一区别是 yarn 而不是 npm

#!/bin/bash

# ----------------------
# KUDU Deployment Script
# Version: 1.0.17
# ----------------------

# Helpers
# -------

exitWithMessageOnError() {
  if [ ! $? -eq 0 ]; then
    echo "An error has occurred during web site deployment."
    echo $1
    exit 1
  fi
}

# Prerequisites
# -------------

# Verify node.js installed
hash node 2>/dev/null
exitWithMessageOnError "Missing node.js executable,please install node.js,if already installed make sure it can be reached from current environment."

# Setup
# -----

SCRIPT_DIR="${BASH_SOURCE[0]%\\*}"
SCRIPT_DIR="${SCRIPT_DIR%/*}"
ARTIFACTS=$SCRIPT_DIR/../artifacts
KUDU_SYNC_CMD=${KUDU_SYNC_CMD//\"/}

if [[ ! -n "$DEPLOYMENT_SOURCE" ]]; then
  DEPLOYMENT_SOURCE=$SCRIPT_DIR
fi

if [[ ! -n "$NEXT_MANIFEST_PATH" ]]; then
  NEXT_MANIFEST_PATH=$ARTIFACTS/manifest

  if [[ ! -n "$PREVIoUS_MANIFEST_PATH" ]]; then
    PREVIoUS_MANIFEST_PATH=$NEXT_MANIFEST_PATH
  fi
fi

if [[ ! -n "$DEPLOYMENT_TARGET" ]]; then
  DEPLOYMENT_TARGET=$ARTIFACTS/wwwroot
else
  KUDU_SERVICE=true
fi

if [[ ! -n "$KUDU_SYNC_CMD" ]]; then
  # Install kudu sync
  echo Installing Kudu Sync
  npm install kudusync -g --silent
  exitWithMessageOnError "npm Failed"

  if [[ ! -n "$KUDU_SERVICE" ]]; then
    # In case we are running locally this is the correct location of kuduSync
    KUDU_SYNC_CMD=kuduSync
  else
    # In case we are running on kudu service this is the correct location of kuduSync
    KUDU_SYNC_CMD=$APPDATA/npm/node_modules/kuduSync/bin/kuduSync
  fi
fi

# Node Helpers
# ------------

selectNodeVersion() {
  if [[ -n "$KUDU_SELECT_NODE_VERSION_CMD" ]]; then
    SELECT_NODE_VERSION="$KUDU_SELECT_NODE_VERSION_CMD \"$DEPLOYMENT_SOURCE\" \"$DEPLOYMENT_TARGET\" \"$DEPLOYMENT_TEMP\""
    eval $SELECT_NODE_VERSION
    exitWithMessageOnError "select node version Failed"

    if [[ -e "$DEPLOYMENT_TEMP/__nodeVersion.tmp" ]]; then
      NODE_EXE=$(cat "$DEPLOYMENT_TEMP/__nodeVersion.tmp")
      exitWithMessageOnError "getting node version Failed"
    fi

    if [[ -e "$DEPLOYMENT_TEMP/__npmVersion.tmp" ]]; then
      NPM_JS_PATH=$(cat "$DEPLOYMENT_TEMP/__npmVersion.tmp")
      exitWithMessageOnError "getting npm version Failed"
    fi

    if [[ ! -n "$NODE_EXE" ]]; then
      NODE_EXE=node
    fi

    NPM_CMD="\"$NODE_EXE\" \"$NPM_JS_PATH\""
  else
    NPM_CMD=npm
    NODE_EXE=node
  fi
}

##################################################################################################################################
# Deployment
# ----------

echo Handling node.js deployment.

# 1. KuduSync
if [[ "$IN_PLACE_DEPLOYMENT" -ne "1" ]]; then
  "$KUDU_SYNC_CMD" -v 50 -f "$DEPLOYMENT_SOURCE" -t "$DEPLOYMENT_TARGET" -n "$NEXT_MANIFEST_PATH" -p "$PREVIoUS_MANIFEST_PATH" -i ".git;.hg;.deployment;deploy.sh"
  exitWithMessageOnError "Kudu Sync Failed"
fi

# 2. Select node version
selectNodeVersion

# 3. Install yarn packages
if [ -e "$DEPLOYMENT_TARGET/package.json" ]; then
  cd "$DEPLOYMENT_TARGET"
  echo "Running yarn install"
  eval yarn install --production=false --network-timeout 1000000
  echo "building dist"
  eval yarn build
  echo "Running migrations"
  eval yarn typeorm:migration:run
  exitWithMessageOnError "yarn Failed"
  cd - >/dev/null
fi

##################################################################################################################################
echo "Finished successfully."

我仅将变量 WEBSITE_NODE_DEFAULT_VERSION 设置为(这次,但我已经尝试了多种组合)为 12.18.2,并且我没有设置 WEBSITE_NPM_DEFAULT_VERSION 变量。这是我尝试使用 git local 方法部署时的输出,命令为 git push azure master:master:

Enumerating objects: 9,done.
Counting objects: 100% (9/9),done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3),done.
Writing objects: 100% (5/5),391 bytes | 391.00 KiB/s,done.
Total 5 (delta 2),reused 0 (delta 0),pack-reused 0
remote: Deploy Async
remote: Updating branch 'master'.
remote: Updating submodules.
remote: Preparing deployment for commit id '79f0842a60'.
remote: Running custom deployment command...
remote: Not setting execute permissions for bash ./scripts/bash/deploy.sh
remote: Running deployment command...
remote: Handling node.js deployment.
remote: Kudu sync from: '/home/site/repository' to: '/home/site/wwwroot'
remote: Ignoring: .deployment
remote: Ignoring: .git
remote: Ignoring: scripts/bash/deploy.sh
remote: Detecting node version spec...
remote: Using appsetting WEBSITE_NODE_DEFAULT_VERSION value: 12.18.2
remote: Node.js versions available on the platform are: 8.0.0,8.1.4,8.2.1,8.8.1,8.9.4,8.11.4,8.12.0,8.15.1,8.17.0,9.4.0,10.1.0,10.10.0,10.14.2,10.21.0,10.23.0,12.18.2,12.19.0,14.15.0.
remote: ENOENT: no such file or directory,open '/opt/nodejs/12.18.2/npm.txt'
remote: Resolved to version 12.18.2
remote: Detecting npm version spec...
remote: An error has occurred during web site deployment.
remote: select node version Failed
remote: Deployment Logs : 'https://***.scm.azurewebsites.net/newui/jsonviewer?view_url=/api/deployments/79f0842a60c7fe25af603fe673868789272923e3/log'
To https://***.scm.azurewebsites.net:443/kiwi-prod-appservice.git
   cdc1c91..79f0842  master -> master

当我点击链接查看日志详细信息时:

[
    "0" :
    {
        "details_url" : null,"id" : "660d4119-1437-494a-a97b-5af7244afd58","log_time" : "2020-12-22T04:58:51.7786621Z","message" : "Updating branch 'master'.","type" : 0
    },"1" :
    {
        "details_url" : null,"id" : "bca90e55-fc4c-40c4-91bd-337a0e3df515","log_time" : "2020-12-22T04:58:53.3322101Z","message" : "Updating submodules.","2" :
    {
        "details_url" : null,"id" : "bfc59c6f-e3ad-4bbd-afb5-bda11bec9771","log_time" : "2020-12-22T04:58:53.3779506Z","message" : "Preparing deployment for commit id '79f0842a60'.","3" :
    {
        "details_url" : null,"id" : "92219cc6-d58f-4988-9ec5-c1fd109c0986","log_time" : "2020-12-22T04:58:53.4866308Z","message" : "Running custom deployment command...","4" :
    {
        "details_url" : null,"id" : "f61aa2f5-8d77-4d3b-b328-3ab1fc69bf33","log_time" : "2020-12-22T04:58:53.51928Z","message" : "Not setting execute permissions for bash ./scripts/bash/deploy.sh","5" :
    {
        "details_url" : "https://***.scm.azurewebsites.net/api/deployments/79f0842a60c7fe25af603fe673868789272923e3/log/3ed28b72-4514-4c87-8d6a-006c09150754","id" : "3ed28b72-4514-4c87-8d6a-006c09150754","log_time" : "2020-12-22T04:58:53.5555321Z","message" : "Running deployment command...","type" : 2
    }
]

解决方法

在评论 SELECT_NODE_VERSION 命令后解决(暂时)

# SELECT_NODE_VERSION="$KUDU_SELECT_NODE_VERSION_CMD \"$DEPLOYMENT_SOURCE\" \"$DEPLOYMENT_TARGET\" \"$DEPLOYMENT_TEMP\""
# eval $SELECT_NODE_VERSION
# exitWithMessageOnError "select node version failed"

因为错误总是被触发。我还必须使用 npm 而不是 yarn,因为 yarn 使用的节点版本不正确

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。