BitBucket Pipeline: добавление NodeJS для Gulp в образ microsoft / dotnet: sdk

У меня есть приложение ASP.NET Core. Он использует Глоток, среди прочего, для преобразования Sass в CSS. Я уже изменил свой файл .csproj, чтобы задачи Gulp выполнялись до publish. Это сделано для того, чтобы у меня были все мои JS и CSS в артефактах.

<Target Name = "PrePublishScript" BeforeTargets = "PrepareForPublish">
  <Exec Command = "npm install" />
  <Exec Command = "gulp" />
</Target>

Вот мой файл конвейера BitBucket:

pipelines:
  branches:
    master:
      - step:
          name: Build
          image: microsoft/dotnet:sdk
          caches:
            - dotnetcore
          script:
            - export PROJECT_NAME=YeGods.sln
            - dotnet restore
            - dotnet build $PROJECT_NAME
            - dotnet publish $PROJECT_NAME --configuration Release --output dist --verbosity minimal
          artifacts:
            - YeGods.Web/dist/**
      - step:
          name: Deploy
          image: alpine:3.8
          script:
            - apk add --update openssh
            - ssh deploy@$SERVER_HOST 'bash -s' < $BITBUCKET_CLONE_DIR/pre-deploy-script.sh
            - scp -r YeGods.Web/dist/* deploy@$SERVER_HOST:$SERVER_PATH_TO_SITE_DIRECTORY
            - ssh deploy@$SERVER_HOST 'bash -s' < $BITBUCKET_CLONE_DIR/post-deploy-script.sh

В настоящее время это не удается, потому что вызов сценария npm install завершается неудачно, поскольку в образе microsoft/dotnet:sdk не установлен NodeJS. Я подозреваю, что все, что мне нужно сделать, это установить NodeJS в другом вызове сценария до этого - export PROJECT_NAME=YeGods.sln. Я добавил apt-get install nodejs, но это не сработало. Он сказал, что не может найти nodejs.

Если какой образ мышления верен, как правильно установить NodeJS в образ microsoft/dotnet:sdk?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
476
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У меня есть статья именно по этой проблеме, вот краткое изложение:

Решение 1:

Вам нужен образ докера, в котором также установлены dotnet и node. Это легко сделать, расширив официальные образы dotnet от Microsoft, установив nodejs. Но вам нужно знать, как пользоваться докером.

Это может быть хорошей возможностью изучить докер, если вы еще этого не сделали, в Интернете доступно множество руководств.

Я делал это раньше и загрузил свой образ докера в концентратор докеров, чтобы конвейеры могли его использовать. Он общедоступен на dockerhub, но вам действительно не следует использовать изображения людей, которые не доверяют, но если вы все же хотите протестировать, измените image: microsoft/dotnet:sdk на image:peterekepeter/dotnet-node-sdk:latest

Вот пример Dockerfile, как взять образ dotnet и установить на него nodejs:

FROM microsoft/dotnet:2-sdk

# install nodejs for building & testing frontend

RUN curl -sL https://deb.nodesource.com/setup_10.x  | bash -
RUN apt-get -y install nodejs
RUN node -v

Решение 2:

Выделите сборку внешнего интерфейса на отдельный этап конвейеров и запустите задачи gulp на образе докера, на котором установлен nodejs. Если между двумя этапами есть зависимости построения, сохраните их с помощью артефактов.

Но для этого вам нужно изменить сценарии сборки, удалить команду gulp из проекта csproj и запустить их как часть сценария конвейеров.

Вот пример того, как это сделать:

pipelines:
  default:
    - step:
        name: .NET Core build & test
        image: microsoft/dotnet:2-sdk
        caches:
          - dotnetcore
        script:
          - dotnet restore
          - dotnet build --no-restore
          - dotnet test --no-build --no-restore
    - step:
        name: Frontend build & test
        image: node:6.9.4
        caches:
         - node
        script:
         - npm install
         - npm run build
         - npm run test

Другие вопросы по теме