.net core 2.x - docker-linux容器-持续集成(jenkins)

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

1.准备工做

先说明哈,如下操做都是在windows中:git

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

  b).须要下载安装 docker for windows,安装以后使用的 linux容器,若是不知道的,能够看上一篇sql

  c).咱们这里的演示使用的github,因此须要一个git的帐号,同时须要受权docker

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

1.1.安装jenkins并配置github

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

选择第一个安装就行,安装完成以后须要咱们解锁jenkins:windows

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

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.其余....部分忘记记录了,,,,,遇到再留言吧.

相关文章
相关标签/搜索