专栏首页散尽浮华Jenkins迁移及日常操作的一点总结

Jenkins迁移及日常操作的一点总结

之前在公司机房部署了一套jenkins环境,现需要迁移至IDC机房服务器上,迁移过程中记录了一些细节: 1)jenkins默认的主目录放在当前用户家目录路径下的.jenkins目录中。如jenkins使用root用户启动,则主目录为/root/.jenkins

[root@code-server ~]# ll -d /root/.jenkins/
drwxr-x--- 14 root root 4096 Dec 18 15:22 /root/.jenkins/

2)可以在系统环境变量里手动设置jenkins的主目录,这样启动jenkins后,jenkins数据就会写入到手动设置的主目录里。

root用户可以在/etc/profile文件里设置
[root@jenkins01 ~]# vim /etc/profile
......
JENKINS_HOME="/data/jenkins"
export JENKINS_HOME
 
[root@jenkins01 ~]# source /etc/profile
 
===========================================================
如果是非root用户,就在用户家目录的.bashrc文件里设置
[app@jenkins01 ~]$ vim .bashrc
......
JENKINS_HOME="/data/jenkins"
export JENKINS_HOME
 
[app@jenkins01 ~]$ source .bashrc
[app@jenkins01 ~]$ echo $JENKINS_HOME
/data/tomcat8.5/webapps/jenkins
[app@jenkins01 ~]$ env
.......
JENKINS_HOME=/data/jenkins
==========================================================

温馨提示:
最好别将jenkins主目录指定到tomcat/webapps/jenkins,因为如果有其他同名的tomcat项目启动,容易造成数据覆盖!
所以最好将jenkins主目录指定到其他地方,比如指定到/data/jenkins。

jenkins主目录设置之后,可以登录jenkins界面查看它的主目录路径,依次点击"Jenkins"->"系统管理"->"系统设置"

3)jenkins迁移

迁移步骤为:
1)先关闭新老服务器的tomcat程序,确保迁移时新老机器的jenkins都处于关闭状态。jenkins程序关闭最好是直接kill掉jenkins的tomcat程序pid。
2)将老服务器jenkins主目录下的config.xml文件以及jobs、users、workspace、plugins四个目录拷贝到新机器的jenkins主目录下。
3)重启新服务器jenkins的tomcat程序。

迁移的时候可以直接将jenkins主目录数据整个拷贝过去,也可以单独拷贝jenkins主目录下的config.xml文件以及jobs、users、workspace、plugins四个目录(这是主要的迁移数据)。一般来说,手动设置好jenkins主目录路径,启动jenkins后就会自动生成(但要确保jenkins用户有权限创建这个主目录,最好是提前手动创建并赋予jenkins启动用户的权限)

关闭老机器的jenkins程序
[root@code-server ~]# lsof -i:8080
COMMAND    PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
bundle   13481  git   15u  IPv4 2839661      0t0  TCP localhost:webcache (LISTEN)
[root@code-server ~]# kill -9 13481

新机器的jenkins程序也要同样关闭 

拷贝老服务器的jenkins主目录或者上面说的那几个重要数据到新机器的jenkins主目录下
[root@code-server ~]# rsync -e "ssh -p22" -avpgolr --delete /data/jenkins/ root@10.0.8.60:/data/jenkins/

或者
[root@code-server ~]# rsync -e "ssh -p22" -avpgolr /data/jenkins/config.xml root@10.0.8.60:/data/jenkins/
[root@code-server ~]# rsync -e "ssh -p22" -avpgolr --delete /data/jenkins/users/ root@10.0.8.60:/data/jenkins/users/
[root@code-server ~]# rsync -e "ssh -p22" -avpgolr --delete /data/jenkins/plugins/ root@10.0.8.60:/data/jenkins/plugins/
[root@code-server ~]# rsync -e "ssh -p22" -avpgolr --delete /data/jenkins/jobs/ root@10.0.8.60:/data/jenkins/jobs/
[root@code-server ~]# rsync -e "ssh -p22" -avpgolr --delete /data/jenkins/workspace/ root@10.0.8.60:/data/jenkins/workspace/

尤其是plugins目录,最好保证新机器下的这个目录和老机器下的这个目录数据保持一致。否则容易造成新机器的jenkins访问报错

最后启动新机器的jenkins服务
[root@jenkins01 ~]$ /data/tomcat8.5/bin/startup.sh
[app@jenkins01 ~]$ lsof -i:8080
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    101037  app   46u  IPv6 498942      0t0  TCP *:webcache (LISTEN)

4)通过ssh方式下载gitlab代码到jenkins本机

一般来说,会在jenkins界面里创建工程,在工程里配置gitlab的地址,将gitlab代码下载到jenkins本机,然后通过脚本自动发版。
安全考虑,通过ssh方式下载gitlab代码。这就需要将jenkins本机的id_rsa.pub公钥上传到gitlab里。
1)如果jenkins程序通过root用户启动,则需要将root用户下的id_rsa.pub公钥上传到gitlab的SSH Keys里。
2)如果jenkins程序通过非root用户启动,则需要将非root用户的id_rsa.pub公钥上传到gitlab的SSH Keys里。

