Oryx not being triggered when deploying to Linux based Azure App Service

Andrea Bisiach 21 Reputation points
2022-01-16T22:39:19.313+00:00

Hello,

I am testing the deployment of a node app that needs to be built & run using yarn. For performance reasons, I am deploying zip file (node-app.zip) either using Azure Cloud shell (az webapp deploy) or a GitHub action (azure/webapps-deploy@v2).
II would like to use some custom build commands (pre/post/run) as documented here (https://github.com/microsoft/Oryx/blob/main/doc/configuration.md#oryx-configuration)
To do that I started adding to the App Service configuration the setting SCM_DO_BUILD_DURING_DEPLOYMENT=true
According to the documentation (https://learn.microsoft.com/en-us/azure/app-service/deploy-zip?tabs=cli) this should trigger build automation (Oryx) also for a ZIP deploy

The problem:
Oryx is clearly not being activated and the proof is that none of the commands specified in these App Service configurations is being called (see again Orix configuration:
PRE_BUILD_COMMAND, POST_BUILD_COMMAND, CUSTOM_BUILD_COMMAND,RUN_BUILD_COMMAND.
I have verified that the settings are applied to the App Service from the Kudo bash console:

APPDATA=/opt/Kudu/local   
APPSETTING_COMMAND='unzip -o node-app -d $DEPLOYMENT_TARGET'   
APPSETTING_CUSTOM_BUILD_COMMAND='echo CUSTOM_BUILD_COMMAND'   
APPSETTING_FUNCTIONS_RUNTIME_SCALE_MONITORING_ENABLED=0   
APPSETTING_POST_BUILD_COMMAND='echo POST_BUILD_COMMAND'   
APPSETTING_PRE_BUILD_COMMAND='echo PRE_BUILD_COMMAND'   
APPSETTING_REMOTEDEBUGGINGVERSION=16.0.30709.132   
APPSETTING_RUN_BUILD_COMMAND='echo RUN_BUILD_COMMAND'   
APPSETTING_SCM_DO_BUILD_DURING_DEPLOYMENT=true   
APPSETTING_SCM_USE_LIBGIT2SHARP_REPOSITORY=0   
APPSETTING_ScmType=GitHubAction   
APPSETTING_WEBSITE_AUTH_AUTO_AAD=False   
APPSETTING_WEBSITE_AUTH_ENABLED=False   
APPSETTING_WEBSITE_AUTH_LOGOUT_PATH=/.auth/logout   
APPSETTING_WEBSITE_HTTPLOGGING_RETENTION_DAYS=3   
APPSETTING_WEBSITE_SITE_NAME=app-tobedeleted2   
APPSVC_RUN_ZIP=FALSE   
ASPNETCORE_URLS=http://0.0.0.0:8181   
BASH=/bin/bash   
BASHOPTS=cmdhist:complete_fullquote:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath   
BASH_ALIASES=()   
BASH_ARGC=()   
BASH_ARGV=()   
BASH_CMDS=()   
BASH_EXECUTION_STRING='set  && echo '\'''\'' && pwd'   
BASH_LINENO=()   
BASH_SOURCE=()   
BASH_VERSINFO=([0]="4" [1]="4" [2]="12" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")   
BASH_VERSION='4.4.12(1)-release'   
COMMAND='unzip -o node-app -d $DEPLOYMENT_TARGET'   
COMPUTERNAME=hidden   
CUSTOM_BUILD_COMMAND='echo CUSTOM_BUILD_COMMAND'   
DEBIAN_FLAVOR=stretch   
DEBIAN_FRONTEND=noninteractive   
DEPLOYMENT_SOURCE=/home   
DEPLOYMENT_TARGET=/home/site/wwwroot   
DIRSTACK=()   
DOTNET_CLI_TELEMETRY_PROFILE=AzureKudu   
DOTNET_RUNNING_IN_CONTAINER=true   
DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1   
DOTNET_USE_POLLING_FILE_WATCHER=true   
DYNAMIC_INSTALL_ENABLED=true   
ENABLE_DYNAMIC_INSTALL=true   
ENABLE_ORYX_BUILD=true   
EUID=1004   
EnableNuGetPackageRestore=true   
FRAMEWORK=NODE   
FRAMEWORK_VERSION=14-lts   
FUNCTIONS_RUNTIME_SCALE_MONITORING_ENABLED=0   
GO_WEB_CONFIG_TEMPLATE=/opt/Kudu/Scripts/go.web.config.template   
GROUPS=()   
GYP_MSVS_VERSION=2015   
HOME=/home   
HOMEDRIVE=   
HOMEPATH=/home   
HOSTNAME=hidden   
HOSTTYPE=x86_64   
HTTP_AUTHORITY=app-tobedeleted2.scm.azurewebsites.net   
HTTP_HOST=app-tobedeleted2.scm.azurewebsites.net   
HTTP_LOGGING_ENABLED=1   
IFS=$' \t\n'   
KUDU_APPPATH=/opt/Kudu   
KUDU_BUILD_VERSION=1.0.0   
KUDU_RUN_USER=hidden   
KUDU_SELECT_NODE_VERSION_CMD='node "/opt/Kudu/Scripts/selectNodeVersion"'   
KUDU_SELECT_PYTHON_VERSION_CMD='python "/opt/Kudu/Scripts/select_python_version.py"'   
KUDU_SYNC_CMD=kudusync   
KUDU_WEBSSH_PORT=3000   
LANG=C.UTF-8   
MACHTYPE=x86_64-pc-linux-gnu   
MSBUILD_15_DIR=   
MSBUILD_PATH=   
NODE_VERSION=10.22.0   
NOKOGIRI_USE_SYSTEM_LIBRARIES=true   
NPM_JS_PATH=/usr/bin/npm-cli.js   
NUGET_EXE=/opt/Kudu/Scripts/nuget.exe   
NUGET_PACKAGES=/var/nuget   
NUGET_XMLDOC_MODE=skip   
OLDPWD=/   
OPTERR=1   
OPTIND=1   
ORIGINAL_PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin   
ORYX_AI_INSTRUMENTATION_KEY=hidden   
ORYX_ENV_NAME='~1app-tobedeleted2'   
ORYX_ENV_TYPE=AppService   
ORYX_PATHS=/opt/oryx:/opt/nodejs/lts/bin:/opt/dotnet/lts:/opt/python/latest/bin:/opt/php/lts/bin:/opt/php-composer:/opt/yarn/stable/bin:/opt/hugo/lts   
ORYX_SDK_STORAGE_BASE_URL=https://oryx-cdn.microsoft.io   
OSTYPE=linux-gnu   
PATH=/home/site/deployments/tools:/opt/Kudu/Scripts:/usr/bin:/usr/bin:/usr/local/bin:/usr/local/bin:/usr/local/bin:/usr/local/bin:/usr/local/.rbenv/bin:/usr/local:/opt/oryx:/opt/nodejs/lts/bin:/opt/dotnet/lts:/opt/python/latest/bin:/opt/php/lts/bin:/opt/php-composer:/opt/yarn/stable/bin:/opt/hugo/lts:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/nodejs/9/bin   
PLATFORM_VERSION=96.0.10.637   
PORT=8181   
POST_BUILD_COMMAND='echo POST_BUILD_COMMAND'   
PPID=65   
PRE_BUILD_COMMAND='echo PRE_BUILD_COMMAND'   
PS4='+ '   
PWD=/home   
PYTHONIOENCODING=UTF-8   
RBENV_ROOT=/usr/local/.rbenv   
REMOTEDEBUGGINGVERSION=16.0.30709.132   
RUBY_CFLAGS=-O3   
RUBY_CONFIGURE_OPTS=--disable-install-doc   
RUN_BUILD_COMMAND='echo RUN_BUILD_COMMAND'   
SCM_BUILD_ARGS=   
SCM_COMMAND_IDLE_TIMEOUT=60   
SCM_DNVM_PS_PATH=/opt/Kudu/Scripts/dnvm.ps1   
SCM_DO_BUILD_DURING_DEPLOYMENT=true   
SCM_LOGSTREAM_TIMEOUT=7200   
SCM_TRACE_LEVEL=Verbose   
SCM_USE_LIBGIT2SHARP_REPOSITORY=0   
SELECT_LATEST_VERSION_CMD=/opt/Kudu/Scripts/selectLatestVersion.ps1   
SHELL=/bin/sh   
SHELLOPTS=braceexpand:hashall:interactive-comments   
SHLVL=2   
SITE_BITNESS=AMD64   
SSH_USER_NAME=kudu_ssh_user   
SSH_USER_PASSWORD=hidden   
ScmType=GitHubAction   
TERM=dumb   
UID=1004   
VCInstallDir_140=   
VCTargetsPath=   
WEBJOBS_DEPLOY_CMD=deploy_webjobs.cmd   
WEBROOT_PATH=/home/site/wwwroot   
WEBSITE_AUTH_AUTO_AAD=False   
WEBSITE_AUTH_ENABLED=False   
WEBSITE_AUTH_ENCRYPTION_KEY=hidden   
WEBSITE_AUTH_LOGOUT_PATH=/.auth/logout   
WEBSITE_AUTH_SIGNING_KEY=hidden   
WEBSITE_HOSTNAME=app-tobedeleted2.azurewebsites.net   
WEBSITE_HTTPLOGGING_RETENTION_DAYS=3   
WEBSITE_INSTANCE_ID=hidden   
WEBSITE_OWNER_NAME=hidden   
WEBSITE_RESOURCE_GROUP=rg-tobedeleted   
WEBSITE_ROLE_INSTANCE_ID=0   
WEBSITE_SITE_NAME=app-tobedeleted2   
WEBSITE_SKU=Basic   
WEBSITE_SSH_PASSWORD='Docker!'   
WEBSITE_SSH_USER=root   
WEBSITE_STACK=NODE   
_=/sbin/runuser   
deployment_branch=master   

In fact, the only deployment customization I am able to do is setting the variable COMMAND in the App Service configuration, i.e. to unzip the file:

APPSETTING_COMMAND='unzip -o node-app -d $DEPLOYMENT_TARGET'   
COMMAND='unzip -o node-app -d $DEPLOYMENT_TARGET'   

But I do need to get Oryx activated.
What am I missing in my configuration?

Thanks!

Azure App Service
Azure App Service
Azure App Service is a service used to create and deploy scalable, mission-critical web apps.
8,936 questions
0 comments No comments
{count} votes

1 answer

Sort by: Most helpful
  1. ajkuma 28,036 Reputation points Microsoft Employee Moderator
    2022-01-20T13:54:58.427+00:00

    @Andrea Bisiach , Firstly, Apologies for the delay in responding here. I would need more information about your WebApp and subscription ID (which is PII) for a detailed investigation. I’ll follow-up with you privately on this.
    Note: Please do not share PII data on the public forum.

    Just to highlight,

    After the code is pushed App Service will call Oryx to build the application if a deployment script wasn't provided.

    if package.json is discovered in the repo Oryx includes npm run build in the build script. is package.json in the root of the repo?

    If no custom deployment script is provided, Oryx will run behind the scenes and perform the required steps to build and configure the application.

    And, for the App settings
    SCM_DO_BUILD_DURING_DEPLOYMENT - if false, bypass automatic build.

    And
    ENABLE_ORYX_BUILD - if true, use the Oryx build system instead of the legacy Kudu system

    You may navigate Kudu and review the logs.

    Go to the KuduLite newUI (https://<sitename>.scm.azurewebsites.net/newui).
    https://<sitename>.scm.azurewebsites.net/api/vfs/LogFiles/kudu/trace.

    And, checkout the logs to see more details. You can see how the files were extracted to a repository at /tmp/zipdeploy/extracted, and verify for “oryx build”.

    You may also test this with a sample App - https://github.com/azureossd/Deployment-Oryx-Samples and download all the samples locally.
    And, test deploy

    az webapp deployment source config-zip --resource-group <ResourceGroup> --name <WebAppName> --src reactjs_no_modules.zip

    Much appreciate your patience!


Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.