docker Jenkins发布.net core 电脑版发表于:2021/8/6 12:20 ###拉取镜像: tn5>由于本身Jenkins镜像没有.net core环境,所以我们拉取一个制作好的镜像,里边包含Jenkins环境和.net core3.1与5.0的环境以及git的环境。因为我们要使用docker下面的Jenkins来发布git上面的.net core项目,这些都是必须的。 ``` docker pull xsw2014/net-jenkins:1.0 ``` ![](https://img.tnblog.net/arcimg/aojiancc2/ac52c73205f54cb38d420456e3049f4c.png) 安装完后查看镜像: ![](https://img.tnblog.net/arcimg/aojiancc2/8b01afa6779c481bb3bd56dc88b910b0.png) ###运行镜像: ``` docker run -u root --rm -d -p 8000:8080 --name dotnetjenkins \ -v /usr/bin/docker:/usr/bin/docker \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /etc/sysconfig/docker:/etc/sysconfig/docker \ -v /home/dockerVolumes2/jenkins_home:/var/jenkins_home \ xsw2014/net-jenkins:1.0 ``` ![](https://img.tnblog.net/arcimg/aojiancc2/b521332884e5441aa869342d467acafb.png) tn2>这句话第1行意思是用8000映射docker里面8080端口如果你想外网访问的时候用1011那么就修改为1011:8080。<br/> 第2至第4行的意思是docker内部可以调用外部docker来进行打包,因为jenkins是在docker容器内那么容器内是没法再使用docker命令打包的,这个时候我们需要第二至第四行的语句实现内部调用docker了。<br/> 第5行的意思为将本地的/home/dockerVolumes2/jenkins_home映射到/var/jenkins_home 。如果你后面dotnet publish了需要打包后的文件就可以到本地的/home/dockerVolumes2/jenkins_home查看了<br/> 第6行是你拉取的镜像名,如果是你自己制作的换成你自己的就行了 **然后进入容器看看基础环境有没有:** docker exec -it 8d9d397631935f bin/sh ![](https://img.tnblog.net/arcimg/aojiancc2/9d057bfbeaf84e04a771920310445885.png) ###运行Jenkins: >输入你的ip加上我们映射的端口8000 ![](https://img.tnblog.net/arcimg/aojiancc2/590a660b2e284682ba476abfcb6b03f5.png) >使用命令查看初始化密码: ``` //进入容器 docker exec -it 8d9d397631935f bin/sh //进入到密码查看目录 cd /var/jenkins_home/secrets/ //显示当前文件夹下文件 ls //显示initialAdminPassword内容 cat initialAdminPassword ``` ![](https://img.tnblog.net/arcimg/aojiancc2/ce93a3ea7f574bde8f2a52320859ed9c.png) 输入密码即可登录进去 >登录进去就可以修改账户了,不然下次登录的默认账户是admin密码就是上面查看的 <br/> ###使用Jenkins创建一个自由风格的项目 tn4#点击New Item创建项目: ![](https://img.tnblog.net/arcimg/aojiancc2/d49cb0098fae409d8c67210d09978501.png) tn4#然后输入名字选择自由风格的项目,其他类型的项目装插件就能找到 ![](https://img.tnblog.net/arcimg/aojiancc2/1ff48f1abe0b4b179dfd43d83ec9e220.png) tn4#在源代码管理中选择git 把你项目的url填写好,凭证的话如果是公共项目可以不填写。如果凭证填写有问题就会导致项目拉取不下来,这个在使用Jenkins发布的时候日志里边可以看到的。这里的git测试项目地址:https://github.com/aojiancc/DockerJenkinsTest 大家也可以直接用来测试。就是一个新建的core3.1 webapi的项目。 ![](https://img.tnblog.net/arcimg/aojiancc2/fc2d89da516c440488fa18b1b121ec39.png) tn4#然后在构建里边选择shell命令构建,把命令写好 其实Jenkins最基础的核心就是:帮你拉取代码帮你执行发布命令而已。所以有时候如果jenkins发布有问题,那些命令你可以自己手动执行下试试,来找问题。当然jenkins还支持不同的分支发布到不同的环境,集群发布等,但基础的核心内容还是拉取项目和执行发布命令。 ![](https://img.tnblog.net/arcimg/aojiancc2/25a52c5365ae406eb145a34c2e713a1d.png) 把使用的命令贴一下: ``` dotnet restore dotnet build dotnet publish #输出一提示的话 echo "Successfully^_^ ......................................................................................" #输出当前地址,可以在日志中看到当前路径,检查一些路径问题 pwd #docker stop helloworldcontainer #docker rm helloworldcontainer #docker rmi hello-world #构建镜像命令 docker build -t hello-world . #运行镜像 docker run --name helloworldcontainer -p 5000:80 -d hello-world ``` 然后点击存储然后构建即可。 **如果没有默认构建一下我们自己手动点击构建** ![](https://img.tnblog.net/arcimg/aojiancc2/f5d846ad3cac456daad75f0f11ad31d2.png) 在项目里边也可以,菜单都一样的 ![](https://img.tnblog.net/arcimg/aojiancc2/424ac6243f7049e28f92826de76cff24.png) tn4#如果一切正常编译成功的效果就是这样 ![](https://img.tnblog.net/arcimg/aojiancc2/d5fe9c57842f426b9df995360dee2375.png) >**我们可以看看日志:** ![](https://img.tnblog.net/arcimg/aojiancc2/77d1783bd35640acb515e85d019d317d.png) **前面都是拉取git项目的日志:** ![](https://img.tnblog.net/arcimg/aojiancc2/8e56415b19c8449a836b254ccc8f31c7.png) **拉取完了后就是执行你编写的命令了:** 还是很长的,带加号的都是我们执行的命令,日志记录还是非常详细的找错也比较方便。 ![](https://img.tnblog.net/arcimg/aojiancc2/873b30e5566347ea84d553b762edec06.png) **这些命令都成功了,最后就是执行docker命令创建你发布的.net core项目的容器了** ![](https://img.tnblog.net/arcimg/aojiancc2/c08ea5cc71504f8faa53e6f383c12886.png) **成功后输入你发布的.net core项目地址即可访问:** 这样就搞定了 ![](https://img.tnblog.net/arcimg/aojiancc2/ecb66050d2fa444b9cff120a6264b566.png) ###常见错误-dockerfile文件路径的问题 我们使用vs新建一个带有docker的项目,doockerfile文件的位置是和这些类文件一起的 ![](https://img.tnblog.net/arcimg/aojiancc2/74e46803ffc846f5919ee02c20e285f8.png) 这外面如果没有dockerfile按照上面的命令执行就会有路径问题: 以前我们讲没有使用jinkins,直接使用docker发布也会存在这种路径问题 ![](https://img.tnblog.net/arcimg/aojiancc2/444d5d39418944c5a7efb6f34f0ab4ac.png) **执行报错,我们看看日志:** ![](https://img.tnblog.net/arcimg/aojiancc2/09b677206864445fab2fe5137f75b81e.png) 其实前面所有的步骤都执行成功了,就是找不到dockerfile的文件。其实我们在给命令的时候给了一个pwd查看当前目录的位置,就是方便看一下会不会存在路径的问题。这里我们可以根据看到当前的路径是:/var/jenkins_home/workspace/DockerJenkinsTest ``` + pwd /var/jenkins_home/workspace/DockerJenkinsTest ``` 这个位置根本就没有dockerfile应该还加入一次DockerJenkinsTest才可以。 所以可以在外面加一个dockerfile上传即可: ![](https://img.tnblog.net/arcimg/aojiancc2/8fb58c6631d64d3e9a8127886c0c0392.png) 上传了github也能看到 ![](https://img.tnblog.net/arcimg/aojiancc2/46f141344c324c9ab276e145cb2c1b67.png) 然后重新执行一次发布,jinkins会自动去拉取更改 ![](https://img.tnblog.net/arcimg/aojiancc2/bcb4cc44d4184b829ba0eb48b8686bca.png) 当然路径问题其实我们也可以通过修改命令或者dockerfile的内容来解决,还是很灵活的 ![](https://img.tnblog.net/arcimg/aojiancc2/50aeaebb56ec49d9a8026c35266e28a9.png)