比如jenkins程序是通过app用户启动的
[app@jenkins01 ~]$ cat ~/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAw/I9657ZRmducrkbagPfptLwRaCmJIIQIcQ3VljBLBlwyNFBYg6KfiktMB4KHlvu4WCrGpDjVtWf7gQy
Ey+iJNsL7TyiIZdg0RRGpssu93w6IhgoHtRZni/775MrdjLQpi7hhB6wiX+eCfU7duqXT+arnEUonAF+27HegVbXuqz+oeDS/1QBzKsOoMg0K4nA7Btl
GNIn1ljvvQzyHxIJevWM0UUhFl8lv9+RCcT0cyHmjSrw/9+gr4AYZmYaqlVmCWHmwuAixx7bt3Mh3ri+BK385qAUxaVVsw3kg/vHbJEg+JYn/Xm4pdnw
j+CLn6OpQAMZm+bEx12Iwd3gazBy+Q== app@jenkins01.kevin.cn

5)非root用户启动jenkins的tomcat程序

需要记住的一个细节:
在linux系统下,只有root用户才可以使用1024以下的端口号,非root用户只能启动1024以上的端口。
所有如果使用非root用户启动jenkins,则端口必须配置成大于1024的,比如采用默认的8080端口,如果配置成80端口,则启动失败!

6)当ssh是非标准的22端口时,进行git clone下载gitlab代码

如上,将jenkins本机的id_rsa.pub公钥拷贝到gitlab的SSH Keys里。

1)如果jenkins机器和gitlab机器ssh都采用默认的22端口,则就可以直接git clone下载git代码了。
[app@jenkins01 ~]$ mkdir /data/git_data/
[app@jenkins01 ~]$ cd /data/git_data/
[app@jenkins01 git_data]$ git init .
Reinitialized existing Git repository in /data/git_data/.git/

[app@jenkins01 git_data]$ git clone git@172.16.50.25:fanglianchao/dbops.git
Initialized empty Git repository in /data/git_data/dbops/.git/
Warning: Permanently added '172.16.50.25' (RSA) to the list of known hosts.
remote: Counting objects: 1224, done.
remote: Compressing objects: 100% (812/812), done.
remote: Total 1224 (delta 379), reused 1220 (delta 377)
Receiving objects: 100% (1224/1224), 9.50 MiB, done.
Resolving deltas: 100% (379/379), done.

[app@jenkins01 git_data]$ ls
dbops

====================================================================
2)如果jenkins机器和gitlab机器ssh采用的端口不一致,这就需要在jenkins本机的.ssh目录下手动创建config文件,在config文件中指定
连接gitlab时的信息。

例如:jenkins本机的ssh端口是6666,jenkins本机(172.16.50.25)的ssh端口是22,则在jenkins本机的操作如下:
[app@jenkins01 ~]$ mkdir /data/git_data/
[app@jenkins01 ~]$ cd /data/git_data/
[app@jenkins01 git_data]$ git init .
Reinitialized existing Git repository in /data/git_data/.git/

[app@jenkins01 ~]$ cat ~/.ssh/config 
Host "172.16.50.25"
Port 22

注意:config文件必须是600权限
[app@jenkins01 git_data]$ sudo chmod 600 ~/.ssh/config
[app@jenkins01 git_data]$ ll ~/.ssh/config
-rw-------. 1 app app 28 Dec 20 23:26 /home/app/.ssh/config

然后就可以正常git clone下载代码了
[app@jenkins01 git_data]$ git clone git@172.16.50.25:qwfss/qwfss.git
Initialized empty Git repository in /data/git_data/qwfss/.git/
remote: Counting objects: 110, done.
remote: Compressing objects: 100% (59/59), done.
remote: Total 110 (delta 23), reused 0 (delta 0)
Receiving objects: 100% (110/110), 19.99 KiB, done.
Resolving deltas: 100% (23/23), done.
[app@jenkins01 git_data]$ ls
qwfss

7)下载gitlab上非master分支代码

比如将gitlab上的git@172.16.50.25:qwfss/qwfss.git下develop分支代码下载到jenkins本机,操作如下:

[app@jenkins01 git_data]$ git clone git@172.16.50.25:qwfss/qwfss.git
Initialized empty Git repository in /data/git_data/qwfss/.git/
remote: Counting objects: 110, done.
remote: Compressing objects: 100% (59/59), done.
remote: Total 110 (delta 23), reused 0 (delta 0)
Receiving objects: 100% (110/110), 19.99 KiB, done.
Resolving deltas: 100% (23/23), done.

[app@jenkins01 git_data]$ ls
qwfss
[app@jenkins01 git_data]$ cd qwfss/
[app@jenkins01 qwfss]$ 

查看分支详细情况 (推荐这种方式)
[app@jenkins01 qwfss]$ git branch 
* develop
[app@jenkins01 qwfss]$ git branch -av
* develop                29e5e1f fix(fss): 测试环境配置文件同步
  remotes/origin/HEAD    -> origin/develop
  remotes/origin/develop 29e5e1f fix(fss): 测试环境配置文件同步

