持续集成|持续部署
代码部署上线流程
以java代码,tomcat上服务为例:
- Jenkins从gitlab拉取代码
- 编译源代码
- 放置配置文件
- 打包
- scp到目标服务器
- 将目标服务器从前端调度器中移除(要逐批更新)
- 解压程序包放到webroot中
- 重启tomcat服务
- 对升级了的部分节点进行测试
- 将升级后服务器加入前端的调度列表中
- 重复上述步骤,直到将所有节点完成升级,或发现bug回滚并重新开发debug
- (若是在docker和k8s的容器云环境,Jenkins还可以将打包后的war包,和基础os镜像构建为镜像,进而以容器化方式运行服务)
Jenkins部署
Jenkins部署和运行方式有多种:
- 运行其war包,运行为java程序;
- 离线rpm包安装
- yum仓库安装
- 单独以docker容器方式运行,需要docker环境;
- 运行于k8s之上,需要k8s集群;(运行于k8s之上有三种方式)https://www.jenkins.io/doc/book/installing/kubernetes/
- helm包管理
- 手写yaml文件
- 通过部署Jenkins的operator运行Jenkins
此处采用安装离线rpm包和war包的方式,需要java环境,jdk或jre均可;
jdk安装
直接yum安装仓库中的openjdk版本即可,版本为1.8
[root@jenkins-1 ~]# yum install -y java-1.8.0-openjdk-devel.x86_64 java-1.8.0-openjdk.x86_64
[root@jenkins-1 ~]# java -version
openjdk version "1.8.0_272"
OpenJDK Runtime Environment (build 1.8.0_272-b10)
OpenJDK 64-Bit Server VM (build 25.272-b10, mixed mode)
rpm包安装启动
下载离线的rpm包,上传到服务器,直接rpm安装即可,安装后启动
[root@jenkins-1 ~]# ll
total 68052
-rw-------. 1 root root 1391 Aug 8 12:02 anaconda-ks.cfg
-rw-r--r-- 1 root root 45 Dec 7 11:26 google_proxy.sh
-rw-r--r-- 1 root root 69675984 Dec 7 11:31 jenkins-2.32.3-1.1.noarch.rpm
[root@jenkins-1 ~]# rpm -ivh jenkins-2.32.3-1.1.noarch.rpm
warning: jenkins-2.32.3-1.1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID d50582e6: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:jenkins-2.32.3-1.1 ################################# [100%]
[root@jenkins-1 ~]# rpm -ql jenkins-2.32.3-1.1.noarch.rpm
package jenkins-2.32.3-1.1.noarch.rpm is not installed
[root@jenkins-1 ~]# rpm -qpl jenkins-2.32.3-1.1.noarch.rpm
warning: jenkins-2.32.3-1.1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID d50582e6: NOKEY
/etc/init.d/jenkins
/etc/logrotate.d/jenkins
/etc/sysconfig/jenkins
/usr/lib/jenkins
/usr/lib/jenkins/jenkins.war
/usr/sbin/rcjenkins
/var/cache/jenkins
/var/lib/jenkins
/var/log/jenkins
[root@jenkins-1 ~]# service jenkins status
● jenkins.service - LSB: Jenkins Continuous Integration Server
Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
Active: inactive (dead)
Docs: man:systemd-sysv-generator(8)
[root@jenkins-1 ~]# service jenkins start
Starting jenkins (via systemctl): [ OK ]
[root@jenkins-1 ~]# service jenkins status
● jenkins.service - LSB: Jenkins Continuous Integration Server
Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
Active: active (running) since Mon 2020-12-07 14:54:25 CST; 2s ago
[root@jenkins-1 ~]# ss -nlt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 50 :::42441 :::*
LISTEN 0 50 :::8080 :::*
[root@jenkins-1 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
805e31ce4f9b41e497ba3b4e5122c2dc
界面访问
访问Jenkins,默认为8080端口,需填入生成的字串
安装插件时失败
安装插件失败的原因有:
- 被qiang了,需要配置主机的代理http_proxy,或在Jenkins界面配置插件源如清华的;
- Jenkins版本过低,和现有插件库的较新插件不匹配导致,需要升级Jenkins的版本;
- 若就需要安装低版本的Jenkins,则可以在Jenkins插件库网址上搜索与低版本Jenkins对应的低版本插件
- 但版本依赖较为复杂,还是升级的好;
此处原因为Jenkins版本过低,与现有插件匹配不上,需要安装新版本的Jenkins,此处安装的为当前最新稳定版,2.263.1,下载改版本war包,替换原有的2.32.1的war包重新启动即可;
升级后即可重新安装插件,但手动逐一找出推荐插件安装较为繁琐,因此用新的虚拟机重新采用war包方式安装;
war包安装启动
- 下载最新war包;https://www.jenkins.io/download/
- 安装jdk环境;
- 启动war包,java -jar Jenkins.war;https://www.jenkins.io/doc/book/installing/war-file/#war-files
- 界面访问,并添加终端启动时,生成了的密码串
- 选择推荐插件安装,插件安装时,虚拟机配置了http_proxy代理上网
- 创建管理员用户
- 进入Jenkins系统
安装后界面:并成功安装了所有推荐插件;
Jenkins用yum源安装
官方介绍:https://www.jenkins.io/doc/book/installing/linux/#long-term-support-release-3
插件管理
Jenkins所有功能,都是依赖插件实现,系统管理-》插件管理可以管理插件,安装、更新等,高级界面可以手动上传离线的插件包.hpi格式,可以设置插件代理
Jenkins升级
升级Jenkins,对于rpm包的安装方式,下载需要升级的war包,然后放置到/usr/lib/jenkins目录下即可,然后重启Jenkins即可完成升级;