基于 Docker+Jenkins 实现自动化部署

一、安装Jenkins服务

1、使用docker 安装jenkins

docker run -p 8080:8080 -p 50000:50000 -v jenkins_data:/var/jenkins_home jenkinsci/blueocean

2、访问jenkins地址 8080

注意:第一次启动的时候正在加载jenkins大概会等待3-10分钟。

3、解锁jenkins

4、Jenkins加速插件
将国外的源替换为国内的源
系统管理-》插件管理-》高级-》升级站点-》修改URL

默认为国外站点:

https://updates.jenkins.io/update-center.json

最近调试脚本,本机安装了Jenkins,但是安装插件时一直失败。更改升级站点也不生效,究其原因是因为default.json中插件下载地址还https://updates.jenkins.io,升级站点设置未生效。

需要操作两个步骤

  1. 进入 Manage Jenkins -》 Manage Plugin -> Advanced 最下面有 Update Site 设置为:
    https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

file

  1. 修改服务器配置,进入 jenkins安装目录 , /updates/default.json ,将其中的 updates.jenkins-ci.org/download 替换为 mirrors.tuna.tsinghua.edu.cn/jenkins ,然后把www.google.com 修改为 www.baidu.com
cd /var/jenkins_home/updates
  1. 重启Jenkins服务

再次下载插件就可以了

4、构建的项目在jenkins安装目录下

cd /var/jenkins_home/workspace

二、自动发布项目实现思路

对于静态的编程语言,不需要编译打包,直接拷贝源文件,像html,php,python等。

  • 1、手动搭建Nginx集群
  • 2、开发提交代码至gitlab、手动拉取代码,并推送至web服务器组
  • 3、将手动操作编写至Shell脚本,由Jenkins抽取,并推送至web服务器组。
#!/user/bin/bash
# 1、进入到项目目录,然后进行打包
cd /var/jenkins_home/workspace

# 2、将内容通过scp拷贝至web集群组

三、Jenkins实现版本发布

1、为什么要让项目支持tag版本方式上线?

由于之前上线方式是直接获取最新代码,那么会造成后期回退变得困难。那如果采用tag方式,比如第一次上线 v1.1,第二次上线 v1.2,如果上线v1.2出现问题,那么我们可以快速回退至上一个版本 v1.1。

2、实现tag版本上线方式思路

1、开发如果需要发布新版本,必须将当前的版本打上一个标签。
2、Jenkins需要让其脚本支持传参,比如用户传递v1.1则拉取项目的v1.1标签。

tag 和 release比较

通过tag可以返回到项目的特定状态下,所以可以将tag看作是在大量commit中设定的书签
创建release,则需要通过源码托管商的网页操作界面来进行,一般会要求填写tag名、分支以及相应的发布说明,还可上传编译好的程序、打包好的文件等

标签是git中的概念,而release则是Github、码云等源码托管商所提供的更高层的概念。也就是说git本身是没有release这个概念的,只有tag。

两者之间的关系则是,release基于tag,为tag添加更丰富的信息,一般是编译好的文件。

tag 和分支比较

tag是git版本库的一个标记,指向某个commit的指针。

tag主要用于发布版本的管理,一个版本发布之后,我们可以为git打上 v.1.0.1 v.1.0.2 ...这样的标签

tag感觉跟branch有点相似,但是本质上和分工上是不同的:

tag 对应某次commit, 是一个点,是不可移动的。
branch 对应一系列commit,是很多点连成的一根线,有一个HEAD 指针,是可以依靠 HEAD 指针移动的。
所以,两者的区别决定了使用方式,改动代码用 branch ,不改动只查看用 tag。
tag 和 branch 的相互配合使用,有时候起到非常方便的效果,例如:已经发布了 v1.0 v2.0 v3.0 三个版本,这个时候,我突然想不改现有代码的前提下,在 v2.0 的基础上加个新功能,作为 v4.0 发布。就可以检出 v2.0 的代码作为一个 branch ,然后作为开发分支。

安装git插件:
file

1.创建tag:
创建 tag 是基于本地分支的 commit,而且与分支的推送是两回事,就是说分支已经推送到远程了,但是你的 tag 并没有,如果把 tag 推送到远程分支上,需要另外执行 tag 的推送命令。

git tag <tagName> //创建本地tag

git push origin <tagName> //推送到远程仓库

若存在很多未推送的本地标签,你想一次全部推送的话:

git push origin --tags

以上是基于本地当前分支的最后的一个commit 创建的 tag ,但是如果不想以最后一个,只想以某一个特定的提交为tag ,也是可以的,只要你知道commit 的id。

git log --pretty=oneline //查看当前分支的提交历史 里面包含 commit id

git tag -a <tagName> <commitId>

2.查看标签
查看本地某个 tag 的详细信息:

git show <tagName>

查看本地所有 tag:

git tag 或者 git tag -l

查看远程所有 tag:

git ls-remote --tags origin

3.删除标签
本地 tag 的删除:

git tag -d <tagName>

远程 tag 的删除:

git push origin :<tagName>

小结:
Jenkins构建项目(html,php)步骤:

  • 1、上线问题(使用shell脚本,粗糙)
  • 2、优化脚本,让其支持传参 git tag
  • 3、优化脚本,让其支持回退功能
  • 4、优化脚本,让其无法实现重复构建一个版本

相关文章:
基于Docker+Jenkins实现自动化部署
使用Maven构建Java应用程序
Git中tag标签的使用
B站视频:GitLab + Jenkins + Sonar Qube 持续集成实践

为者常成,行者常至