基于 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,升级站点设置未生效。
需要操作两个步骤
- 进入 Manage Jenkins -》 Manage Plugin -> Advanced 最下面有 Update Site 设置为:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
- 修改服务器配置,进入 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
- 重启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插件:
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 持续集成实践
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)