有很多方法可以做到这一点,只需搜索任何用于 CI/CD 的工具。
最简单的方法是手动操作,连接到您的 Linux 服务器,创建一个 git pull 的代码,然后运行您在本地运行的相同命令。
其他选项是将您的 docker 映像的push 执行到容器注册表,然后拉入您的 docker 服务器,您就可以开始了
编辑:
你真的应该看看一些 CI 服务,例如,在我们的环境中,我们使用 GitLab,当我们推送到 master 时,有一个 gitlab.yml 构建项目,然后进行推送:
image: docker:latest
services:
- docker:dind
stages:
- build
api:
variables:
IMAGE_NAME: git.lagersoft.com:4567/gumbo/vtae/api:${CI_BUILD_REF}
stage: build
only:
- master
script:
- docker build -t ${IMAGE_NAME} -f vtae.api/Dockerfile .
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN ${IMAGE_NAME}
- docker push ${IMAGE_NAME}
有了这个,我们只需要使用最新版本拉入我们的服务器。
值得注意的是,docker 本身并不处理发布部分,所以如果你开始,你需要手动或使用一些工具(任何 CI 工具,如 gitlab、jenkins、circleci、amazon 代码管道......)学习我会建议手动启动,然后集成一些 CI 工具。
编辑 2
关于 Visual Studio 工具,我不建议将其用于本地开发以外的任何其他用途,因为是的,它仅适用于 Windows,并且仅适用于 Visual Studio(Rider 刚刚集成),所以,在 linux 环境中进行部署,我们使用自己的 docker 和 docker compose 文件,无论如何它们都基于默认值,它们是这样的:
FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY lagersoft.common/lagersoft.common.csproj lagersoft.common/
COPY vtae.redirect/vtae.redirect.csproj vtae.redirect/
COPY vtae.data/vtae.data.csproj vtae.data/
COPY vtae.common/vtae.common.csproj vtae.common/
RUN dotnet restore vtae.redirect/vtae.redirect.csproj
COPY . .
WORKDIR /src/vtae.redirect
RUN dotnet build vtae.redirect.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish vtae.redirect.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "vtae.redirect.dll"]
此 docker 文件复制所有相关项目(我讨厌复制部分,但与 Microsoft 的默认文件相同),构建并发布应用程序,另一方面我们有一个 docker-compose添加一些服务(此文件必须在解决方案文件夹中才能访问所有相关项目):
version: '3.4'
services:
vtae.redirect.redis:
image: redis
volumes:
- "./volumes/redirect/redis/data:/data"
container_name: vtae.redirect.redis
vtae.redirect:
image: vtae.redirect
depends_on:
- vtae.redirect.redis
build:
context: .
dockerfile: vtae.redirect/Dockerfile
ports:
- "8080:80"
volumes:
- "./volumes/redirect/data:/data"
container_name: vtae.redirect
entrypoint: dotnet /app/vtae.redirect.dll
有了这个部分,只剩下提交,然后拉入服务器并运行docker-compose up命令来运行我们的应用程序(你可以直接从 docker 文件中执行,但它更容易和更易于管理使用 docker compose。
编辑 3
为了在服务器中进行部署,我们使用了两个工具。
- 首先在提交完成后运行 gitlab ci
- 它生成 docker 文件中指定的构建并将其推送到我们的 Gitlab 容器注册表,如果它是 amazon、google、azure 等的容器注册表也是如此......
- 然后它向生产中的服务器发出一个 post 请求,该服务器在一个单独的端口上运行一个特殊的工具
- 服务器收到 post 请求并对其进行验证,为此我们使用 this tool(朋友是 repo 所有者)
- 脚本接收请求,检查登录,如果有效,则简单地从我们的 gitlab 容器注册表中拉取并运行 docker-compose up
备注
该工具并不完美,我们正在从 docker 转向使用 kubernetes,您是否可以直接从您的机器或一些 CI 集成连接到您的集群并直接进行部署,无论您选择哪种解决方案,我都推荐你开始了解 kubernetes 可以如何帮助你,遗憾的是要学习更多的层,但它非常有希望,你将能够无痛地发布到 almos 任何云或金属,包括后备、缩放和其他东西。
还有
如果您不想或不能使用容器注册表(我强烈推荐这种方式),您可以使用相同的工具,在执行它的 .sh 中,只需执行 git pull,然后执行 docker build 或 docker compose。
最简单的场景可能是自己创建一个脚本,在其中执行 ssh 到服务器,将文件上传为 zip,然后在服务器中运行它,请记住,Ubuntu 在 microsoft 商店中并且可以运行此脚本,但其他解决方案更“独立”和可扩展,所以,做出你的选择吧!