要实现的目标 : 提交代码到github的master分支后, 触发webhook, jenkins从github上从新拉取代码=>编译=>打包成docker镜像=>从新发布html
机器: centos 7.4linux
1. 安装git,jenkins,docker-cegit
git能够直接yum 安装 : github
yum install git -y
也能够安装新版本 参考文章: https://linuxize.com/post/how-to-install-git-on-centos-7/web
jenkins 安装参考文章 http://www.javashuo.com/article/p-vjyyfiqf-z.htmldocker
docker-ce 安装参考官网: https://docs.docker.com/install/linux/docker-ce/centos/shell
2. 新建一个net core demo上传到githubcentos
新建时候点击启用docker支持,会生成一个Dockerfile的docker文件 api
把这个Dockerfile移动到 解决方案(.sln)同目录服务器
这个Dockerfile基本就是把当前目录的文件拷贝到aspnetcore-build镜像中,再里面编译好以后再发布到aspnetcore:3.1镜像中,
最后指定运行你的dotnet core程序
建立完项目后 用desktop 建立一个仓库 传到github
3. 测试下dockerfile是否正常工做
#这个是jenkins默认的存放代码位置 cd /var/lib/jenkins/workspace/; git clone https://github.com/bbenph/WebApplication1.git cd WebApplication1 image_version=`date +%Y%m%d%H%M`; echo $image_version; # 中止以前的docker container docker stop test || true; # 删除这个container docker rm test || true; # build镜像而且打上tag docker build -t test:$image_version .; docker images; # 把刚刚build出来的镜像跑起来 docker run -p 8810:80 --restart=always --name test -d test:$image_version; docker logs test;
能够看到 image container 都有了 程序也跑起来了
4. 配置jenkins拉取github代码
经过上面这个dockfile脚本,咱们已经把dotnet core程序编译好了,而且打包成了docker images,还直接跑起来了.
可是咱们想要的应该是自动化编译部署,并且上面咱们都把jenkins跑起来了,因此….
jenkins job配置
新建Job
打开jenkins首页,左侧选择”新建任务”(newJob) => Freestyle project
添加源码仓库
确认以后进入Job配置页面, 先只配置 源码管理和构建模块
上面的shell脚本说明:
/var/lib/jenkins/workspace/ 是jenkins的默认工做路径 后面的/test 是新建jenkins 任务的名称
|| true 是即便这个container不存在 报错也不影响下面shell脚本执行 由于有时候container不存在/没运行 也是可能的
docker run 命令能够 经过 docker run --help 查看各参数啥意思
点击应用 => 保存
测试下jenkins配置是否正常
如今修改代码,提交github 后 再次jenkins中的马上构建 发现使用新的image从新建立了一个容器
修改的内容也看到了
5. 配置jenkins 代码提交github master分支后 自动化编译部署
参考 https://dzone.com/articles/adding-a-github-webhook-in-your-jenkins-pipeline
什么是webhook?Webhook的概念很简单。Webhook是HTTP回调,HTTP POST在经过HTTP POST经过简单的事件通知发生某些状况时发生。
每当开发人员向master分支提交某些内容时,便会使用Jenkins中的GitHub webhooks触发构建。
让咱们看看如何在GitHub中添加构建Webhook,而后在Jenkins中添加此Webhook。
5.1 github配置
sercret text
注:此处须要一个对项目有写权限的帐户
进入github --> setting --> Personal Access Token --> Generate new token
本身先保存此token
,若是丢失,以后再也没法找到这个token
。
5.2 GitHub webhooks 设置
进入GitHub上指定的项目 --> setting --> WebHooks&Services --> add webhook --> 输入刚刚部署jenkins的服务器的IP
PayloadURL 是咱们的Jenkins运行的URL,添加github-webhook告诉GitHub这是一个Webhook
github的webhook必定要是一个外网可访问的url , github的服务器访问不到你的内网ip地址的
[补充] 填写jenkins公网ip:8080 并无生效, 用ngrok提供的免费域名 代理到 jenkins服务器 就能够 缘由不明
若是是你本机没有外网ip的话 能够用下 https://www.ngrok.cc/ 外网映射到你内网
5.3 jenkins的github配置
安装GitHub Plugin
系统管理-->插件管理-->可选插件
直接安装Github Plugin, jenkins会自动帮你解决其余插件的依赖,直接安装该插件Jenkins会自动帮你安装plain-credentials 、Git 、 credentials 、 github-api
这个在jenkins第一次进入的时候 选择install suggested plugins 会默认安装的
配置GitHub Plugin
系统管理 --> 系统设置 --> GitHub --> Add GitHub Sever
以下图所示
API URL 输入 https://api.github.com
,Credentials点击Add添加,Kind选择Secret Text,具体以下图所示。
设置完成后,点击TestConnection
,提示Credentials verified for user UUserName, rate limit: xxx
,则代表有效。
修改步骤4中建立的任务
每次push代码后能够看到有触发webhook去调用接口