Jenkins持续集成工具 - 安装部署以及参数化构建

目录

一、部署git环境准备与jenkins联动

1.1、git服务器下载git并初始化

1.2、ssh公钥实现免交互

1.3、git提交同步测试

二、jenkins安装部署访问

2.1、确认JDK环境(Jenkins是java编写)

2.2、启动jenkins访问页面安装插件

三、git参数化构建

3.1、job+git+master构建模式

3.2、job+git+多分支构建模式


常用应用场景
• 创建一个项目,手动可以构建,完成一些简单任务,比如下 载代码后进行编译 • 编译失败邮件通知用户 • 用户可以选择不同参数进行构建 • 代码改动后自动触发某个构建 或者定时触发某个项目构建 • 一个项目构建完成后可以自动调用另一个项目的构建,完成 一连串的任务 • 并发
官网:https://jenkins.io/zh/

一、部署git环境准备与jenkins联动

#规划
linux-node1.example.com  jenkins服务器,部署服务页面展示
linux-node2.example.com  web测试、git本地服务器、jenkins-slave节点
linux-node3.example.com  git总服务器,相当于中转站共享库,自身不创建git文件,只接收本地分支上传

1.1、git服务器下载git并初始化

#创建用户及初始化git库

[root@linux-node3 ~]# yum install -y git
[root@linux-node3 ~]# useradd git
[root@linux-node3 ~]# passwd git
[root@linux-node3 /]# su git
[git@linux-node3 ~]$ mkdir -p repos/app.git && cd ./repos/app.git 
[git@linux-node3 app.git]$ git --bare init  # 总库初始化、总库一般都是空库

# web服务器安装git作客户端

[root@linux-node1 ~]# yum install -y git  # node1是jenkins服务器job需要调用git
[root@linux-node2 ~]# yum install -y git  # node2是本地git库

1.2、ssh公钥实现免交互

#同步本地文件到git服务器库就不要密码了

[root@linux-node2 app]# ssh-keyscan
[root@linux-node2 app]# cat /root/.ssh/id_rsa.pub  # 公钥放入git服务器存放文件中
[root@linux-node3 /]# cat /etc/ssh/sshd_config | grep AuthorizedKeysFile
AuthorizedKeysFile      .ssh/authorized_keys
[git@linux-node3 /]$ mkdir /home/git/.ssh && chmod 700 /home/git/.ssh  # 创建存放ssh-key目录文件
[git@linux-node3 /]$ vim /home/git/.ssh/authorized_keys && chmod 600 /home/git/.ssh/authorized_keys
[root@linux-node3 /]# vim  /home/git/.ssh/authorized_keys && echo "node2公钥内容" >> authorized_keys

1.3、git提交同步测试

# 测试能否正常使用git,本地先创建文件准备提交git服务器

[root@linux-node2 test-git]# mkdir test-git/app && cd  test-git/app && touch index.html && echo 123 > index.html

# 同步git服务器仓库成功

[root@linux-node2 test-git]# git clone [email protected]:/home/git/repos/app.git  # 目前git服务器没有本地提交还是空
warning: 您似乎克隆了一个空版本库。

# 创建文件先推送本地git库

[root@linux-node2 app]# git add .
[root@linux-node2 app]# git status
# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
#   (使用 "git rm --cached <file>..." 撤出暂存区)
#
#       新文件:    1.html
#
[root@linux-node2 app]# git commit -m 'test01'

# 推送本地git到服务器git库

[root@linux-node2 app]# git push origin master  # master主分支

# 再次拉去git库可以拉到我们刚才上传的文件

[root@linux-node2 app]# git clone [email protected]:/home/git/repos/app.git 
[root@linux-node2 app]# ls app/
123.html  1.html  index.html

# 至此,一个简单的git服务端和客户端完毕

二、jenkins安装部署访问

2.1、确认JDK环境(Jenkins是java编写)

# 确认有没有java环境,没有需要部署jdk

[root@linux-node1 ~]# cp jdk-8u91-linux-x64.tar.gz /usr/local && cd /usr/local
[root@linux-node1 local]# ln -s jdk1.8.0_91 jdk1.8
[root@linux-node1 jdk1.8.0_91]# vim /etc/profile
#set java environment
JAVA_HOME=/usr/local/jdk1.8
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
[root@linux-node1 jdk1.8.0_91]# source /etc/profile
[root@linux-node1 jdk1.8.0_91]# java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)

