使用 Jenkins + Github + dokcer-compose 部署项目-实战篇
使用 Jenkins + Github + dokcer-compose 部署项目-实战篇
需要声明的一点是,此处实现的项目自动构建原理是 Github+Jenkins 的 webhook,因此得保证 github 能访问 到 jenkins,需要一台具有公网ip的服务器用于部署jenkins,或配合nps/fpr作为内网穿透的代理。
用于测试的项目是周志明老师的“凤凰书城”,详情参考—— https://github.com/fenixsoft/microservice_arch_springcloud 需要把该项目 fork 到自己的仓库。
github 配置
jenkins关联github
在github 个人信息 --> Settings --> Developer Settings --> Personal access tokens --> Tokens(calssic) --> Generate new token 生成token。生成前勾选"repo"和"admin:repo_hook"的权限。保存token备用。

进入 github 刚刚 fork 的"凤凰书城"项目 --> Settings --> Webhooks --> Add Webhook --> 输入刚刚部署 jenkins 的服务器的IP + /github-webhook/
例如: "http://123.123.123.123:8080/github-webhook/" jenkins的github插件会在该接口上监听。一定要留意,不能忽略url后面的斜杠"/",如果没有这个斜杠,jenkins会回302
参考——jenkins - Github Webhook 与 Jenkins 返回 302 Found

Jenkins 配置
系统管理 --> 系统设置 --> GitHub --> 添加Github服务器(URL填"https://api.github.com")
凭证 Credentials 点击添加,类型选择 Secret Text,把github生成的token填入保存。
点击添加按钮后,下拉选择凭证,选择刚才新增的凭证,然后点击连接测试按钮,此处还需要把“管理Hook”勾选上
Jenkinx 新增任务
新增“多分支流水线”任务,该种类型的任务对后续的操作更方便。

选择“GitHub项目”,填写项目地址

配置“构建触发器”,选择"Github hook trigger for GITSCM polling"

配置流水线信息
1、选择流水线类型“Pipeline script from SCM”,
配置SCM信息,即设定github项目路径、设定github的凭证、指定要构建的项目分支
2、指定Jenkins流水线脚本的路径,此处"Jenkinsfile"表示项目根目录下的"Jenkinsfile"文件

修改项目代码并发布
1、把 fork 的项目代码 clone 到本地,使用 Idea 打开,在项目根目录新建名为"Jenkinsfile" 的 jenkins 流水线脚本文件,内容可参考下文——
pipeline {
agent any
environment {
WS = "$WORKSPACE"
}
//定义流水线的加工流程
stages {
stage('1.环境检查'){
steps {
sh 'printenv'
sh 'id'
sh 'docker version'
sh 'java -version'
sh 'git --version'
sh 'mvn -v'
sh 'pwd && ls -alh'
}
}
stage('2.项目编译'){
steps {
sh 'mvn clean package -Dmaven.test.skip=true'
}
}
stage('3.应用部署'){
steps {
sh 'docker-compose -f docker-compose.dev.yml -p fenix up -d'
}
}
}
}
2、编辑好Jenkinsfile文件后,把项目 push 到 github,即可在项目中的Settings --> Webhooks --> Recent Deliveries 看到 github 触发的deleveries

点击对应的delivery即可查看详细的请求信息,如果想做测试,可以点击"Redeliver"按钮

打开Jenkins,即可看到构建历史

访问对应的IP+端口即可看到项目页面

