如何解决选择节点版本时权限被拒绝的部署问题
从一开始,我就一直在为我的 node 12 Web 应用程序使用 kudu 部署时遇到问题。
这次我在管道日志中有 select node version Failed
,但是当我从链接访问日志详细信息时有 Not setting execute permissions for bash
。最糟糕的是,代码或管道中没有任何变化,有一天你醒来,你的应用程序不再工作。这是第三次发生,每次在可用版本列表中都有新版本的节点可用。有人可以指出我可以使用一个多月的解决方案吗?我使用了 kudu 文档中节点 Web 应用程序的默认脚本,只是用纱线替换了 npm。并在应用配置中使用环境变量 WEBSITE_NODE_DEFAULT_VERSION
和 WEBSITE_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 举报,一经查实,本站将立刻删除。