2.2、启动jenkins访问页面安装插件

# 添加jenkins源和官方证书认证
# 官网:https://pkg.jenkins.io/redhat-stable/

[root@linux-node1 ~]# sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
[root@linux-node1 ~]# sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

# 安装

[root@linux-node1 yum.repos.d]# yum install -y jenkins  # 或者本地yum更快
[root@linux-node1 ~]# yum localinstall jenkins-2.204.6-1.1.noarch.rpm -y

# 此时启动报错:Starting Jenkins bash: /usr/bin/java: 没有那个文件或目录
# 原因为jdk为自己安装,路径与jenkins默认jdk路径不一致,需要软链接

[root@linux-node1 local]# ln -s /usr/local/jdk1.8/bin/java /usr/bin/java
[root@linux-node1 local]# systemctl stop jenkins
[root@linux-node1 local]# systemctl start jenkins

# 进程端口日志确认

[root@linux-node1 local]# ps -ef | grep jenkins
jenkins   39598      1 11 17:56 ?        00:00:13 /usr/bin/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
[root@linux-node1 local]# lsof -i:8080
COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    39598 jenkins  161u  IPv6  57195      0t0  TCP *:webcache (LISTEN)
[root@linux-node1 local]# tailf /var/log/jenkins/jenkins.log

# 浏览器访问(关闭代理)

[root@linux-node1 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
b892e58974424681bd41a4bb0ccba2fc  # 获取默认密钥
浏览器:http://192.168.56.11:8080/

# 解决Jenkins插件不能下载安装的问题

# 本人安装时插件下载速度很慢并且有失败,建议使用第三方源
换源地址:http://192.168.56.11:8080/pluginManager/advanced
升级站点URL:http://mirror.esuni.jp/jenkins/updates/update-center.json
参考文章:
-- https://blog.csdn.net/weixin_42248864/article/details/88366791
-- https://www.cnblogs.com/sxdcgaq8080/p/10489326.html
# 插件下载完成后创建用户密码保存完成 Rui 123456

三、git参数化构建

3.1、job+git+master构建模式

当前主要利用jenkins的job远程访问git库,同步数据,默认需要手动输入同步哪个分支

# 首先插件安装Git Parameter

# 首先构建freestyle-job

# 构建shell参数化获取变量

# 源码管理负责连接git服务器库

# 根据分支获取对应变量

# 开始构建job

构建时报错:

****报错****:
The default value has been returned
An error occurred while download data
Command "git ls-remote -h [email protected]:/home/git/repos/app.git" returned status code 128:
stdout:
stderr: Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
Please look at the Log
Please check the configuration

解决方法:
1、jenkins默认通过用户jenkins访问git服务器,权限不够
[root@linux-node1 web-01]# cat /etc/sysconfig/jenkins | grep root
JENKINS_USER="root"
2、jenkins服务克隆git库时默认需要交互确认输入yes,导致job执行失败
实现jenkins服务器和git服务器ssh免交互,参考1.2章节
解决方法来源:http://www.eryajf.net/562.html


3.2、job+git+多分支构建模式

当前利用Git Parameter插件实现自动识别git库有哪些分支供用户选择
job构建时不会直接开始构建,可以先选择构建哪个git分支

# 默认git库只有一个master分支,现在本地创建一个名为test01的新分支
# 然后利用test01分支提交一个文件test01.html到git服务器库
# 那么现在git库就总共有两个分支了

[root@linux-node2 app]# pwd
/root/test-git/app
[root@linux-node2 app]# git branch test01 
[root@linux-node2 app]# git checkout test01
切换到分支 'test01'
[root@linux-node2 app]# touch test01.html
[root@linux-node2 app]# git add .
[root@linux-node2 app]# git commit -m 'test01'
[root@linux-node2 app]# git push origin test01
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 273 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:/home/git/repos/app.git
 * [new branch]      test01 -> test01

# 此时构建项目会自动识别新分支

Guess you like

Origin blog.csdn.net/weixin_39855998/article/details/105462056