jenkins基础、手动、自动代码上线

摘要:
0[root@jenkins~]#ps-ef|grep[j]enkinsjenkins703116401:40?

1. jenkins基本介绍与使用

1.1 jenkins介绍

官网 https://jenkins.io
Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)基于web界面的平台。
Jenkins是一个工具集,提供了各种各样的插件
比如获取git上最新的代码
比如可以帮你编译源代码
比如可以调用自定义的shell脚本远程执行命令
官方文档 https://jenkins.io/doc/

1.2 jenkins安装方式

(1)docker
(2)windows
(3)linux
(4)war
(5)yum

1.3 jenkins下载

jenkins基础、手动、自动代码上线第1张
jenkins基础、手动、自动代码上线第2张

2. 安装jenkins

2.1 安装java依赖环境

[root@jenkins ~]# yum -y install java

2.2 安装jenkins并启动

[root@jenkins ~]# yum -y localinstall jenkins-2.176.1-1.1.noarch.rpm
[root@jenkins ~]# systemctl start jenkins && systemctl enable jenkins
jenkins.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig jenkins on
[root@jenkins ~]# echo $?
0
[root@jenkins ~]# ps -ef|grep [j]enkins
jenkins    7031      1 64 01:40 ?        00:01:02 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20   # jenkins监听8080端口

2.3 jenkins目录说明

[root@jenkins ~]# rpm -ql jenkins 
/etc/init.d/jenkins             # jenkins启动脚本
/etc/logrotate.d/jenkins        # jenkins日志轮转脚本
/etc/sysconfig/jenkins          # jenkins 配置文件
/usr/lib/jenkins                # jenkins主程序包(war包),升级的时候替换一下这个包就行了
/usr/lib/jenkins/jenkins.war    # jenkins主程序包(war包),升级的时候替换一下这个包就行了
/usr/sbin/rcjenkins             # /etc/init.d/jenkins的软连接文件,也是一个启动文件
/var/cache/jenkins              # jenkins缓存目录
/var/lib/jenkins                # jenkins站点目录
/var/log/jenkins                # jenkins日志目录

2.4 配置客户端域名解析

# 在hosts文件中添加如下
192.168.1.62 jenkins.xts.com

2.5 访问jenkins并配置

java项目启动都比较慢,出现下图,只要日志没有报错,请耐心等待(建议多给点内存)
jenkins基础、手动、自动代码上线第3张
启动完毕
jenkins基础、手动、自动代码上线第4张

基本配置
jenkins基础、手动、自动代码上线第5张
jenkins基础、手动、自动代码上线第6张
jenkins基础、手动、自动代码上线第7张

注意:

(1)如果在安装插件界面,没有准备好拆件,可以使用安装推荐的插件
(2)如果提前准备好了插件,选择右上角的跳过插件安装,然后更改admin的默认密码
(3)离线状态:连不上插件地址导致,选择跳过插件安装,然后会直接进入jenkins,这个时候第一时间更改admin的默认密码

更改admin默认密码
jenkins基础、手动、自动代码上线第8张
jenkins基础、手动、自动代码上线第9张

3. 安装jenkisn插件与汉化

安装插件注意事项

(1)如何对插件下载进行加速
(2)如何导入一个.hpi的插件
(3)如何批量导入备份过的插件

3.1 如何对插件下载进行加速

默认插件所有下载地址都是国外地址,这里只需要替换一下成国内地址即可。
步骤如下:

jenkins基础、手动、自动代码上线第10张
jenkins基础、手动、自动代码上线第11张
jenkins基础、手动、自动代码上线第12张
jenkins基础、手动、自动代码上线第13张
jenkins基础、手动、自动代码上线第14张
jenkins基础、手动、自动代码上线第15张

3.2 如何导入一个.hpi的插件

jenkins基础、手动、自动代码上线第16张
jenkins基础、手动、自动代码上线第17张
jenkins基础、手动、自动代码上线第18张
jenkins基础、手动、自动代码上线第19张
jenkins基础、手动、自动代码上线第20张

3.3 如何批量导入备份过的插件

[root@jenkins ~]# ls /var/lib/jenkins/plugins/      # 插件的安装目录
[root@jenkins ~]# 

