• ABP vNext微服务架构详细教程——镜像推送


    1. Jenkins搭建

    为实现容器化部署,我们需要将代码打包成镜像并推送至容器仓库,我们可以选择自建容器仓库或者使用公有云服务商提供的镜像仓库。这里我们使用阿里云提供的免费镜像仓库。

    代码打包和镜像仓库推送有很多种方式,在实际项目中,我推荐使用Jenkins实现自动化打包推送。

    我们这里我们使用Docker部署Jenkins,首先,安装Docker,这里我使用的Ubuntu系统,并使用一键安装脚本:

    curl -sSL https://get.daocloud.io/docker | sh

    之后我们需要开启Docker的2375端口方法如下:

    vim /usr/lib/systemd/system/docker.service

    #修改ExecStart行为下面内容:
    ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

    加载配置项并重启Docker

    systemctl daemon-reload
    systemctl restart docker

    之后使用Jenkins官方文档提供的部署命令如下:

    docker run  -u root  --rm  -d  -p 8080:8080 -p 50000:50000 -v jenkins-data:/var/jenkins_home  -v /var/run/docker.sock:/var/run/docker.sock  jenkinsci/blueocean 

    运行成功后访问8080端口,可以进入Jenkins页面。

    这里我们需要在宿主机上运行一下命令进入Jenkins控制台:

    docker exec 【Jenkins容器ID】 -it /bin/bash

    进入容器后使用以下命令获取第一次登录所需秘钥:

    cat /var/jenkins_home/secrets/initialAdminPassword

    登录后,依照默认选项配置Jenkins组件,并设置用户名密码,下次登录可使用新的用户名密码登录。

    配置完成后进入管理面板,找到Manage Jenkins→插件管理→可选插件,搜索Docker,并安装。

    安装完成后,在Manage Jenkins→系统配置中找到Cloud选项卡,点击“a separate configuration page.”并点击“Add a new cloud”按钮,选择docker。

    点击“Docker Cloud details……”按钮,在Docker Host URI选项中填入docker地址如下:

    tcp://【宿主机IP】:2375

    点击“Test Connection”测试,通过后点击Save保存。

    2. 配置Dockerfile

    以基础服务中的产品服务为例,这里我们使用.Net官方提供的构建方式构建镜像,即将代码拷贝到.Net 6 SDK容器中执行打包和发布,再将发布后的文件拷贝到项目运行镜像中。

    在Jenkins官方提供的Docker组件中,只能指定Dockerfile的目录,无法指定执行构建镜像的目录,所以我们需要让镜像构建的目录和Dockerfile一致。

    在src\service\productmanager目录下添加Dockerfile文件内容如下:

     1 FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
     2 WORKDIR /app
     3 EXPOSE 80
     4 
     5 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
     6 WORKDIR /src
     7 COPY . .
     8 WORKDIR /src/host/Demo.ProductManager.HttpApi.Host
     9 RUN dotnet restore -nowarn:msb3202,nu1503
    10 RUN dotnet build --no-restore -c Release -o /app
    11 
    12 FROM build AS publish
    13 RUN dotnet publish --no-restore -c Release -o /app
    14 
    15 FROM base AS final 
    16 WORKDIR /app
    17 COPY --from=publish /app .
    18 ENTRYPOINT ["dotnet", "Demo.ProductManager.HttpApi.Host.dll"]

    这里需要注意第3行端口号和我们定义的服务端口号一致,第8行WORKDIR中/src后面的路径是启动项相对于Dockerfile所在目录的路径,第18行的dll为启动项的dll文件。

    Demo中其他项目Dockerfile内容格式和此项目一致。

    3. Jenkins配置

    在Jenkins主菜单点击“New Item”创建单个服务发布流程

    输入项目名称为productmanager并选择“Freestyle project”并点击“确定”。

    在源代码管理中选择Git并在Repository URL处配置源代码git地址,这里我使用Demo在Gitee中的地址:https://gitee.com/lightnehum/abp-microservice-demo

    如果GIt地址需要用户名密码,则在Credentials选项卡中点击添加,输入用户名密码并选择此项。

    在“构建”选项卡中点击“增加构建步骤”,并选择“Build/Publish Docker Image”。

    在Directory for Dockerfile输入框中输入:

    /var/jenkins_home/workspace/productmanager/src/service/productmanager

    此地址是Dockerfile在Jenkins容器中的地址,其中/var/jenkins_home/workspace为固定目录,productmanager为Jenkins地址,后面为启动项所在目录(Dockerfile所在目录)相对于总项目目录的地址。

    “Cloud”选择我们在第一章节中配置的“Docker”。

    这里我使用阿里云提供的免费镜像仓库,登录阿里云控制台,进入容器镜像服务,在实例列表中选择个人实例。

    在仓库管理→命名空间中添加自己的命名空间。

    在仓库管理→镜像仓库中添加镜像仓库名称为projectmanager,命名空间选择刚才创建的命名空间,仓库类型选择私有,点击“下一步”,代码源选择“本地仓库”,并点击“创建镜像仓库”。

    创建完成后在仓库的基本信息中找到公网地址,并将内容复制到Jenkins之前步骤“构建”选项卡的Image输入框中。

    继续编辑Jenkins“构建”选项卡,在Registry Credentials选项中,我们需要添加并选择阿里云镜像仓库的用户名密码。

    将选项卡中的复选框:Push image、Clean local images、Attempt to remove images when jenkins deletes the run、Disable caching、Pull base image全部勾选。

    点击保存完成Jenkins中产品管理服务发布配置。

    点击“立即构建”可从git中拉取代码并将产品管理服务推送到阿里云镜像仓库。

    其他服务可依照相同方法创建Jenkins发布流程将镜像推送至镜像仓库。

  • 相关阅读:
    SQL Server 2005 Integration Services (SSIS)数据源之MySQL
    SQL Server 2005 Integration Services (SSIS)数据源之Sybase
    oracle10g 监听服务无法启动
    创建一个People类型,有年龄、工资、性别三个属性。 定义一个方法叫做找对象,找对象方法传过来一个人;
    基于组件的C#农历算法
    ASP.NET中实现中文简/繁体自动转换的类
    最牛的QQ资料
    单一登陆(Single Signon)问题
    Smart Client Case Study Source Code Download from MSDN China
    简历制作 | 论文资源 | 考试认证 | 招聘求职 | 文学艺术 | 外语学习
  • 原文地址:https://www.cnblogs.com/zklight/p/15845862.html
Copyright © 2020-2023  润新知