使用 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.闲聊 ...
随机推荐
- pip install lxml 总是失败
- 【技术积累】JavaScript中的基础语法【二】
JavaScript编写方式 JavaScript是一种脚本语言,用于为网页添加交互性和动态功能.它可以直接嵌入到HTML中,并通过浏览器解释执行.下面是一些常见的JavaScript编写方式和相应的 ...
- VueJS使用addEventListener的事件如何触发执行函数的this
1.使用浏览器监听切屏为例 此处为考虑浏览器兼容性推荐使用:document.addEventListener 1.1.正常函数使用如下: let n = 0; let max = 3; // 切屏最 ...
- salesforce零基础学习(一百二十九)Lead Convertion 有趣的经历
本篇参考:https://help.salesforce.com/s/articleView?id=000382564&type=1 Lead Convertion 是salesforce中s ...
- UE构建基础和实践:四、使用脚本打包
序言 使用UE版本为UE5.20 在实际项目中,我们常常使用自动化脚本来进行构建,它可以增加我们的生产效率,并降低人为操作带来的失误风险. BuildGraph BuildGraph UE官方提供的构 ...
- 2021-8-2 Mysql个人练习题
创建学生表 CREATE TABLE student( id int, uname VARCHAR(20), chinese FLOAT, english FLOAT, math FLOAT ); I ...
- Unity UGUI的PhysicsRaycaster (物理射线检测)组件的介绍及使用
Unity UGUI的PhysicsRaycaster (物理射线检测)组件的介绍及使用 1. 什么是PhysicsRaycaster组件? PhysicsRaycaster是Unity UGUI中的 ...
- FreeRTOS 基于 ARMv8-M 对 MPU 的应用
一.前言 ARMv8-M 支持 MPU,FreeRTOS 也添加了对这些 MPU 的应用代码.这里用来记录 FreeRTOS 对 MPU 应用方式的探究结果. 二.ArmV8-M MPU 介绍 ARM ...
- 在webpack中这样分离环境和代码就好啦
前面的文章中,webpack.config.js 中包含本地调试和线上发布的所有配置,编译后的 bundle.js 包含所有的代码. 当项目变大.代码量变多.配置增加的时候,文件的可维护性会越来越差, ...
- TRL 正式推出,来训练你的首个 RLHF 模型吧!
我们正式向大家介绍 TRL--Transformer Reinforcement Learning.这是一个超全面的全栈库,包含了一整套工具用于使用强化学习 (Reinforcement Learni ...