使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)
野菊花 人气:0
# 使用Jenkins与Docker持续集成与发布NetCore项目(教程一)
原文地址:[https://www.cnblogs.com/Jackyye/p/12588182.html](https://www.cnblogs.com/Jackyye/p/12588182.html)
## 基本环境
该教程的环境基于
服务器系统:CentOs
软件需部署:Docker,Docker Registry(Docker私有库),JDK,Jenkins(非docker安装),Gogs(Git私有库)
![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200328164307907-656294409.png)
![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200328164403139-1745606365.png)
Jenkins所需插件:
>Gogs plugin
>SSH plugin
## 确定思路
首先我们要明确实现持续集成/持续发布的具体思路。
* 在git仓库收到推送的时候,触发webhook,webhook将请求发送到jenkins服务器。
* 触发jenkins流水线/计划。在jenkins计划中,git pull 最新的代码到特定项目文件夹,用docker build 编译后,上传到docker registry。
* 然后使用ssh命令远程主机,使用docker拉取项目,移除之前的项目,部署最新的项目
![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330082816618-1327254141.png)
## 具体实现
### 一、生成Dockerfile文件
这个思路是通过docker实现的,所以链接整个流程的关键是Dockerfile文件,在使用visual studio新建项目时,勾选为项目配置docker,即可自动生成Dockerfile。具体dockerfile文件的编写可以参考[docker官网](https:/https://img.qb5200.com/download-x/docs.docker.com/get-started/part2/):https:/https://img.qb5200.com/download-x/docs.docker.com/get-started/part2/
*PS:这里需要注意一下,自动生成的dockerfile文件的默认路径可能会有偏差(这里需要保证JenkinsTest.csproj 与 它的WORKDIR 能对应上)*
![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330083703945-456604589.png)
![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330084322352-329327386.png)
### 二、jenkins添加一个测试计划
在jenkins中点击新建任务,给项目命名,这里命名test,后保存即可,先不用进行其他配置操作。(确认已经安装Gogs-Webhook Plugin)
新建完后退出总界面,可以看到我们已经有一个任务计划了。
![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330090351336-23742486.png)
![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330090618151-1949397438.png)
### 三、把带有Dockerfile的项目上传到Gogs服务器上
这个git的操作就不展开描述了,相信大家都懂,不懂的可以学习[廖雪峰老师的git教程](https://www.liaoxuefeng.com/wiki/896043488029600)
```
cd projectdir
git commit -am XXX
git push
```
上传完后进入Gogs的仓库设置,选择管理web钩子,添加web钩子,选择gogs-webhook
**gogs-webhook设置的注意事项:**(图三)
1. 根据[Gogs-Webhook Plugin官网](http://plugins.jenkins.io/gogs-webhook/)里描述,默认的Gogs推送地址形式如下,服务器地址+端口号+/gogs-webhook/?job=+任务名(这里是test)
```
http(s)://<< jenkins-server >>/gogs-webhook/?job=<< jobname >>
```
2. 设置自己的密钥文本,也就是这个推送的密码,如:123456什么的,这个稍后在jenkins要用到
完成以上步奏后,就可以实现任务推送后触发jenkins任务了,接下来就开始配置jenkins
![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330085739307-1799206354.png)
![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330085642241-633051491.png)
![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330090949153-1809510595.png)
### 四、配置jenkins
### 配置SSH远程凭证
因为我们的思路里有要远程其他服务器的步奏,所以我们先要给jenkins添加一个链接凭证
1. 进入jenkins首页,点击凭据,展开后点击系统,在全局凭据右侧有个小倒三角,点击添加凭据,如下图
![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330100206839-932512944.png)
2. 我们远程登录只需要用户名和密码就行,所以类型选择username with password,在用户名和密码里输入你要登录的服务器名和密码,id不用填,描述可以描述你的服务器名
![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330100646664-2067543802.png)
3. 进入到jenkins设置里的系统设置,找到SSH remote hosts选项,点击新增,依次输入你的服务器名,端口号22,选择刚刚新增的凭证
**点击test connect 如出现success 就连接成功,这个很重要!!!**
![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330102633807-873401791.png)
### jenkins任务配置
1.进入项目,点击配置
![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330100921314-2103445108.png)
2.在我们第三步设置的gogs密码,现在该用上了,在gogs webhook的设置中,把Use Gogs secret勾上,然后把密码输进去,为了防止恶意触发项目构建
![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330102123682-1037988748.png)
3.在构建触发器中选择,when a change is pushed to gogs
![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330102306173-1337526552.png)
4.添加一个本地构建命令,实现的流程是:git pull(git拉取) -> docker build(docker根据dockerfile构建) -> docker tag(修改为指定的docker私有库) -> docker push(上传到私有库)
```
//由于我的私有库不是https的,所以在执行docker命令前先信任私有库
vi /etchttps://img.qb5200.com/download-x/dockerhttps://img.qb5200.com/download-x/daemon.json
{
"insecure-registries":["[Registry IP]:5000"]
}
```
```
//进入项目目录
cd ./jenkins
//拉取项目
git pull
//用dockerfile构建项目
docker build --tag jenkinstest:${BUILD_NUMBER} . --network=host //这里是利用了jenkins参数${BUILD_NUMBER}来标识版本,也可以用BUILD_ID
//指定image上传服务器
docker tag jenkinstest:${BUILD_NUMBER} localhost:5000/jenkinstest:${BUILD_NUMBER} //localhost:5000,我把docker registry部署在同一个服务器所以这里是localhost
//推送image到registry
docker push localhost:5000/jenkinstest:${BUILD_NUMBER}
```
![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330110757762-1516750756.png)
5.添加一个远程命令,选择你刚刚添加的ssh链接,实现的流程是:docker pull -> docker rm -> doceker run,请确保你远程的服务器信任了私有库"insecure-registries":["[Registry IP]:5000"] (参考上个步奏)
```
//更新image
docker pull [Registry IP]:5000/jenkinstest:${BUILD_NUMBER}
//通过名字移除容器
docker container rm jk --force
//-p --name 以特定名后台运行容器
docker run --publish 8000:80 --detach --name jk [Registry IP]:5000/jenkinstest:${BUILD_NUMBER}
```
![](https://img2020.cnblogs.com/blog/795169/202003/795169-20200330111729799-829820067.png)
## 至此,只要把你的代码推送到git上,就能自动构建和部署你的项目啦!
加载全部内容