# 解压准备好的插件到插件的安装目录
[root@jenkins ~]# rm -rf /var/lib/jenkins/plugins                # 这里之所以要删除plugins,是因为解压出来的包也叫plugins,实际工作中,不一定是相同的名称,建议操作的时候,先备份
[root@jenkins ~]# tar xf jenkins_2.176_plugins.tar.gz -C //var/lib/jenkins/
[root@jenkins ~]# ll /var/lib/jenkins/plugins/|wc -l
247

# 授权
[root@jenkins ~]# chown -R jenkins.jenkins /var/lib/jenkins/plugins/

# 重启jenkins
[root@jenkins ~]# systemctl restart jenkins.service

浏览器访问
jenkins基础、手动、自动代码上线第21张
jenkins基础、手动、自动代码上线第22张
注意:不要随便升级插件,防止升级插件的同时把jenkins版本也给升级了,这样就会导致其他原版本的无法使用升级后jenkins的插件

隐藏可忽略的警告

jenkins基础、手动、自动代码上线第23张
jenkins基础、手动、自动代码上线第24张
jenkins基础、手动、自动代码上线第25张
jenkins基础、手动、自动代码上线第26张

4. 创建jenkinsjob任务

4.1 实现jenkins+shell的集成

jenkins基础、手动、自动代码上线第27张
jenkins基础、手动、自动代码上线第28张
jenkins基础、手动、自动代码上线第29张
jenkins基础、手动、自动代码上线第30张
jenkins基础、手动、自动代码上线第31张
jenkins基础、手动、自动代码上线第32张
jenkins基础、手动、自动代码上线第33张
jenkins基础、手动、自动代码上线第34张
jenkins基础、手动、自动代码上线第35张
构建文件没有写绝对路径时,生成的文件所在位置
jenkins基础、手动、自动代码上线第36张

4.2 实现jenkins+gitlab的集成

4.2.1 准备一个项目

monitor_html代码包下载点我
提取码:ohjg

[root@gitlab ~]# tar xf monitor_html.tar.gz 
[root@gitlab ~]# ls
anaconda-ks.cfg  gitlab-12-0-stable-zh         gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm  monitor_html.tar.gz
demo             gitlab-12-0-stable-zh.tar.gz  monitor
[root@gitlab ~]# cd monitor/
[root@gitlab ~/monitor]# ls
404.html         content-widgets.html     fonts                 index.html      media                    QHME.iml
alerts.html      css                      form-components.html  js              media.html               readme.md
assets           deviceManager.html       form-elements.html    keyInfo.html    messages.html            real-time.html
buttons.html     dianfei.html             form-examples.html    labels.html     mstp_105_SuperAdmin.iml  sa.html
calendar.html    efficiencyAnalysis.html  form-validation.html  LICENSE         mstp_map.html            tables.html
charts.html      energy_consumption.html  images-icons.html     list-view.html  other-components.html    typography.html
components.html  file-manager.html        img                   login.html      profile-page.html        userMng.html

4.2.2 前往gitlab创建一个仓库

jenkins基础、手动、自动代码上线第37张
jenkins基础、手动、自动代码上线第38张
命令行操作

[root@gitlab ~/monitor]# git remote -v
origin	https://gitee.com/kangjie1209/monitor.git (fetch)
origin	https://gitee.com/kangjie1209/monitor.git (push)

# 干掉原有的远程仓库
[root@gitlab ~/monitor]#  git remote remove origin

# 添加新的远程仓库(命令在gitlab页面“推送现有文件夹”中)
[root@gitlab ~/monitor]# git remote add origin git@gitlab.xts.com:xts/monitor.git

4.2.3 本地仓库提交项目到gitlab仓库

[root@gitlab ~/monitor]# git add .
[root@gitlab ~/monitor]# git commit -m "第一次提交"
# On branch master
nothing to commit, working directory clean

[root@gitlab ~/monitor]# git push origin master
Counting objects: 435, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (372/372), done.
Writing objects: 100% (435/435), 8.78 MiB | 0 bytes/s, done.
Total 435 (delta 53), reused 435 (delta 53)
remote: Resolving deltas: 100% (53/53), done.
To git@gitlab.xts.com:xts/monitor.git
 * [new branch]      master -> master

浏览器刷新查看结果
jenkins基础、手动、自动代码上线第39张
jenkins基础、手动、自动代码上线第40张

4.2.4 配置jenkins job连接到gitlab

(1)jenkins安装插件(gitlab plugins)
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

5. 搭建一套小的集群,实现手动代码上线

