老铁们,大家好,相信还有很多朋友对于深入解析:Jenkins CI自动化Docker项目发布全攻略和的相关问题不太懂,没关系,今天就由我来为大家分享分享深入解析:Jenkins CI自动化Docker项目发布全攻略以及的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
我们安装了官网教程来安装Jenkins。安装教程比较简略.
啊?你不是答应和我牵手的吗?这是你姐姐的。
好吧好吧,我们来做一个分步教程。
首先安装JDK8
添加安装源后直接apt-get install即可。以下是ubuntu的安装命令。其他系统就自己玩玩吧。
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get 更新
sudo apt-get install oracle-java8-installer
下载jenkins.war + 启动Jenkins
下载链接:http://mirrors.jenkins.io/war-stable/
在这里找到最新的下载,我目前最新的应该是2.107.2
下载jenkins.war后,在当前目录下创建jenkins-home文件夹,并将JENKINS_HOME环境变量设置为jenkins-home(也可以不设置,默认为~/.jenkins)
wget http://mirrors.jenkins.io/war-stable/2.107.2/jenkins.war;
mkdir ~/jenkins-home;
导出JENKINS_HOME=~/jenkins-home;
多路复用器;
java -jar jenkins.war 一般建议开一个后台进程来运行jenkins,防止终端退出后jenkins死掉。
所以上面我先打开tmux 然后运行java -jar jenkins.war。
如下图:
[图片上传失败.(image-9ce10f-1525785155608)]
然后注意initialAdminPassword的输出
需要Jenkins 初始设置。已创建管理员用户并生成密码。
请使用以下密码继续安装:
XXXXXXXXXXXXXXX
这个也可以在: /root/jenkins-home/secrets/initialAdminPassword 找到,此时访问当前主机的8080端口,可以看到jenkins正在启动。过一会儿就可以看到jenkins登录页面了。
此时复制上面的XXXXXXXXXXXXXX,输入后点击继续配置Jenkins账户密码信息等。
[图片上传失败.(image-9dbfac-1525785155608)]
然后安装默认插件。
[图片上传失败.(image-624bc8-1525785155608)]
可能需要等待几分钟,具体取决于您的计算机性能和网络速度。
安装完成后,会提示您配置登录账号和密码。出现安装提示,配置完成。
最终jenkins页面的入口是这样的。
[图片上传失败.(image-c3d2ea-1525785155608)]
到目前为止我们已经运行了Jenkins并且有了一些常用的插件。
我们先完成dotnet core docker编译和发布相关的事情,然后回来继续jenkins的任务。
dotnet core docker 打包
在项目目录下新建一个Dockerfile文件,内容如下:
来自microsoft/aspnetcore-build:2.0 AS build-env
工作目录/应用程序
# 复制csproj 并恢复为不同的层
复制*.csproj ./
运行dotnet 恢复
# 复制其他所有内容并构建
复制。/
运行dotnetpublish-cRelease-oout
# 构建运行时镜像
来自微软/aspnetcore:2.0
工作目录/应用程序
复制--from=build-env /app/out 。
ENTRYPOINT ["dotnet", "your dotnet core program.dll"] 这个Dockerfile 基本上将当前目录中的文件复制到aspnetcore-build 映像中,然后进行编译,然后将其发布到aspnetcore:2.0 映像中。
最后指定运行你的dotnet core程序
来源:https://github.com/DaoCloud/dotnet-docker-samples
docker build + run 脚本(非必须,可以使用jenkins中脚本编译替代)
以HouseCrawler.Web为例,
#!/bin/sh
image_version=`日期+%Y%m%d%H%M`;
回显$image_version;
cd ~/code/58HouseSearch/HouseCrawler.Core/HouseCrawler.Web;
git pull --rebase origin master;
docker stop house-web;
docker rm house-web;
docker build -t house-web:$image_version .
码头工人图像;
docker run -p 8080:80 -v ~/docker-data/house-web/appsettings.json:/app/appsettings.json -v ~/docker-data/house-web/NLogFile/:/app/NLogFile --restart=always --name house-web -d house-web:$image_version;
docker 日志house-web;通过上面的build+run脚本,我们已经编译好了dotnet core程序,打包成docker镜像,直接运行即可。
但我们想要的是自动化编译和部署,而且上面我们已经运行了Jenkins,所以……
jenkins job配置
新建Job
打开jenkins主页,选择左侧‘新建工作’(newJob),如下图:
[图片上传失败.(image-657a7e-1525785155608)]
为新作业命名并选择“构建自由风格软件项目”,如图:
[图片上传失败.(image-cd50c4-1525785155608)]
添加源码仓库
确认后进入Job配置页面,在源代码管理中选择git,如图:
[图片上传失败.(image-b569f0-1525785155608)]
如果git仓库需要权限,则需要配置权限。我一般都是直接将Jenkins主机的公钥直接添加到git仓库中,所以这里直接配置为"From the Jenkins master ~/.ssh",也可以使用账号密码。参观等
[图片上传失败.(image-aabb3b-1525785155608)]
"分支说明符("任意"为空) "默认主分支,根据自己的需要填写不同的分支。
构建触发器和构建环境现在被跳过,我们不会关心它们,我们稍后会做。
构建
点击‘添加构建步骤’,选择‘执行shell’,然后就可以看到下图:
[图片上传失败.(image-62740c-1525785155608)]
还记得上一步中我们的脚本吗?修改源码路径并放入。
# 切换到源码目录,对应jenkins-home的workspace
cd ~jenkins-home/workspace/项目名称/Dockerfile所在目录;
image_version=`日期+%Y%m%d%H%M`;
回显$image_version;
# 停止之前的docker容器
docker stop house-web;
# 删除这个容器
docker rm house-web;
# 构建图像并标记它
docker build -t house-web:$image_version .
码头工人图像;
# 运行新建的镜像
docker run -p 8080:80 -v ~/docker-data/house-web/appsettings.json:/app/appsettings.json -v ~/docker-data/house-web/NLogFile/:/app/NLogFile --restart=always --name house-web -d house-web:$image_version;
docker 日志house-web;如果jenkins主机和程序运行主机不在同一台机器上,建议直接将上述脚本放在运行主机上,并命名为start_XXX.sh。
上面的命令直接生效
ssh username@发布主机的IP "~/start_XXX.sh"ps: 记得在jenkins主机上配置ssh免登录
构建触发器
构建触发器是当我们选择触发构建任务时。有多种选择可供选择。
使用Build定期、定期或每N长时间拉取代码进行构建。
Poll SCM:定期检查源代码变更(根据SCM软件的版本号),如有变更则执行构建
用于GITScm 轮询的GitHub hook 触发器或其他Git 平台提供的webhook
安装Generic Webhook Trigger插件后,可以使用其他平台的webhook触发构建任务。
我这里选择第四个选项并安装Generic Webhook Trigger插件。我稍后会告诉你我为什么这样做。
Generic Webhook Trigger插件可以通过在“系统管理-管理插件-可选插件”中直接搜索“Generic Webhook Trigger”来安装。
从上一个构建步骤中的脚本我们知道,实际上我们现在要么是在jenkins主机上进行docker构建,要么是在发布目标主机上进行构建。
构建过程很慢,并且镜像将在本地机器或目标主机上生成,并且docker镜像不受管理。
有什么好的办法吗?是的,有。直接使用阿里云的“容器镜像服务”来构建镜像。
使用阿里云-容器镜像服务
首先登录阿里云,然后进入容器镜像服务。地址为https://cr.console.aliyun.com/
第一次进入时,你可能需要创建一个命名空间。一般来说,只需使用公司名称或您的名字即可。
然后选择“创建镜像存储库”。
[图片上传失败.(image-f96f0-1525785155608)]
选择地域-选择命名空间-填写仓库名称(即镜像名称)-填写摘要-设置代码源(支持GitHub/阿里云代码/Bitbucket/私有Gitlab/本地Git等,只需给予授权即可完成)
[图片上传失败.(image-6dc1ed-1525785155608)]
在构建设置中,选择‘代码更改时自动构建镜像’,然后选择构建分支作为你想要的分支,填写源代码中Dockerfile的路径,然后保存
[图片上传失败.(image-a87b8-1525785155608)]
然后我们进入管理平台看一下。
[图片上传失败.(image-62cc5f-1525785155608)]
单击“立即构建”并检查日志。
[图片上传失败.(image-b6d5db-1525785155608)]
[图片上传失败.(image-1ab1db-1525785155608)]
此时我们使用docker pullregistry-internal.cn-hangzhou.aliyuncs.com/你的命名空间/你的镜像名来拉取阿里云构建成功的镜像。
镜像构建问题解决了,那么我们如何自动将镜像发布到我们运行的主机上呢?
这时候webhook又出来了。
jenkins webhook触发配置
我们看一下阿里云镜像构建服务,其中之一就是webhook。官方介绍在这里:阿里云-webhook管理
[图片上传失败.(image-d6f0cc-1525785155609)]
这里我们需要填写我们的webhook地址。还记得我之前无缘无故选择的第四个选项,然后要求大家安装Generic Webhook Trigger插件吗?
我们使用该产品为我们提供webhook API。
整理流程:
Git仓库代码变更-阿里云容器构建服务启动-构建镜像后触发Webhook -Jenkins收到阿里云webhook后触发作业执行部署脚本-使用阿里云镜像运行部署脚本-完成。
让我们继续配置通用Webhook 触发器。
Generic Webhook Trigger 支持的命名触发器URL 格式如下:
http://jenkins登录用户名:token授权码@jenkins IP:8080/generic-webhook-trigger/invoke?token=触发器名称jenkins登录名和token可以在‘Account-Settings-API Token-Show API Token.’中看到,找到它出来的时候填一下就可以了。
最后一个token参数实际上是“构建触发器”中“触发远程构建”的参数。建议使用作业名称。这里的配置大概是这样的:
[图片上传失败.(image-cce6bb-1525785155609)]
最后,我们还需要在Jenkins的全局安全设置中取消选中“防止跨站请求伪造漏洞”选项,这样阿里云webhook才能存活。
在浏览器中手动访问http://jenkins 登录用户名:token 授权码@jenkins IP:8080/generic-webhook-trigger/invoke?token=trigger name
如果对应的jenkins job能够正常开始执行,则说明整个流程是ok的。
最后我们回到上面的‘阿里云-容器镜像服务-对应镜像仓库-webhook-添加记录’
[图片上传失败.(image-80910c-1525785155609)]
PS: webhook名称不能包含特殊字符或“-”等,否则会保存失败,并且不会提示您名称非法。下午我就被这个愚弄了半个小时。
至此,我们就基本完成了。
最后我们修改了Jenkins脚本,这样我们就可以直接运行阿里云镜像服务构建的镜像,而不用在本地构建docker。
# 停止之前的docker容器
docker stop house-web;
# 删除这个容器
docker rm house-web;
docker pull你的阿里云镜像地址;
# 运行新建的镜像
docker run --restart=always --name 你的容器名称你的阿里云镜像地址;
总结一下我们做了什么
构建詹金斯
编写Dockerfile文件,直接编译发布+打包成docker镜像+部署脚本
使用阿里云容器构建服务构建docker镜像,构建成功后使用webhook通知Jenkins。
配置jenkins webhook触发器来触发部署脚本
其实其他项目/语言的操作基本相同,唯一的区别在于Dockerfile的写法
完毕.
文章分享结束,深入解析:Jenkins CI自动化Docker项目发布全攻略和的答案你都知道了吗?欢迎再次光临本站哦!
【深入解析:Jenkins CI自动化Docker项目发布全攻略】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
终于有教程可以帮我直接上手!这可是我一直想做的事情啊。
有18位网友表示赞同!
之前手动部署Docker真头疼,CI自动化真是福音呀!
有19位网友表示赞同!
想学Jenkins一直没时间,现在有了这个教程应该能一步步学会吧?
有14位网友表示赞同!
学习新技术总是要从实践开始,这篇教程感觉挺实用的。
有15位网友表示赞同!
我一直在用Docker部署项目,但不知道如何用Jenkins自动发布,这次正好可以学习一下!
有19位网友表示赞同!
分享这种干货太棒了!终于不用再手动打包和部署了~
有7位网友表示赞同!
希望能详细讲解Jenkins的配置步骤,这样新手也能理解。
有17位网友表示赞同!
我关注自动化构建很久了,这篇教程刚好能满足我的需求!
有15位网友表示赞同!
Docker项目发布效率太低了,期待这个教程能帮助提高效率。
有5位网友表示赞同!
是不是可以用Jenkins连同其他工具一起联动?
有7位网友表示赞同!
希望教程能提供一些常用的案例和最佳实践。
有9位网友表示赞同!
学习使用Jenkins CI可以提升工作效率,真是太划算了!
有18位网友表示赞同!
有没有推荐的学习资源?比如说视频教程或者文档?
有12位网友表示赞同!
我之前看过Jenkins的基础教程,但不知道如何应用到Docker项目中,这篇教程很适合我的需求。
有20位网友表示赞同!
如果能讲一些实际案例,更容易理解其中的原理和步骤吧!
有15位网友表示赞同!
这个教程能帮到很多开发人员,真是太棒了!
有19位网友表示赞同!
我也想学习如何用Jenkins CI自动发布项目啊,期待这篇教程能教会我。
有12位网友表示赞同!
使用Jenkins CI可以节省很多时间,现在正是学习的时候!
有7位网友表示赞同!
希望能详细介绍Jenkins和Docker之间的集成过程,这样更方便上手。
有16位网友表示赞同!