#Jenkins企业应用进阶详解(一)java
连接:https://pan.baidu.com/s/1NZZbocZuNwtQS0eGkkglXQ 提取码:z7gj 复制这段内容后打开百度网盘手机App,操做更方便哦linux
##1.CI/CD,DevOps介绍git
- 持续集成(Continuous Integration,CI): 代码合并,构建,部署,测试都在一块儿,不断地执行这个过程,并对结果反馈
- 持续交付(Continuous Delivery,CD): 部署到生产环境,给用户使用
- 持续部署(Continuous Deployment,CD): 部署到生产环境
##2.部署Git版远程仓库 ###2.1 系统环境要求 | 主机名 | IP地址 | 备注 | | :---: | :---: | :---: | | Git | 192.168.200.61 | Git服务器 | | Jenkins | 192.168.200.62 | Jenkins服务器 |web
[root@Git ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [root@Git ~]# uname -r 3.10.0-862.3.3.el7.x86_64 [root@Git ~]# systemctl stop firewalld [root@Git ~]# systemctl disable firewalld [root@Git ~]# systemctl stop NetworkManager [root@Git ~]# systemctl disable NetworkManager
###2.2 部署Git版远程仓库apache
#在Git服务器上进行以下操做 #安装Git [root@Git ~]# yum -y install git [root@Git ~]# rpm -qa git git-1.8.3.1-14.el7_5.x86_64 #建立Git帐户 [root@Git ~]# useradd git [root@Git ~]# passwd git 更改用户 git 的密码 。 新的 密码:yangwenbo 从新输入新的 密码:yangwenbo passwd:全部的身份验证令牌已经成功更新。
#切换git普户建立Git远程仓库 [root@Git ~]# su git [git@Git ~]$ mkdir repos #建立Git仓库目录 [git@Git ~]$ cd repos/ [git@Git repos]$ mkdir app.git #建立app的项目目录 [git@Git repos]$ cd app.git/ [git@Git app.git]$ pwd /home/git/repos/app.git [git@Git app.git]$ git --bare init #--bare建立一个裸仓库(只用作远程推送仓库不支持本地git命令) 初始化空的 Git 版本库于 /home/git/repos/app.git/ [git@Git app.git]$ ls branches config description HEAD hooks info objects refs 说明: 使用”git init –bare”方法建立一个所谓的裸仓库,之因此叫裸仓库是由于这个仓库只保存git历史提交的版本信息,而不容许用户在上面进行各类git操做,若是你硬要操做的话,只会获得下面的错误(”This operation must be run in a work tree”) [git@Git app.git]$ git status fatal: This operation must be run in a work tree
###2.3 在Jenkins服务器进行git代码远程推送测试vim
#在Jenkins服务器上进行以下操做 #安装Git [root@Jenkins ~]# yum -y install git [root@Jenkins ~]# rpm -qa git git-1.8.3.1-14.el7_5.x86_64 #建立一个目录,尝试git clone远程Git服务器仓库的代码 [root@Jenkins ~]# git clone git@192.168.200.61:/home/git/repos/app.git 正克隆到 'app'... git@192.168.200.61's password: yangwenbo warning: 您彷佛克隆了一个空版本库。
##建立一个文件进行测试 [root@Jenkins ~]# cd app/ [root@Jenkins app]# touch test #建立一个文件 [root@Jenkins app]# echo "welcome to yunjisuan" >> test [root@Jenkins app]# cat test welcome to yunjisuan #配置git全局配置 [root@Jenkins app]# git config --global user.email "1773464408@qq.com" [root@Jenkins app]# git config --global user.name "Mr.yang" #进行代码提交测试 [root@Jenkins app]# git add * #将文件添加到本地暂存区 [root@Jenkins app]# git commit -m '测试提交' #将代码提交到本地git仓库 [master(根提交) 25f1387] 测试提交 1 file changed, 1 insertion(+) create mode 100644 test
[root@Jenkins app]# git remote -v #发现远程仓库地址已经被添加过了(以前clone时自动添加) origin git@192.168.200.61:/home/git/repos/app.git (fetch) origin git@192.168.200.61:/home/git/repos/app.git (push) [root@Jenkins app]# git push -u origin master #将代码推送到远程仓库的master分支 git@192.168.200.61's password: yangwenbo Counting objects: 3, done. Writing objects: 100% (3/3), 238 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@192.168.200.61:/home/git/repos/app.git * [new branch] master -> master 分支 master 设置为跟踪来自 origin 的远程分支 master。 #查看分支状况 [root@Jenkins app]# git branch -a * master #本地当前所处分支 remotes/origin/master #远程仓库已有分支
###2.4 在Jenkins服务器进行SSH免密钥操做安全
[root@Jenkins ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:90j/AJhD6+G3lCJte/4RXn7Xgf1JSwbqv0lLldmXnK0 root@Jenkins The key's randomart image is: +---[RSA 2048]----+ | | | | | . . | | . + . = B| | S +....&+| | + =.B +=.B| | . * =.*oEo=| | o =..++o..| | .oo..=o | +----[SHA256]-----+
#进行公钥分发 [root@Jenkins ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub git@192.168.200.61 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys git@192.168.200.61's password: yangwenbo Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'git@192.168.200.61'" and check to make sure that only the key(s) you wanted were added.
#测试免密钥的git推送测试 [root@Jenkins ~]# cd app/ [root@Jenkins app]# ls test [root@Jenkins app]# echo "yunwei" >> test [root@Jenkins app]# tail -1 test yunwei [root@Jenkins app]# git add * [root@Jenkins app]# git commit -m "免密钥推送测试" [master 21c373a] 免密钥推送测试 1 file changed, 1 insertion(+) [root@Jenkins app]# git push -u origin master Counting objects: 5, done. Writing objects: 100% (3/3), 288 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@192.168.200.61:/home/git/repos/app.git 25f1387..21c373a master -> master 分支 master 设置为跟踪来自 origin 的远程分支 master。
##3. Jenkins的企业应用管理服务器
jenkins官网:https://jenkins.io/ redhat版jenkins官方页面:https://pkg.jenkins.io/redhat-stable/ ###3.1 Jenkins的安装与基础配置 安装Jenkins的三种方法session
- 利用Yum源安装
- 下载jenkins的rpm包安装
- jenkins的war包安装 ###3.1.1 利用Yum方式安装最新版本jenkins
#下载Jenkins的yum源文件 [root@Jenkins ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo #导入jenkins的rpm证书 [root@Jenkins ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key #利用Yum安装最新版本jenkins [root@Jenkins ~]# yum -y install jenkins [root@Jenkins app]# rpm -qa jenkins jenkins-2.138.2-1.1.noarch #查看jenkins安装路径 [root@Jenkins ~]# rpm -ql jenkins /etc/init.d/jenkins /etc/logrotate.d/jenkins /etc/sysconfig/jenkins #jenkins配置文件 /usr/lib/jenkins /usr/lib/jenkins/jenkins.war /usr/sbin/rcjenkins /var/cache/jenkins /var/lib/jenkins /var/log/jenkins
####3.1.2 安装和配置jdk环境架构
因为jenkins是java开发的因此须要jdk支持
#解压安装jdk [root@Jenkins ~]# tar xf jdk-8u171-linux-x64.tar.gz -C /usr/local [root@Jenkins ~]# cd /usr/local [root@Jenkins local]# mv jdk1.8.0_171 jdk [root@Jenkins local]# /usr/local/jdk/bin/java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
#配置java环境 [root@Jenkins ~]# sed -i.org '$a export JAVA_HOME=/usr/local/jdk/' /etc/profile [root@Jenkins ~]# sed -i.org '$a export PATH=$PATH:$JAVA_HOME/bin' /etc/profile [root@Jenkins ~]# sed -i.org '$a export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar' /etc/profile [root@Jenkins ~]# tail -3 /etc/profile export JAVA_HOME=/usr/local/jdk/ export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar [root@Jenkins ~]# source /etc/profile [root@Jenkins ~]# java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
####3.1.3 安装和配置maven环境
#解压安装maven [root@Jenkins ~]# tar xf apache-maven-3.5.0-bin.tar.gz -C /usr/local/ [root@Jenkins ~]# cd /usr/local/ [root@Jenkins local]# mv apache-maven-3.5.0 maven
#配置maven环境变量 [root@Jenkins ~]# sed -i '$a MAVEN_HOME=/usr/local/maven' /etc/profile [root@Jenkins ~]# sed -i '$a export PATH=${MAVEN_HOME}/bin:$PATH' /etc/profile [root@Jenkins ~]# tail -2 /etc/profile MAVEN_HOME=/usr/local/maven export PATH=${MAVEN_HOME}/bin:$PATH [root@Jenkins ~]# source /etc/profile [root@Jenkins ~]# mvn -v Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00) Maven home: /usr/local/maven Java version: 1.8.0_171, vendor: Oracle Corporation Java home: /usr/local/jdk/jre Default locale: zh_CN, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-862.14.4.el7.x86_64", arch: "amd64", family: "unix"
####3.1.4 启动jenkins
#作一个java命令的软链接 [root@Jenkins ~]# ln -s /usr/local/jdk/bin/java /usr/bin/ [root@Jenkins ~]# which java /usr/bin/java #再次启动jenkins [root@Jenkins ~]# systemctl start jenkins [root@Jenkins ~]# systemctl status jenkins #正常启动 ● jenkins.service - LSB: Jenkins Automation Server Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled) Active: active (running) since 日 2018-10-21 10:08:41 CST; 3s ago Docs: man:systemd-sysv-generator(8) Process: 16017 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=0/SUCCESS) CGroup: /system.slice/jenkins.service └─16036 /usr/bin/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME... 10月 21 10:08:36 Jenkins systemd[1]: Starting LSB: Jenkins Automation Server... 10月 21 10:08:36 Jenkins runuser[16022]: pam_unix(runuser:session): session opened for user jenkins b...d=0) 10月 21 10:08:41 Jenkins jenkins[16017]: Starting Jenkins [ 肯定 ] 10月 21 10:08:41 Jenkins systemd[1]: Started LSB: Jenkins Automation Server. Hint: Some lines were ellipsized, use -l to show in full.
#查看jenkins监听端口8080 [root@Jenkins ~]# netstat -antup | grep 8080 tcp6 0 0 :::8080 :::* LISTEN 16036/java #添加开机自启动 [root@Jenkins ~]# systemctl enable jenkins jenkins.service is not a native service, redirecting to /sbin/chkconfig. Executing /sbin/chkconfig jenkins on
http://192.168.200.62:8080 ####3.1.5 初始化jenkins
#查看jenkins解锁密码,并复制到jenkins的web界面,解锁jenkins [root@Jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword 3a0f9dd9e961458cb2ef514a4c5b4405
使用默认插件配置安装便可
####3.1.6 经常使用的系统模块介绍
####3.1.7 系统管理--->全局工具配置介绍
- Maven配置: 配置maven的settings.xml配置文件的位置路径(不修改成默认路径)。
- 配置JDK: 配置java命令的执行路径;JDK是java语言的软件开发工具包。
- 配置Git: 配置Git的命令执行路径;Git是分布式版本控制软件。
- 配置Gradle: 配置Gradle的执行路径;Gradle是面向java的自动化构建开源工具,同maven。
- 配置Ant: 配置Ant的执行路径;Ant是面向java的自动化构建开源工具,同maven。
- 配置Maven:配置maven的命令执行路径;maven是面向java的自动化构建开源工具。
- 配置Docker: 配置Docker的命令执行路径;Docker是最近大热的容器级虚拟化产品。 ####3.1.8 全局工具配置----> 配置JDK
####3.1.9 全局工具配置----> 配置Git
####3.1.10 全局工具配置----> 配置maven
- Apache Maven是一种创新的软件项目管理工具,提供了一个项目对象模型(POM)文件的新概念来管理项目的构建,相关性和文档。最强大的功能就是可以自动下载项目依赖的库文件。
- 在开发中,为了保证编译经过,开发会处处去寻找项目依赖的jar包(相似rpm安装软件时须要的一堆依赖包)
- 所以,就要用到Maven(Ant和gradle也是干这个的)
- Maven其实就相似Linux的Yum仓库,能够自动帮咱们下载(公网源)和安装java项目所依赖的支持包。
###3.2 用户权限管理
- 在一个成熟的企业应用环境中,jenkins是须要经过权限来控制角色功能使用的
- 开发人员利用jenkins====>生产环境项目代码版本发布(A/B测试等)
- 测试人员利用jenkins====>测试环境自动化部署
- 运维人员利用jenkins====>生产环境项目代码版本回滚 ####3.2.1 安装插件Role-based Authorization Strategy
####3.2.2 全局安全配置--->受权策略--->Role-Based Strategy
####3.2.3 注册两个用户(开发和测试)
因为开启了Role-Based Strategy,此时用户没有任何权限
####3.2.4 系统管理--->Manage and Assign Roles
- Manage Roles:权限管理
- Assign Roles:受权管理
(1)进入权限管理
Golbal roles:全局权限管理
- jenkins的总体权限分配,至少要开读的权限
Project roles:项目权限管理
- 正则匹配具体的项目,分配管理权限
(2)进入受权管理
- Global roles:全局权限受权
- Item roles:项目权限受权
(3)建立两个项目分别以A-和B-开头
(4)登录用户user1和user2进行权限登录测试
###3.3 参数化构建 ####3.3.1 什么是参数化构建? 参数化构建就是在执行自动构建以前能够对构建过程手动传入外部参数,从而改变构建的过程。
(1)配置一个构建脚本,而后执行
(2)添加参数化构建功能
(3)执行参数构建
固然,咱们在构建的时候也能够修改参数的默认值
####3.3.2 安装插件Extended Choice Parameter
- Extended Choice Parameter:做用就是在参数化构建时能够出现一个下拉框让用户直接选择多个值
咱们还能够在一个文件里建立参数,而后让插件引用这个参数
#建立一个参数定义文件 [root@Jenkins ~]# vim /opt/jenkins.property [root@Jenkins ~]# cat /opt/jenkins.property yunjisuan=test01,test02,test06
###3.4 Git参数化构建插件 Git Parameter插件能够直接获取Git仓库的branch,tag等信息 ####3.4.1 安装插件Git Parameter
####3.4.3 进行Git参数化构建 (1)配置Git Parameter插件
(2)配置Git远程仓库
(3)进行Git参数化构建
(4)给Git远程仓库增长分支
#在jenkins上操做 [root@Jenkins ~]# mkdir -p /test [root@Jenkins ~]# cd /test/ [root@Jenkins test]# git init 初始化空的 Git 版本库于 /test/.git/ [root@Jenkins test]# git clone git@192.168.200.61:/home/git/repos/app.git 正克隆到 'app'... remote: Counting objects: 6, done. remote: Compressing objects: 100% (2/2), done. remote: Total 6 (delta 0), reused 0 (delta 0) 接收对象中: 100% (6/6), done. [root@Jenkins test]# ls app [root@Jenkins test]# cd app/ [root@Jenkins app]# ls test [root@Jenkins app]# cat test welcome to yunjisuan yunwei
[root@Jenkins app]# git branch * master [root@Jenkins app]# git branch dev [root@Jenkins app]# git checkout dev 切换到分支 'dev' [root@Jenkins app]# git branch * dev master [root@Jenkins app]# git add * [root@Jenkins app]# git commit -m "开发分支提交" # 位于分支 dev 无文件要提交,干净的工做区 [root@Jenkins app]# git push -u origin dev Total 0 (delta 0), reused 0 (delta 0) To git@192.168.200.61:/home/git/repos/app.git * [new branch] dev -> dev 分支 dev 设置为跟踪来自 origin 的远程分支 dev。
(5)进行jenkins项目代码拉取测试
###3.5 Master-Slave架构
主机名 | IP地址 | 备注 |
---|---|---|
Git | 192.168.200.61 | Git服务器(Jenkins的slave节点) |
Jenkins | 192.168.200.62 | Jenkins服务器 |
jenkins的分布式构建操做,能够经过slave代理节点来执行项目任务; ####3.5.1 添加一个用于链接slave代理节点的SSH证书
####3.5.2 系统管理--->节点管理
特别提示:若是没有设置工具位置--->jdk ,那么jenkins会默认去/var/lib/jenkins/jdk下找java命令 ,若是找不到代理就会链接不上
####3.5.3 slave节点安装java环境
#解压安装jdk [root@Git ~]# tar xf jdk-8u171-linux-x64.tar.gz -C /usr/local [root@Git ~]# cd /usr/local [root@Git local]# mv jdk1.8.0_171 jdk [root@Git local]# /usr/local/jdk/bin/java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode) #配置java环境 [root@Git ~]# sed -i.org '$a export JAVA_HOME=/usr/local/jdk/' /etc/profile [root@Git ~]# sed -i.org '$a export PATH=$PATH:$JAVA_HOME/bin' /etc/profile [root@Git ~]# sed -i.org '$a export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar' /etc/profile [root@Git ~]# tail -3 /etc/profile export JAVA_HOME=/usr/local/jdk/ export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar [root@Git ~]# source /etc/profile [root@Git ~]# java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
####3.5.4 启动slave节点代理程序
####3.5.5 查看slave节点启动日志
####3.5.6 强制让项目A-Web01运行在slave1节点上,并运行项目
####3.5.7 查看A-WebA的构建日志
[root@Git ~]# cd /var/lib/jenkins/workspace/ [root@Git workspace]# ls A-web01 A-web01@tmp [root@Git workspace]# cat A-web01/test welcome to yunjisuan yunwei [root@Git workspace]# hostname -I 192.168.200.61