![5a932bb70292ed54a3fd447d91d0d764.png](https://i-blog.csdnimg.cn/blog_migrate/89e5eff47ac9bce8294e419bf5bc8d99.jpeg)
目标
当代码提交到GitHub后,自动生成构建项目并部署到服务器。接下来介绍一下如何在容器中运行Jenkins,并自动化构建GitHub上的项目,使用自动化构建来解放你的双手。
前置条件
一台已经安装了Docker的Ubuntu服务器,有公网IP并可通过IP或者域名访问。因为GitHub无法访问本地服务器,所以不能触发构建,只能手动触发构建。
这里我们选择使用基于.Net Core开发的纸壳CMS作为演示例子,一步一步搭建自动构建。
当然,一样可以不使用Docker在Windows、Linux上安装Jenkins来达到同样的目的。
Dockerfile
首先创建一个Dockerfile
文件,文件名就是Dockerfile,然后输入以下内容:
FROM jenkins/jenkins:lts
USER root
WORKDIR /dotnet
RUN wget -O dotnet.tar.gz https://download.visualstudio.microsoft.com/download/pr/72ce4d40-9063-4a2e-a962-0bf2574f75d1/5463bb92cff4f9c76935838d1efbc757/dotnet-sdk-3.0.100-preview6-012264-linux-x64.tar.gz
RUN tar zxf dotnet.tar.gz -C ./
RUN rm -rf dotnet.tar.gz
ENV PATH="${PATH}:/dotnet:/var/jenkins_home/.dotnet/tools"
ENV DOTNET_ROOT="/dotnet"
RUN apt update -y
RUN apt install icu-devtools vim zip unzip -y
RUN usermod -a -G root jenkins
USER jenkins
简单说明一下这个Dockerfile里面都做了什么事情:
- 这个Docker镜像基于jenkins
- 设置当前用户为root,因为后面安装需要使用root
- 设置当前工作目录为dotnet
- 下载dotnet SDK包,保存为dotnet.tar.gz。这里要注意下载正确版本的SDK,可前往微软官方网站获取下载链接:https://dotnet.microsoft.com/download
- 解压dotnet SDK到当前目录,即
/dotnet
目录 - 删除dotnet SDK包
- 把dotnet目录和dotnet tools目录添加到环境变量PATH,这样就可以使用
dotnet
命令了 - 设置DOTNET_ROOT变量
- 更新源
- 安装一些必需的,常用的工具包,其中
icu-devtools
是运行dotnet需要的 - 修改jenkins用户到root附加组
- 设置当前用户为jenkins
到这里,Dockerfile就定义完成了。当你的项目升级到更新版本的.Net Core时,只需要进入容器下载对应的.Net Core SDK就可以了。
生成Docker镜像
接下来使用以下命令来生成Docker镜像,镜像名为jenkins,Tag是dotnet:
docker build -t jenkins:dotnet .
生成这个镜像要花数分钟的时间,请耐心等待:
![7b61da14b33dcc9ba483bac93107e3fd.png](https://i-blog.csdnimg.cn/blog_migrate/a30b388157bd8df82b05bea9f690beff.jpeg)
生成完成以后,可以使用docker images命令查看所有镜像
![37d71990a29ebd96d5c2c814f764432f.png](https://i-blog.csdnimg.cn/blog_migrate/53323a8354544c5e6197e1c86e3d4c1d.png)
运行Jenkins实例
使用docker run
命令来运行一个jenkins实例,注意映射端口,右边的8080,50000是Jenkin的默认端口,左边的是Docker宿主机的端口,可以按情况修改:
docker run -p 8080:8080 -p 50000:50000 --name jenkins jenkins:dotnet
运行命令以后会jenkins会自动初始化,当控制台上出现Jenkins is fully up and running的时候就初始化完成了,同时可以看到上面有一个admin的初始化密码,把它复制下来,在第一次使用Jenkins的时候要使用到这个密码。
![172eabea5b000d1a4e48e60fe3c71ba2.png](https://i-blog.csdnimg.cn/blog_migrate/29fa7eb9460cb91dae417351a197f562.jpeg)
打开浏览器,在地址栏中输入服务器的IP地址和端口号访问jenkins:
![efd584e1223f7f607ba59d943cfd4af5.png](https://i-blog.csdnimg.cn/blog_migrate/655ede28a50e1d61e343c0163ff351fa.jpeg)
然后将刚才复制下来的密码,粘贴到密码输入框中,然后点击继续:
![08746050b2f59773ff842d880f69918a.png](https://i-blog.csdnimg.cn/blog_migrate/f867e8fd887f9808ca5c4905598beced.jpeg)
然后点击选择安装插件,因为除了默认推荐的插件,我们还需要安装一些其它插件:
![003c928292323c8148e3c10f000c889a.png](https://i-blog.csdnimg.cn/blog_migrate/3596d137b8d5b2630b9d95b439a1960a.jpeg)
除了推荐的插件外,我们还需要安装GitHub的插件,Publish Over SSH插件,这个插件可以将你发布好的程序通过SSH复制到你的服务器上
![5066a840d74778697ce8bc96866dc15c.png](https://i-blog.csdnimg.cn/blog_migrate/0a652dca05481533b8699293acc36a83.jpeg)
![a2f2a6c7276d1478cf8e4f4c6db8a626.png](https://i-blog.csdnimg.cn/blog_migrate/223ad2f7baa6daeed3b86092929a72c3.jpeg)
然后点击安装,等待安装完成:
![8d26df74d77c68697274d01b800bd6bc.png](https://i-blog.csdnimg.cn/blog_migrate/d52a26de9c535fba58c123cc57160021.jpeg)
插件安装完成以后,输入初始化用户名和密码等信息后,就可以开始使用Jenkins了:
![fad9264fb4f5e7818f9771e2c60b3caa.png](https://i-blog.csdnimg.cn/blog_migrate/5f14b26528b3ca405c005e2ba6d6bde5.jpeg)
接下来的使用默认信息一直点下一步就可以了。
添加项目
点击添加新作业,创建一个项目:
![3a438788ff709096192a0a6be560ac3a.png](https://i-blog.csdnimg.cn/blog_migrate/d82a1be06e63ec909cd392184a1de5a4.jpeg)
输入名称,选择Freestyle project,然后点击ok创建:
![055a1944574728df4f9b3ae03600149c.png](https://i-blog.csdnimg.cn/blog_migrate/ddfaade6cbddffe9d4c877abb93bc49d.jpeg)
勾选GitHub project,然后输入项目地址:
![bf3e1d874453dd2a54b6dca304f23820.png](https://i-blog.csdnimg.cn/blog_migrate/17fc9d8ec514a1f14596b24f73ff0df0.jpeg)
在源码管理里面选择git,然后输入git地址:
![a5431592191e5bc29a2c46144edc0314.png](https://i-blog.csdnimg.cn/blog_migrate/e2f63a9cf9a0a9d0b0bce2e7f85773c1.jpeg)
有了源代码之后,就可以添加生成操作了。在生成这里添加一个执行shell的步骤,我们将在这里使用dotnet的publish命令来发布项目
![5f14ac8c422fb724bc0f1d43031d8ac8.png](https://i-blog.csdnimg.cn/blog_migrate/9df8bb79c0ef538ad57234549c3f1723.jpeg)
然后就可以在这里输入dotnet publish命令了:
![ac0a75dc65871a479bbed227ec46865a.png](https://i-blog.csdnimg.cn/blog_migrate/6faa372a208b6e590ce615585c191fb2.jpeg)
因为我们这里演示使用的是纸壳CMS,有点不一样,需要使用官方的发布工具,所以要输入以下命令:
![7e9b80a01153c04d2ada4d0a878a04d4.png](https://i-blog.csdnimg.cn/blog_migrate/24087ab344a86d3a964e067666dc7125.jpeg)
由于ZKEACMS.Publisher没有在容器中安装,所以发布会报错,这里我们还需要进入窗口安装一下发布工具,首先进入容器:
docker exec -it jenkins bash
然后使用以下命令来安装发布工具:
dotnet tool install -g ZKEACMS.Publisher
点击保存。到这里,添加项目,并且发布项目就完成了,点击立即生成来尝试生成一下:
![d71363b48e103135e49c2294e96daa19.png](https://i-blog.csdnimg.cn/blog_migrate/7a96dd9ea729b2e17f36eedcaa82fe8d.jpeg)
Build History里面可以看到所有的构建历史记录,点击进度条,可以查看当前生成任务的控制台输出:
![a87f57f6b5bd5df8df07f826496865f9.png](https://i-blog.csdnimg.cn/blog_migrate/4d7a951f2ce30ce1b245965fe6499dbd.jpeg)
到这里,生成、发布已经可以了,但是提交代码后不会自动触发,我们需要在GitHub上添加一个Webhook,来自动触发生成、发布。
添加GitHub Webhook
首先,开启项目的GitHub触发事件,点击配置项目:
![7adae08cd3cb21e18300e2bd84c200dd.png](https://i-blog.csdnimg.cn/blog_migrate/8eac4ee51f97da96fe0345dd36c3affe.jpeg)
然后勾选生成事件中的GitHub hook trigger
![e3b96a09b121e4d7a8d447bb09de1d0e.png](https://i-blog.csdnimg.cn/blog_migrate/9d6860124bf9246010fe598e774f904f.jpeg)
接下来要在GitHub上设置项目的Webhook,点击项目设置下的Webhooks来添加
![29af62b2b19a55ad3e053db2b478a87b.png](https://i-blog.csdnimg.cn/blog_migrate/88c5d0252a344ec50cd229a4231f12f9.jpeg)
注意jenkins的github插件设定的默认的GitHub的Webhook地址是{IP}:端口/github-webhook/
,所以在Payload URL输入以下URL即可,如果有域名可以使用域名:
![a64bcc641a386042c732ee1cd5863a99.png](https://i-blog.csdnimg.cn/blog_migrate/51e88d28cfbdade3ec9d830bf3634abb.jpeg)
在添加完后,GitHub会先尝试一送一个请求,这时候就可以到Jenkins看一下是否会生成了。如果没有生成,可以通过查看log来了解原因:
![2203b6e8603d06d69388543e1b07a712.png](https://i-blog.csdnimg.cn/blog_migrate/80e3e2db42e55cdb887f83b81c009775.jpeg)
部署到服务器
现在自动触发构建已经设置好了,就剩下最后一步,将发布好的程序推送到服务器。
首先,要在Jenkins里面配置服务器的相关信息,点击Manage Jenkins:
![ffcb910fce1a85de7c3a417c08d51f19.png](https://i-blog.csdnimg.cn/blog_migrate/3d5794c32ffd0844d5ad290db6304520.jpeg)
选择Configure System:
![e65fc75c12692c16f00ece11c2d937ad.png](https://i-blog.csdnimg.cn/blog_migrate/41027db2e9ccafc2e14c04d0e705471f.jpeg)
然后输入服务器的相关信息,Jenkins将会使用这些信息来远程连接你的服务器:
![b32b6860c89353106e3638689e900a2a.png](https://i-blog.csdnimg.cn/blog_migrate/4409da1b65fd27d63424e3b1bee2f164.jpeg)
注意:devops
目录须要在目录服务器上存在。
添加完服务器后,再次编辑项目,添加一个生成步骤,该步骤就是发送文件:
![f767e4e75a9501c4ca84b2ac7dac4348.png](https://i-blog.csdnimg.cn/blog_migrate/f0568ea471b33dc27d04b1d5444ec7ee.jpeg)
输入要复制的文件目录,和在复制完成之后要执行的命令,文件复制完成以后,我们重新启动一下程序的服务:
![d76eee04fd3b800f10d191988f921992.png](https://i-blog.csdnimg.cn/blog_migrate/01698adf73ec086b5814c6ffb0cc1d67.jpeg)
- Source files:要复制的文件
- Remove prefix:如果不输入,目标服务器的
devops
目录(在配置SSH服务器的时候指定的目录)下会创建和Sourece files一样的目录结构 - Remote directory:目标服务器下
devops
目录下的子目录 - Exec command:在文件复制完成后将会在远程服务器上执行该命令
到这里整个自动构建环境就搭配完成了。
原文地址
用Docker运行Jenkins自动化构建ASP.NET Core项目www.zkea.net![e6c421403acc9d5407fcb51bd3a90b8d.png](https://i-blog.csdnimg.cn/blog_migrate/02429a35905516f2762b5b07911d3a02.png)