使用 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 部署项目-实战篇的更多相关文章

  1. Jenkins CI&CD 自动化发布项目实战(下篇)

    Jenkins CI&CD 自动化发布项目实战(下篇) 作者 刘畅 时间 2020-12-04 实验环境 centos7.5 主机名 ip 服务配置 软件 gitlab 172.16.1.71 ...

  2. Jenkins CI&CD 自动化发布项目实战(上篇)

    Jenkins CI&CD 自动化发布项目实战(上篇) 作者 刘畅 时间 2020-11-28 实验环境 centos7.5 主机名 ip 服务配置 软件 gitlab 172.16.1.71 ...

  3. Docker Compose部署项目到容器-基于Tomcat和mysql的项目yml配置文件代码

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  4. Docker Compose部署项目到容器-基于Tomcat和mysql的商城项目(附源码和sql下载)

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  5. 洗礼灵魂,修炼python(82)--全栈项目实战篇(10)—— 信用卡+商城项目(模拟京东淘宝)

    本次项目相当于对python基础做总结,常用语法,数组类型,函数,文本操作等等 本项目在博客园里其他开发者也做过,我是稍作修改来的,大体没变的 项目需求: 信用卡+商城: A.信用卡(类似白条/花呗) ...

  6. C# Xamarin移动开发项目实战篇

    一.课程介绍 在前面阿笨的<C# Xamarin移动开发基础进修篇>课程中,大家已经熟悉和了解了Xamarin移动App开发的基础知识和原理.本次分享课<C# Xamarin移动开发 ...

  7. NetCore项目实战篇06---服务注册与发现之consul

    至此,我们的解决方案中新建了三个项目,网关(Zhengwei.Gateway).认证中心(Zhengwei.Identity)和用户资源API(Zhengwei.Use.Api).当要访问用户API的 ...

  8. NetCore项目实战篇08---Docker挂载mysql并连接.netCoreWeb

    我们的项目之前在直接连接的mysql,今天我们将通过docker挂载mysql 并与我们开发的webapi项目连接. 1. 安装docker 下载地址: https://download.docker ...

  9. Jenkins+Github+Nginx实现前端项目自动部署

    前言 最近在搭建一个自己的网站,网站框架搭好了要把项目放到服务器运行,但是每次更新网站内容就要手动部署一次,实在很麻烦,于是就想搭建一套自动化部署的服务.看了一些案例最后选用现在比较主流的Jenkin ...

  10. k8s+Jenkins+GitLab-自动化部署项目

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 此文阅读目录: 1.闲聊 ...

随机推荐

  1. Hexo博客使用valine评论系统无效果及终极解决方案

    注意事项 有一些博主valine评论系统无效果,有一些原因: 1.很大程度是因为next的版本升级导致某些参数设置不同 2.valine评论是基于LeanCloud,还有一个文章阅读次数功能也是用Le ...

  2. Matlab2014a 找不到 vs2015编译器解决方法

    准备工作 前提: 电脑已经安装 1.Matlab版本2014a 2.VS版本2015 目标: 结合Matlab和VS2015,实现Matlab的GUI文件和.m文件转化为.exe文件,然后可以单独运行 ...

  3. 2023年郑州轻工业大学校赛邀请赛myh

    赛程回顾和赛后总结 赛程回顾 although 昨天刚复盘的,但还是记不住题号.就口胡下是那类型题吧. 刚开始时,我和队长先看的a,让jc去找签到题.我们看了下a,队长说可能dp,但还是感觉没啥思路就 ...

  4. Centos7 安装部署 Kubernetes(k8s) 高可用集群

    目录 一.系统环境 二.前言 三.Kubernetes(k8s)高可用简介 四.配置机器基本环境 五.部署haproxy负载均衡器 六.部署etcd集群 七.部署Kubernetes(k8s) mas ...

  5. 运维自动化工具--Ansible

    运维自动化工具Ansible 1. ansible安装 rocky安装 需要先安装 enel源 # yum install -y epel-release 然后再安装ansible # yum ins ...

  6. 你的Spring应用启动很慢?不妨试试这个工具!

    睡不着闲逛,在GitHub上看到一个挺实用的开源项目:Spring Startup Analyzer. 从项目名称中就大概能猜到,这是一个分析Spring应用启动过程的工具.Spring Startu ...

  7. Unity TextMeshPro 添加中文字体遇见的问题以及解决方案

    前言 按标准官方教程为 Unity TextMeshPro 添加中文字体时出现了各种奇奇怪怪的问题,于是有了这篇随笔. 中文字体解决方案 以下步骤适用于 TextMeshPro 3.0.6. 字符数量 ...

  8. msvc++中的预编译头文件pch.hpp和stdafx.h

    预编译头文件 在 Visual Studio 中创建新项目时,会在项目中添加一个名为 pch.h 的"预编译标头文件". (在 Visual Studio 2017 及更高版本中, ...

  9. Paddle图神经网络训练-PGLBox代码阅读笔记

    图存储部分 paddle/fluid/framework/fleet/heter_ps graph_gpu_wrapper.h GPU图主入口 graph_gpu_ps_table.h GPU图的主要 ...

  10. 解决Nginx SSL 代理 Tomcat 获取 Scheme 总是 Http 问题

    背景 公司之前用的是http,但是出于苹果app审核和服务器安全性问题,要改为https,我们公司用的是沃通的ssl,按照沃通的官方文档提供的步骤完成服务器的配置. 架构上使用了 Nginx +tom ...