切换到develop分支下
[app@jenkins01 qwfss]$ git checkout -b develop origin/develop
fatal: git checkout: branch develop already exists
====================================================================
或者
[app@jenkins01 qwfss]$ git checkout -b testapp remotes/origin/develop
====================================================================

[app@jenkins01 qwfss]$ git branch 
* develop
[app@jenkins01 qwfss]$ git branch -av
* develop                29e5e1f fix(fss): 测试环境配置文件同步
  remotes/origin/HEAD    -> origin/develop
  remotes/origin/develop 29e5e1f fix(fss): 测试环境配置文件同步

=====================================================================
git分支的日常操作可以参考:http://www.cnblogs.com/kevingrace/p/5690820.html

8)jenkins备机环境

部署jenkins备机时,只需要定期将master机器上jenkins主目录数据拷贝到本机上即可。
   
比如:
jenkins master:10.0.8.60   jenkins01
jenkins slave:10.0.8.61    jenkins02
   
两台机器的jenkins主目录都是:/data/jenkins
[app@jenkins01 ~]$ vim /etc/profile
JENKINS_HOME="/data/jenkins"
export JENKINS_HOME
[app@jenkins01 ~]$ source /etc/profile

手动指定jenkins主目录后,待jenkins启动后,该主目录会自动生成。
但是要注意的是:jenkins启动用户要有权限生成主目录(可以提前手动创建该目录,并将权限设置成jenkins启动用户的权限)
   
那么只需要定期将master机器10.0.8.60上的/data/jenkins目录下的文件拷贝到10.0.8.61机器/data/jenkins下即可!
  
10.0.8.61上写备份脚本(两台机器提前做app账号下的ssh无密码登陆的信任关系):
[app@jenkins01 ~]$ cat /data/script/rsync_jenkins02.sh          (如下脚本,如果不添加--delete参数,则只会同步增加的数据,删除的数据不会同步)
#!/bin/bash
/usr/bin/rsync -e "ssh -p6666" -avpgolr --delete /data/jenkins/ app@10.0.8.61:/data/jenkins/

/usr/bin/ssh -p6666 app@10.0.8.61 "/bin/bash -x /home/app/kill_tomcat.sh"
/usr/bin/ssh -p6666 app@10.0.8.61 "/data/tomcat8.5/bin/startup.sh"
  
10.0.8.61上的脚本:
[app@jenkins02 ~]$ cat /home/app/kill_tomcat.sh
#!/bin/bash
ps -ef|grep java|grep -v grep|awk '{print $2}'|xargs kill -9
  
如上脚本准备好后,只需要每天定时去执行10.0.8.60机器上的同步脚本/data/script/rsync_jenkins02.sh,即可完成jenkins的备机操作了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 文件实时同步后防篡改的操作记录

    需求场景: 部署一套sftp环境,用于客户上传电子文件(合同文件或视频文件等),文件上传到sftp后立即实时同步到业务应用服务器上。为了安全考虑,文件在首次同步...

    洗尽了浮华
  • centos6下ActiveMQ+Zookeeper消息中间件集群部署记录

    由于最近一个项目并发请求压力比较大,所以考虑改进架构,引入消息中间件集群作为一个缓冲消息队列,具体需求: 1)将大量的WebService请求报文发送到mq集群...

    洗尽了浮华
  • 两个目录中,删除其中一个目录中同名文件的做法

    假设现在有一个目录/mnt/data,还有另外一个目录/opt/data,需要删除/opt/data目录中和/mnt/data目录中的同名文件。 巧妙做法:利用...

    洗尽了浮华
  • 【IoT应用创新大赛】LoRaWAN在工业互联网中的应用

    工业互联网,是智能制造发展的基础,可以提供共性的基础设施和能力;我国已经将工业互联网作为重要基础设施,为工业智能化提供支撑。

    Zach_iot
  • 数据特征分析

    “原因和结果、投入和产出、努力和报酬之间本来存在着无法解释的不平衡。一般来说,投入和努力可以分为两种不同的类型: 多数,它们只能造成少许的影响;少数,它们造成主...

    用户3577892
  • R语言与生信系列①(R入门与临床三线表绘制)

    首次分享课讲的是TCGA数据分析,探究某一因素与肿瘤临床数据之间的关系,并自动生成可以用于SCI发表的三线表,如下图所示:

    用户1359560
  • Highcharts使用的一些总结

    Highcharts 是一个用纯 JavaScript 编写的一个图表库, 能够很简单便捷的在 Web 网站或是 Web 应用程序添加有交互性的图表,并且免费提...

    王小婷
  • Python读取结果写入Excel中

    列表嵌套字典。Excel中的url,test_method,data,title等都是一个键,url,test_method,data,title下面的数据就是...

    清菡
  • 《Hello NumPy》系列-运算与函数应用

    高阶部分篇篇都是干货,建议大家不要错过任何一节内容,最好关注我,方便看到每次的文章推送。

    小一不二三
  • [object%20Object] 这个ajax请求的时候报错,解决方法

    原因是jQuery版本低,不能使用 .post() 改为 .ajax({ type: “post”,

    一天不写程序难受

扫码关注云+社区

领取腾讯云代金券