天天看点

使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)

使用Jenkins与Docker持续集成与发布NetCore项目(教程一)

原文地址:https://www.cnblogs.com/Jackyye/p/12588182.html

基本环境

该教程的环境基于

服务器系统:CentOs

软件需部署:Docker,Docker Registry(Docker私有库),JDK,Jenkins(非docker安装),Gogs(Git私有库)

使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)
使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)

Jenkins所需插件:

Gogs plugin

SSH plugin

确定思路

首先我们要明确实现持续集成/持续发布的具体思路。

  • 在git仓库收到推送的时候,触发webhook,webhook将请求发送到jenkins服务器。
  • 触发jenkins流水线/计划。在jenkins计划中,git pull 最新的代码到特定项目文件夹,用docker build 编译后,上传到docker registry。
  • 然后使用ssh命令远程主机,使用docker拉取项目,移除之前的项目,部署最新的项目
    使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)

具体实现

一、生成Dockerfile文件

这个思路是通过docker实现的,所以链接整个流程的关键是Dockerfile文件,在使用visual studio新建项目时,勾选为项目配置docker,即可自动生成Dockerfile。具体dockerfile文件的编写可以参考docker官网:https://docs.docker.com/get-started/part2/

PS:这里需要注意一下,自动生成的dockerfile文件的默认路径可能会有偏差(这里需要保证JenkinsTest.csproj 与 它的WORKDIR 能对应上)

使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)
使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)

二、jenkins添加一个测试计划

在jenkins中点击新建任务,给项目命名,这里命名test,后保存即可,先不用进行其他配置操作。(确认已经安装Gogs-Webhook Plugin)

新建完后退出总界面,可以看到我们已经有一个任务计划了。

使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)
使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)

三、把带有Dockerfile的项目上传到Gogs服务器上

这个git的操作就不展开描述了,相信大家都懂,不懂的可以学习廖雪峰老师的git教程

cd projectdir
git commit -am XXX
git push
           

上传完后进入Gogs的仓库设置,选择管理web钩子,添加web钩子,选择gogs-webhook

gogs-webhook设置的注意事项:(图三)

  1. 根据Gogs-Webhook Plugin官网里描述,默认的Gogs推送地址形式如下,服务器地址+端口号+/gogs-webhook/?job=+任务名(这里是test)
http(s)://<< jenkins-server >>/gogs-webhook/?job=<< jobname >>
           
  1. 设置自己的密钥文本,也就是这个推送的密码,如:123456什么的,这个稍后在jenkins要用到

完成以上步奏后,就可以实现任务推送后触发jenkins任务了,接下来就开始配置jenkins

使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)
使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)
使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)

四、配置jenkins

配置SSH远程凭证

因为我们的思路里有要远程其他服务器的步奏,所以我们先要给jenkins添加一个链接凭证

  1. 进入jenkins首页,点击凭据,展开后点击系统,在全局凭据右侧有个小倒三角,点击添加凭据,如下图
使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)

2. 我们远程登录只需要用户名和密码就行,所以类型选择username with password,在用户名和密码里输入你要登录的服务器名和密码,id不用填,描述可以描述你的服务器名

使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)
  1. 进入到jenkins设置里的系统设置,找到SSH remote hosts选项,点击新增,依次输入你的服务器名,端口号22,选择刚刚新增的凭证

    点击test connect 如出现success 就连接成功,这个很重要!!!

    使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)

jenkins任务配置

1.进入项目,点击配置

使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)

2.在我们第三步设置的gogs密码,现在该用上了,在gogs webhook的设置中,把Use Gogs secret勾上,然后把密码输进去,为了防止恶意触发项目构建

使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)

3.在构建触发器中选择,when a change is pushed to gogs

使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)

4.添加一个本地构建命令,实现的流程是:git pull(git拉取) -> docker build(docker根据dockerfile构建) -> docker tag(修改为指定的docker私有库) -> docker push(上传到私有库)

//由于我的私有库不是https的,所以在执行docker命令前先信任私有库
vi /etc/docker/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}
           
使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)

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} 
           
使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)

至此,只要把你的代码推送到git上,就能自动构建和部署你的项目啦!