深入解析:Jenkins CI自动化Docker项目发布全攻略

更新:11-03 名人轶事 我要投稿 纠错 投诉

老铁们,大家好,相信还有很多朋友对于深入解析: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项目发布全攻略和的答案你都知道了吗?欢迎再次光临本站哦!

用户评论

暮染轻纱

终于有教程可以帮我直接上手!这可是我一直想做的事情啊。

    有18位网友表示赞同!

日久见人心

之前手动部署Docker真头疼,CI自动化真是福音呀!

    有19位网友表示赞同!

敬情

想学Jenkins一直没时间,现在有了这个教程应该能一步步学会吧?

    有14位网友表示赞同!

话少情在

学习新技术总是要从实践开始,这篇教程感觉挺实用的。

    有15位网友表示赞同!

金橙橙。-

我一直在用Docker部署项目,但不知道如何用Jenkins自动发布,这次正好可以学习一下!

    有19位网友表示赞同!

命硬

分享这种干货太棒了!终于不用再手动打包和部署了~

    有7位网友表示赞同!

话扎心

希望能详细讲解Jenkins的配置步骤,这样新手也能理解。

    有17位网友表示赞同!

顶个蘑菇闯天下i

我关注自动化构建很久了,这篇教程刚好能满足我的需求!

    有15位网友表示赞同!

◆乱世梦红颜

Docker项目发布效率太低了,期待这个教程能帮助提高效率。

    有5位网友表示赞同!

小清晰的声音

是不是可以用Jenkins连同其他工具一起联动?

    有7位网友表示赞同!

折木

希望教程能提供一些常用的案例和最佳实践。

    有9位网友表示赞同!

毒舌妖后

学习使用Jenkins CI可以提升工作效率,真是太划算了!

    有18位网友表示赞同!

逾期不候

有没有推荐的学习资源?比如说视频教程或者文档?

    有12位网友表示赞同!

绝版女子

我之前看过Jenkins的基础教程,但不知道如何应用到Docker项目中,这篇教程很适合我的需求。

    有20位网友表示赞同!

命运不堪浮华

如果能讲一些实际案例,更容易理解其中的原理和步骤吧!

    有15位网友表示赞同!

爱到伤肺i

这个教程能帮到很多开发人员,真是太棒了!

    有19位网友表示赞同!

权诈

我也想学习如何用Jenkins CI自动发布项目啊,期待这篇教程能教会我。

    有12位网友表示赞同!

我的黑色迷你裙

使用Jenkins CI可以节省很多时间,现在正是学习的时候!

    有7位网友表示赞同!

屌国女农

希望能详细介绍Jenkins和Docker之间的集成过程,这样更方便上手。

    有16位网友表示赞同!

【深入解析:Jenkins CI自动化Docker项目发布全攻略】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:探寻2017:那年那月的精彩瞬间 下一篇:探索酸枣:传统美味与营养价值的完美结合