У меня есть экземпляр контейнера Azure, который я использую в качестве агента Azure Devops. Я попытался добавить npm в файл докеров агента. Если я подключаюсь к экземпляру контейнера с портала Azure и запускаю npm install -g sass
, он работает нормально.
root@SandboxHost-638173989121880372:/azp# npm install -g sass
changed 17 packages in 926ms
2 packages are looking for funding
run `npm fund` for details
Мой конвейер имеет следующую задачу:
- task: Bash@3
displayName: 'npm install sass'
inputs:
targetType: 'inline'
script: 'npm install -g sass'
который терпит неудачу со следующим:
Starting: npm install sass
==============================================================================
Task : Bash
Description : Run a Bash script on macOS, Linux, or Windows
Version : 3.214.0
Author : Microsoft Corporation
Help : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/bash
==============================================================================
Generating script.
Script contents:
npm install -g sass
========================== Starting Command Output ===========================
/usr/bin/bash /azp/_work/_temp/fcfde5dd-1d1f-40c7-ba8f-9b6b3e0fb87f.sh
/azp/_work/_temp/fcfde5dd-1d1f-40c7-ba8f-9b6b3e0fb87f.sh: line 1: npm: command not found
##[error]Bash exited with code '127'.
Finishing: npm install sass
Я предполагаю, что агент должен работать в каком-то другом контексте, который не может найти npm, но ищет идеи о том, как это решить.
Докерфайл
FROM ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive
#### - Basic Packages - ####
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y -qq --no-install-recommends \
apt-transport-https \
apt-utils \
ca-certificates \
curl \
git \
gnupg \
iputils-ping \
jq \
lsb-release \
software-properties-common \
zip \
wget && rm -rf /var/lib/apt/lists/*
#### - Azure CLI and Kubectl for Azure AKS - ####
RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash && \
az aks install-cli
#### - PowerShell - ####
# Download the Microsoft repository GPG keys
# Register the Microsoft repository GPG keys
# Delete the the Microsoft repository GPG keys file
# Update the list of packages after we added packages.microsoft.com
# Install PowerShell
RUN wget -q "https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb" && \
dpkg -i packages-microsoft-prod.deb && \
rm packages-microsoft-prod.deb && \
apt-get update && \
apt-get upgrade -y && \
apt-get install -y powershell && rm -rf /var/lib/apt/lists/*
#### - Terraform CLI - ####
RUN wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | tee /usr/share/keyrings/hashicorp-archive-keyring.gpg && \
gpg --no-default-keyring --keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg --fingerprint && \
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/hashicorp.list && \
apt update && \
apt install -y terraform && rm -rf /var/lib/apt/lists/*
#### - Docker CLI - ####
RUN mkdir -m 0755 -p /etc/apt/keyrings && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \
echo \
"deb [arch = "$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null && \
apt update && \
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin && rm -rf /var/lib/apt/lists/*
#### - Npm and Node.js via NVM - ####
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash && \
export NVM_DIR = "$HOME/.nvm" && \
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" && \
nvm install node
# Can be 'linux-x64', 'linux-arm64', 'linux-arm', 'rhel.6-x64'.
ENV TARGETARCH=linux-x64
WORKDIR /azp
COPY ./start.sh .
RUN chmod +x start.sh
ENTRYPOINT [ "./start.sh" ]
*** Редактировать - переключился с использования NVM на прямую установку NPM/Node, и это сработало.
#### - Node and NPM - ####
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
apt-get install -y nodejs && rm -rf /var/lib/apt/lists/*
Переключился с использования NVM на прямую установку NPM/Node, и это сработало.
#### - Node and NPM - ####
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
apt-get install -y nodejs && rm -rf /var/lib/apt/lists/*
Я подозреваю, что это было связано с использованием NVM, поэтому я переключился на установку NPM/Node напрямую, и теперь это работает.