jenkins基础、手动、自动代码上线第55张

5.1 服务器配置

主机名IP说明
lb01192.168.1.91负载均衡
web01192.168.1.92后端节点
web02192.168.1.93后端节点

5.2 搭建过程

5.2.1 准备web集群环境

# lb01、web01、web02都安装nginx
yum -y install nginx

# 配置负载(lb01)
[root@lb01 ~]# vim /etc/nginx/conf.d/proxy_html.xts.com.conf
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_html.xts.com.conf
upstream html {
        server 192.168.1.92:80;
	server 192.168.1.93:80;
}

server {
	listen 80;
        server_name html.xts.com;
	location / {
		proxy_pass http://html;
		proxy_set_header Host $http_host;
  }
}
[root@lb01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

[root@lb01 ~]# systemctl restart nginx
[root@lb01 ~]# systemctl enable nginx

# 配置后端web节点
## web01
[root@web01 ~]# vim /etc/nginx/conf.d/html.xts.com.conf
[root@web01 ~]# cat /etc/nginx/conf.d/html.xts.com.conf
server {
	listen 80;
        server_name html.xts.com;
	root /code/web;

	location / {
		index index.html;
  }
}
[root@web01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 ~]# systemctl restart nginx
[root@web01 ~]# systemctl enable nginx

## web02
[root@web02 ~]# vim /etc/nginx/conf.d/html.xts.com.conf
[root@web02 ~]# cat /etc/nginx/conf.d/html.xts.com.conf 
server {
	listen 80;
        server_name html.xts.com;
	root /code/web;

	location / {
		index index.html;
  }
}
[root@web02 ~]# systemctl restart nginx
[root@web02 ~]# systemctl enable nginx

# 创建站点目录
[root@web01 ~]# mkdir /code/web -p
[root@web01 ~]# echo web01 > /code/web/index.html
[root@web02 ~]# mkdir -p /code/web
[root@web02 ~]# echo web02 > /code/web/index.html

5.3 浏览器访问

# hosts解析配置
192.168.1.91 html.xts.com

jenkins基础、手动、自动代码上线第56张
jenkins基础、手动、自动代码上线第57张

5.4 克隆代码

jenkins基础、手动、自动代码上线第58张

[root@jenkins /tmp]# git clone git@gitlab.xts.com:xts/monitor.git
Cloning into 'monitor'...
The authenticity of host 'gitlab.xts.com (192.168.1.51)' can't be established.
ECDSA key fingerprint is SHA256:TTu0eIxmefjYUd12/DCcn8irm/rmOBQP/U31gIKhbDo.
ECDSA key fingerprint is MD5:a0:f0:7a:09:ef:b7:e8:4b:0f:3c:c8:6e:cb:6c:a4:7e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitlab.xts.com,192.168.1.51' (ECDSA) to the list of known hosts.
remote: Enumerating objects: 435, done.
remote: Counting objects: 100% (435/435), done.
remote: Compressing objects: 100% (372/372), done.
remote: Total 435 (delta 53), reused 435 (delta 53)
Receiving objects: 100% (435/435), 8.78 MiB | 0 bytes/s, done.
Resolving deltas: 100% (53/53), done.
[root@jenkins /tmp]# ls
monitor

# 把代码传输到两个web节点
## 这里注意:jenkins和两台web需要打通免密
[root@jenkins /tmp]# for i in 192.168.1.92 192.168.1.93;do scp -rp monitor/* ${i}:/code/web/;done

5.5 浏览器访问

jenkins基础、手动、自动代码上线第59张

6. jenkins实现代码自动上线

6.1 实现思路

# 脚本
(1)进入对应的仓库目录
(2)打包
(3)scp推送

6.2 实现步骤

6.2.1 编写脚本

[root@jenkins /scripts]# cat html_deploy.sh 
#!/bin/bash

Date=$(date +%F-%H:%M)
web_server="192.168.1.92 192.168.1.93"
code_tar(){
         cd /var/lib/jenkins/workspace/freestyle-monitor
	 tar czf /opt/web-${Date}.tar.gz ./*
}

scp_web(){
	 for host in $web_server
  	 do
	   scp -rp /opt/web-${Date}.tar.gz ${host}:/code
           ssh ${host} "mkdir -p /code/web-${Date} && 
           tar xf /code/web-${Date}.tar.gz -C /code/web-${Date} && 
	   rm -f /code/web-${Date}.tar.gz && 
           rm -rf /code/web && 
           ln -s /code/web-${Date} /code/web"
	 done
}
deploy(){
	 code_tar
	 scp_web
}

deploy

[root@jenkins /scripts]# chmod +x html_deploy.sh

# 打通免密
[root@jenkins /scripts]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.92
[root@jenkins /scripts]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.93

# 手动执行脚本,然后检查执行结果
[root@jenkins /scripts]# sh html_deploy.sh 
web-2020-06-26-14:59.tar.gz                                                                 100% 4545KB  28.3MB/s   00:00    
web-2020-06-26-14:59.tar.gz                                                                 100% 4545KB  43.8MB/s   00:00 

# web检查执行结果
[root@web01 /code]# ls
web  web-2020-06-26-14:59
[root@web02 /code]# ls
web  web-2020-06-26-14:59

6.2.2 整合脚本到jenkins

jenkins基础、手动、自动代码上线第60张
jenkins基础、手动、自动代码上线第61张
jenkins基础、手动、自动代码上线第62张
jenkins基础、手动、自动代码上线第63张
jenkins基础、手动、自动代码上线第64张
jenkins基础、手动、自动代码上线第65张
jenkins基础、手动、自动代码上线第66张
编辑jenkins配置文件,解决报错
jenkins基础、手动、自动代码上线第67张
jenkins基础、手动、自动代码上线第68张
jenkins基础、手动、自动代码上线第69张
浏览器重新验证
jenkins基础、手动、自动代码上线第70张
jenkins基础、手动、自动代码上线第71张
jenkins基础、手动、自动代码上线第72张
jenkins基础、手动、自动代码上线第73张

修改网站代码上传,再次验证
jenkins基础、手动、自动代码上线第74张
jenkins基础、手动、自动代码上线第75张
jenkins基础、手动、自动代码上线第76张
jenkins基础、手动、自动代码上线第77张
jenkins基础、手动、自动代码上线第78张

免责声明:文章转载自《jenkins基础、手动、自动代码上线》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VC++ 设置软件开机自启动的方法Mapgis地图颜色配置(专题图配置)对比Arcgis根据属性配置图斑颜色下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

makefile学习经验(三)编译生成动态库文件(方式一)

Lunix下生成动态库文件:          之前已经介绍了.o,.a,.so文件类型的含义,.so后缀的文件是动态库文件。         下面介绍在编译过程中链接到动态库文件的方法: 一.   源码文件: so_test.h: void test_a(); void test_b(); void test_c(); test_a.c: #includ...

解决Jenkins用shell脚本部署后,Jenkins自动杀掉启衍生出来的守护进程

Jenkins部署java项目遇到的问题: 1、Jenkins执行构建后,需要手动执行startup.sh,站点才能正常访问 产生原因: shell脚本发布时,会衍生进程,Jenkins默认会自动杀掉衍生进程 解决方案: 在执行shell脚本前,加个build_ID参数即可 BUILD_ID=DONTKILLME...

jenkins忘记管理员账号密码的补救方法

源引自:http://www.cnblogs.com/xiami303/p/3625829.html 一不小心,忘记了admin用户的账号密码。然后就看不到manage jenkins的那部分内容了,看不到就改不了用户权限,也就是系统瘫痪了。 于是,想着开始没注册账号和密码的时候,都能看见,也就是没有sign in 和sign up模块的时候,是可以使用的...

在ModelSim中添加Xilinx仿真库

在ModelSim中添加Xilinx仿真库 说明: l ModelSim一定要安装在不带空格的目录下,即不要安装在“Program Files”目录下。如作者是安装在D:softwaresModelsim目录下。 l ISE软件也最好安装在不带空格的目录下。 1、找到开始菜单->程序->Xilinx ISE Design Suite 11 -&...

namenode无法启动(namenode格式化失败)

格式化namenode root@node04 bin]# sudo -u hdfs hdfs namenode –format 16/11/14 10:56:51 INFO namenode.NameNode: STARTUP_MSG: /*******************************************************...

Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台

前言 本篇文章主要介绍的是Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台的集成。 博客之前已经有关于Jenkins、SonarQube、Gitlab分别安装的文章,本文主要说明三种平台集成使用,实现代码持续集成与自动化部署。 一、jenkins集成gitlab jenkins中添加gitlab插件,选择直接安装,然后服务器中...