BitBucket 管道:在 microsoft/dotnet:sdk 图像上为 Gulp 添加 NodeJS
BitBucket Pipeline: Adding NodeJS for Gulp on the microsoft/dotnet:sdk image
我有一个 ASP.NET 核心应用程序。它使用 Gulp 将 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。我怀疑我所要做的就是在 - export PROJECT_NAME=YeGods.sln
之前的另一个脚本调用中安装 NodeJS。所以我添加了 apt-get install nodejs
但这没有用。它说找不到 nodejs
.
如果哪种思路是正确的,那么将 NodeJS 安装到 microsoft/dotnet:sdk
图像上的正确方法是什么?
I have an article on this exact issue,这里是总结:
解决方案 1:
您需要一个同时安装了 dotnet 和节点的 docker 映像。这可以通过安装 nodejs 扩展来自微软的官方 dotnet 图像来轻松完成。但是您确实需要知道如何使用 docker。
这可能是学习 docker 的好机会,如果您还没有,网上有很多教程。
我之前这样做过,并将我的 docker 图片上传到 docker 中心,以便 Pipelines 可以使用它。它在 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:
在安装了 nodejs 的 docker 图像上将前端构建分离到单独的管道步骤和 运行 gulp 任务。如果您在这两个步骤之间建立了依赖关系,请使用工件持久化它们。
但要使其正常工作,您需要修改构建脚本,从 csproj 项目中删除 gulp 命令,并将它们 运行 作为管道脚本的一部分。
这是一个如何执行此操作的示例:
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
我有一个 ASP.NET 核心应用程序。它使用 Gulp 将 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。我怀疑我所要做的就是在 - export PROJECT_NAME=YeGods.sln
之前的另一个脚本调用中安装 NodeJS。所以我添加了 apt-get install nodejs
但这没有用。它说找不到 nodejs
.
如果哪种思路是正确的,那么将 NodeJS 安装到 microsoft/dotnet:sdk
图像上的正确方法是什么?
I have an article on this exact issue,这里是总结:
解决方案 1:
您需要一个同时安装了 dotnet 和节点的 docker 映像。这可以通过安装 nodejs 扩展来自微软的官方 dotnet 图像来轻松完成。但是您确实需要知道如何使用 docker。
这可能是学习 docker 的好机会,如果您还没有,网上有很多教程。
我之前这样做过,并将我的 docker 图片上传到 docker 中心,以便 Pipelines 可以使用它。它在 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:
在安装了 nodejs 的 docker 图像上将前端构建分离到单独的管道步骤和 运行 gulp 任务。如果您在这两个步骤之间建立了依赖关系,请使用工件持久化它们。
但要使其正常工作,您需要修改构建脚本,从 csproj 项目中删除 gulp 命令,并将它们 运行 作为管道脚本的一部分。
这是一个如何执行此操作的示例:
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