• .net core 2.x


    嗯,持续集成,继上一篇我们继续本篇的持续集成.我们就直奔主题了,不扯淡不漫无边际的扯一堆理论,因为说得再多也不如一练.

    1.准备工作

    先说明哈,以下操作都是在windows中:

      a).需要下载安装 jenkins 的windows版本

      b).需要下载安装 docker for windows,安装之后使用的 linux容器,如果不知道的,可以看上一篇

      c).我们这里的演示使用的github,所以需要一个git的账号,同时需要授权

    呵呵,你可能会问为啥都是windows,因为我是windows系统,但是linux操作是一样的,看问后面的内容你就知道了.另外,jenkins的 docker的版本也有的,但是操作起来很吃力的,依旧的做了随笔没有发布出来,记录了很多错误.

    1.1.安装jenkins并配置github

    jenkins获取地址:https://jenkins.io/download/  当前版本是2.138,安装不说了,安装之后可以ctrl+r驶入services.msc查看jenkins的服务是否启动,确定起来之后,我们在浏览器地址栏输入 http://localhost:8080访问jenkins的初始页面:

    选择第一个安装就行,安装完成之后需要我们解锁jenkins:

    当然这是linux下的界面,windows的界面在这个红字部分会把盘符也显示的,直接打开就好了,如果是docker的容器的话,需要先进入这个jenkins的容器,比如:我们就获取一下,先看下容器ID:

    docker container ls --all

    获取密码:

    docker exec -it 容器ID /bin/bash

    然后输入

    cat 页面上提供的文件路径

    就可以看到一个字符产串串了,复制贴进去就好,进入之后会让你设置一个账号密码,那么就设置就行了

     设置完成之后进入到了jenkins的主页:

    我们继续进入: 系统管理 -->系统设置,划到下方的 github的配置:

    在上面输入名称

    这里注意下,点击凭据 的右边的问好,这里显示的  personal access token 跳转到 git的授权设置页面,按照下面的三个权限提示,勾上即可.然后下一步骤:

    点击凭据 Add:

    输入github的账号密码,ID和描述 随便填,点击添加,关闭弹窗

    然后点击 连接测试 显示:Credentials verified for user 你的github名称,即表示验证成功了.

    1.2.jenkins创建构建项目(任务)

    以下内容比较简单,所以下面就看图操作

     

    这因为我是windows的系统,使用的docker for windows,(虽然是linux容器),所以这里构建中选择的不是shell命令,而是windows的批处理命令:这是构建中的内容:

    echo '还原nuget包引用'
    dotnet restore
    
    echo '编译项目'
    dotnet build ESoftor.sln -c Release
    
    echo '发布发布项目 到指定目录,这我指定了我们dockerfile中设置的工作目录'
    dotnet publish ESoftor.WebApi/ESoftor.WebApi.csproj -o /esoftor-api-master
    
    echo '接下来我们直接执行docker-compose.yaml文件即可,但是这里一定要注意,就是项目的配置文件中的而数据库连接,要改成和docker-compose中的数据库的services的名称一致,所以为了测试docker,我在git上创建了一个 esoftor4docker的分支'
    cd /esoftor-api-master
    
    docker-compose build
    docker-compose up

    这里补充说明下:这里的脚本的类型(shell或批处理)选择,是由你环境决定的,这个环境指的是,你当前的要执行这块脚本的环境是否支持相关指令,打比方说,现在我们这里实在Windows下执行,因为我们的cmd支持dotnet和docker以及docker-compose,所以没有任何障碍便可执行成功;再比如Linux或者docker中单独安装的Jenkins,那么,就需要确保当前的Linux或者容器 支持dotnet和docker 及docker-compose ,换句话说,你必须先安装或者pull下来这些服务或者镜像,可不要随便照网上的随便抄,抄完你会后悔的

    这时候点击应用并保存即可.这里使用到的依旧是基于我们上一篇的内容,一个Dockerfile一个docker-compose.yml文件,这两个的配置稍有更改,参考如下:

    Dockerfile:

    # 基于microsoft/dotnet:2.1-sdk or dotnet:latest 默认latest 来创建我们的镜像
    FROM microsoft/dotnet
    
    #指定docker的工作目录为 esoftor-master文件夹,也就是容器的默认的文件夹
    WORKDIR /usr/local/src/esoftor-api-master
    #WORKDIR /esoftor-api-master
    
    # docker对外暴露的端口
    EXPOSE 60000
    
    # 将当前文件夹下的所有文件全部复制到工作目录(如果是在docker进行持续性继承,该行注释掉),如果单纯的只是迁移到docker,这里需要取消注释
    COPY . /usr/local/src/esoftor-api-master
    
    #CMD dotnet ESoftor.WebApi.dll 这里自行百度 CMD和ENTRYPOINT的区别
    ENTRYPOINT ["dotnet", "ESoftor.WebApi.dll"]

    docker-compose.yml

    version: "3"
    
    services:
    
      esoftor.api:
        image: esoftor.api:v1.0
        environment:
          - ASPNETCORE_URLS=http://0.0.0.0:60000
          - ConnectionString=Server=sql.data;User=sa;Password=520Tmc1314!;Database=esoftor.source.novel2;    
        build:
          context: ./
          dockerfile: Dockerfile
        ports: 
          - "8089:60000"
        volumes: 
          - ./:/usr/local/src/esoftor-api-master
        container_name: esoftor.api
        depends_on:
          - sql.data
    
      sql.data:
        image: microsoft/mssql-server-linux:2017-latest
        environment:
          - SA_PASSWORD=520Tmc1314!
          - ACCEPT_EULA=Y
        ports:
          - "14333:1433"
          
          

    将这两个文件放到你的项目的项目中即可:

     

    注意点:

      1.这里需要注意的是,这两个文件需要设置属性 为可复制 或者始终复制

      2.Dockerfile和docker-compose中的路径配置一定要一致,docker-compose中的 volumes 的映射,冒号后面的路经必须是绝对路径,否则会报错

      3.docker-compose.yml中的数据库连接配置和项目的连接配置记得要一直,其他.

     

    这时候我们的jenkins就配置完了,点击等待构建完成,这时候可以看构建的日志内容:如下::

    到这里就可以看到和我们上一篇的执行的熟悉的结果了.

     这时候我们看下我们的docker容器的列表:

    可以看到我们的项目和数据库都跑起来了,再看下是否可以访问:

    嗯,熟悉的界面,熟悉的感觉.就这样!

     2.错误记录

    1. dotnet not found:

    可能的原因是:  1).没有安装docker没有pull microsoft/dotnet的镜像

            2).容器(系统)和构建用的指令不一致,也就是要区分下 windows用的是 批处理,linux用的shell.

     

    2. ERROR: for esoftor.api  Cannot create container for service esoftor.api: invalid volume specification: '/host_mnt/d/esoftor-api-master:./esoftor-api-master:rw': invalid mount config for type "bind": invalid mount path: './esoftor-api-master' mount path must be absolute 

    出现该错误,和 很明显的就是必须使用绝对路径,这里的绝对路径错误出现在docker-conpose.yml的 volumes映射;改成如下即可:

    volumes: 
    - ./:/usr/local/src/esoftor-api-master

     

     3.Build timed out (after 10 minutes). Marking the build as aborted.

    这个问题也是很明显的,构建超时,,,其实不然,是你的配置有问题(如果你那个确定的程序没有问题的话).可以在 jenkins的执行日志的页面,ctrl+f输入exit进行搜索,一般的如果构建失败,上面肯定有某个或者某几个步骤是错误的,会提示exit.

     

    4.No executable found matching command "dotnet-.....dll"

    这个问题其实本质上还是文件找不到的问题或者,执行 dotnet命令的时候,没有找到对应的 xx.dll文件对象;只是这个错误的提示方式是有点容易让人误解可以参考老这里: https://github.com/dotnet/core-setup/issues/1126 

    这里的一个回复其实是很好地解释了这个,感觉像中文咬文嚼字的感觉,,,,:下面这各位老兄说的很合理,这是一个误导性的错误提示:

    5.其他....部分忘记记录了,,,,,遇到再留言吧.

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    设计模式工厂模式
    设计模式原型模式
    Excel自定义格式千分符
    浏览器报:net::ERR_EMPTY_RESPONSE解决方案
    git branch a无法显示远程分支解决办法
    .Net启动程序报错:It was not possible to find any compatible framework version
    自动化测试框架pytest 安装和入门到精通实战
    2020非常全的接口测试面试题及参考答案软件测试工程师没有碰到算我输!
    Python+unittest+requests+excel实现接口自动化测试框架项目实战
    软件测试必学之python+unittest+requests+HTMLRunner编写接口自动化测试集
  • 原文地址:https://www.cnblogs.com/Tmc-Blog/p/10064375.html
Copyright © 2020-2023  润新知