排错
在操作过程中,可能会遇到github webhook请求不成功,构建不触发等问题,需要针对不同情况做不同处理
1、Github webhook 不生效,提示403 No valid crumb was included in the request,因为被 jenkins 跨域拦截了,解决方法——
使用systemctl edit打开jenkins的服务配置,添加启动参数
sudo systemctl edit jenkins
添加如下内容
[Service]
Environment="JAVA_OPTS=-Djava.awt.headless=true -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true"
重启服务
sudo systemctl restart jenkins
详情参考——Ubuntu Jenkins升级2.346.3后远程调用403解决方案(HTTP ERROR 403 No valid crumb was included in the request)
2、github webhook 提示 403 Authentication required
git使用webhook触发Jenkins构建问题Error 403 No valid crumb was included in the reques和Authentication required
在Jenkins全局安全配置 --> 授权策略 --> 登录用户可以做任何事下,勾选"匿名用户具有可读权限"即可解决。注意,该方法只用于临时的测试,有安全风险。
3、github请求jenkins成功,但项目不自动构建。这里有个问题需要注意,对于pipeline类型的job,要在配置job时取消勾选"轻量级检出"("lightweight checkout"),并且要手动构建一次,后续才会触发自动构建。参考——Jenkins not triggering pipeline build on successful github webhook
使用 Jenkins + Github + dokcer-compose 部署项目-实战篇的更多相关文章
- Jenkins CI&CD 自动化发布项目实战(下篇)
Jenkins CI&CD 自动化发布项目实战(下篇) 作者 刘畅 时间 2020-12-04 实验环境 centos7.5 主机名 ip 服务配置 软件 gitlab 172.16.1.71 ...
- Jenkins CI&CD 自动化发布项目实战(上篇)
Jenkins CI&CD 自动化发布项目实战(上篇) 作者 刘畅 时间 2020-11-28 实验环境 centos7.5 主机名 ip 服务配置 软件 gitlab 172.16.1.71 ...
- Docker Compose部署项目到容器-基于Tomcat和mysql的项目yml配置文件代码
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- Docker Compose部署项目到容器-基于Tomcat和mysql的商城项目(附源码和sql下载)
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- 洗礼灵魂,修炼python(82)--全栈项目实战篇(10)—— 信用卡+商城项目(模拟京东淘宝)
本次项目相当于对python基础做总结,常用语法,数组类型,函数,文本操作等等 本项目在博客园里其他开发者也做过,我是稍作修改来的,大体没变的 项目需求: 信用卡+商城: A.信用卡(类似白条/花呗) ...
- C# Xamarin移动开发项目实战篇
一.课程介绍 在前面阿笨的<C# Xamarin移动开发基础进修篇>课程中,大家已经熟悉和了解了Xamarin移动App开发的基础知识和原理.本次分享课<C# Xamarin移动开发 ...
- NetCore项目实战篇06---服务注册与发现之consul
至此,我们的解决方案中新建了三个项目,网关(Zhengwei.Gateway).认证中心(Zhengwei.Identity)和用户资源API(Zhengwei.Use.Api).当要访问用户API的 ...
- NetCore项目实战篇08---Docker挂载mysql并连接.netCoreWeb
我们的项目之前在直接连接的mysql,今天我们将通过docker挂载mysql 并与我们开发的webapi项目连接. 1. 安装docker 下载地址: https://download.docker ...
- Jenkins+Github+Nginx实现前端项目自动部署
前言 最近在搭建一个自己的网站,网站框架搭好了要把项目放到服务器运行,但是每次更新网站内容就要手动部署一次,实在很麻烦,于是就想搭建一套自动化部署的服务.看了一些案例最后选用现在比较主流的Jenkin ...
- k8s+Jenkins+GitLab-自动化部署项目
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 此文阅读目录: 1.闲聊 ...
随机推荐
- JVM中的编译器
JVM中集成了两种编译器,Client Compiler和Server Compiler,它们的作用也不同.Client Compiler注重启动速度和局部的优化,Server Compiler则更加 ...
- 图像处理_ISP_坏点矫正
1 坏点介绍 图像坏点(Bad pixel) : 图像传感器上光线采集点(像素点)所形成的阵列存在工艺上的缺陷,或光信号进行转化为电信号的过程中出现错误,从而会造成图像上像素信息错误,导致图像中的像素 ...
- Kubernetes安全框架
Kubernetes安全框架 K8S安全控制框架主要由下面3个阶段进行控制,每一个阶段都 支持插件方式,通过API Server配置来启用插件. Authentication(鉴权):身份鉴别,只有正 ...
- 2.融合进阶:Stacking与Blending
1 堆叠法Stacking 1.1 堆叠法的基本思想 堆叠法Stacking是近年来模型融合领域最为热门的方法,它不仅是竞赛冠军队最常采用的融合方法之一,也是工业中实际落地人工智能时会考虑的方案之一. ...
- salesforce零基础学习(一百二十九)Lead Convertion 有趣的经历
本篇参考:https://help.salesforce.com/s/articleView?id=000382564&type=1 Lead Convertion 是salesforce中s ...
- 【译】如何在 Visual Studio 中调试异步代码
虽然异步代码可以提高程序的整体吞吐量,但异步代码仍然无法免除错误!当潜在的死锁.模糊的错误消息以及查找导致 Bug 的 Task 时,编写异步代码会使调试更加困难.幸运的是,Visual Studio ...
- 【持续更新】C/C++ 踩坑记录(一)
未定义行为之 NULL dereference 下面这段代码中 is_valid() 解引用了空指针 str,我们的直觉是编译运行后将迎来 SIGSEGV,然而事情并非所期望的那样. /* * ub_ ...
- Django: ERRORS: ?: (staticfiles.E001) The STATICFILES_DIRS setting is not a tuple or list. HINT: Perhaps you forgot a trailing comma?
必须是数组或者列表类型 如下所示: # 错误# STATICFILES_DIRS = { # os.path.join(BASE_DIR, 'static'), # }# 正确 STATICFILES ...
- 四 APPIUM GUI讲解(Windows版)(转)
Windows版本的APPIUM GUI有以下图标或者按钮: ·Android Settings - Android设置按钮,所有和安卓设置的参数都在这个里面 ·General Settings – ...
- 处理css/js兼容性的工具之超重要的browserslist
这篇 webpack处理css资源 文章中使用到的工具 browserslist 对于兼容性处理来说非常重要!这一篇来仔细说说. 查询兼容性 不同浏览器对于 css / js 的属性可能存在兼容性,具 ...