一、DevOps介绍
DevOps 一词的来自于 Development 和 Operations 的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。DevOps 其实包含了三个部分:开发、测试和运维。换句话 DevOps 希望做到的是软件产品交付过程中IT工具链的打通,使得各个团队减少时间损耗,更加高效地协同工作。
(1)持续集成
持续集成是一个将集成提前到开发周期的实践方式。让构建、测试和集成代码变更集成经常反复发生。
通俗来说,持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。
(2)持续交付
持续交付意味着每次修改、整合和构建代码时,也同时在类似于生产环境中测试代码。
持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的 Staging 环境中更多的测试。如果代码没有问题,可以继续部署到生产环境中。
(3)持续部署
持续交付即在持续交付之后,将在测试机上没有问题的代码部署到真实服务器上。再次基础上自动化。
二、Jenkins
(1)介绍
Jenkins 是一个功能强大的应用程序,允许持续集成和持续交付项目。免费获取,可以处理任何类型的构建或持续集成。
它可以持续、自动的构建/测试软件项目。且监控软件开发流程、快速问题定位即处理,提高开发效率。
(2)安装
内存不少于256M、不低于1G磁盘、JDK版本大于等于8
它有三种安装办法:yum安装、war包安装、docker形式安装。
①、yum安装
1、关闭防火墙(云主机中注意安全组)
注:也可以打开,需要在其中打开Jenkins的访问端口。安全组中同理
2、安装JDK
建议:建议在安装jdk时选用压缩包安装以及jdk8版本。具体原因在之后的配置中有解释。
但在yum安装中会出现软连接过多,最终会在全局变量中出现问题。
<1> yum安装
代码集合
[root@jenkins ~]# yum install jdk-1.8.0-openjdk -y
<2>压缩包安装
下载安装包
解压并进行后续操作
jdk安装成功
代码集合
[root@jenkins ~]# wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
[root@jenkins ~]# mkdir -p /usr/java/jdk17
[root@jenkins ~]# tar -zxf jdk-17_linux-x64_bin.tar.gz -C /usr/java/jdk17
[root@jenkins ~]# vim /etc/profile
export JAVA_HOME=/usr/java/jdk17/jdk-17.0.1
export PATH=$PATH:$JAVA_HOME/bin
[root@jenkins ~]# source /etc/profile
[root@jenkins java]# java -version
java version "17.0.1" 2021-10-19 LTS
Java(TM) SE Runtime Environment (build 17.0.1+12-LTS-39)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.1+12-LTS-39, mixed mode, sharing)
3、安装Jenkins
添加jenkins源
导入公钥
通过yum安装jenkins
启动:
出现错误:
Oct 28 16:20:52 jenkins jenkins[11559]: Starting Jenkins File "/usr/bin/java" is not executable.
Oct 28 16:20:52 jenkins jenkins[11559]: [FAILED]
Oct 28 16:20:52 jenkins systemd[1]: jenkins.service: control process exited, code=exited status=1
Oct 28 16:20:52 jenkins systemd[1]: Failed to start LSB: Jenkins Automation Server.
解决方案:
启动并设为开机自启
代码集合
[root@jenkins ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo --no-check-certifica
[root@jenkins ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
[root@jenkins ~]# yum makecache && yum install jenkins
[root@jenkins ~]# systemctl start jenkins
[root@jenkins ~]# systemctl status jenkins
[root@jenkins ~]# /sbin/chkconfig on
可访问http://ip:8080
②、war包安装
命令合集
[root@git ~]# yum install -y java-1.8.0-openjdk && mkdir -p /usr/local/jenkins
[root@git ~]# wget -c -O /usr/local/jenkins/jenkins.war http://mirrors.jenkins.io/war-stable/latest/jenkins.war
[root@git ~]# java -jar /usr/local/jenkins/jenkins.war
查看密码
[root@git ~]# cat /root/.jenkins/secrets/initialAdminPassword
可访问http://ip:8080:
③、docker形式安装
命令集合:
#下载并启动docker
[root@git ~]# yum install docker -y && systemctl start docker
[root@git ~]# curl -sSL https://get.daocloud.io/daotools/set_mirroe.sh | sh -s && systemctl restart docker
#查看镜像
[root@git ~]# docker search jenkins
#拉取镜像
[root@git ~]# docker pull jenkins/jenkins:lts
#允许容器
[root@git ~]# docker run -d -p 8080:8080 jenkins/jenkins:lts
82c7fed508827b2be07036beecac0b54ad9b8d1593b53f6e310d08d3fd47ee78
#进入容器
[root@git ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82c7fed50882 jenkins/jenkins:lts "/sbin/tini -- /us..." About a minute ago Up About a minute 0.0.0.0:8080->8080/tcp, 50000/tcp sad_lumiere
[root@git ~]# docker exec -it 82c7fed50882 /bin/bash
#查看密码
jenkins@82c7fed50882:~/secrets$ ls
filepath-filters.d org.jenkinsci.main.modules.instance_identity.InstanceIdentity.KEY
initialAdminPassword slave-to-master-security-kill-switch
jenkins.model.Jenkins.crumbSalt whitelisted-callables.d
master.key
jenkins@82c7fed50882:~/secrets$ cat initialAdminPassword
ebf738ddb6394b87ae6a98fxxxxxxxxx
可访问http://ip:8080
(3)配置
①、查看安装目录
②、进入之后的第一个操作
选择插件安装
因为Jenkins插件需要连接默认官网下载,速度非常慢,而且经过会失败,所以我们暂时先跳过插件安装
创建一个用户用来登录
配置访问网址
③、替换官方源为国内源,加速
服务器端操作
[root@git ~]# sed -i 's/http:\/\/updates.jenkinsci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /var/lib/jenkins/updates/default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' /var/lib/jenkins/updates/default.json
网页上操作
Jenkins->Manage Jenkins->Manage Plugins 如下图操作:
修改后,使用submit进行保存之后进行重启。 重启方法在⑤。
④、汉化
Jenkins->Manage Jenkins->Manage Plugins,点击Available,搜索"Chinese"
下载成功
⑤、重启
配置国内源和汉化之后,需要进行重启,像汉化就可以直接重启,但其他不可以。
重启方法一、服务器重启
重启方法二:网页端重启
⑥、用户权限管理
我们可以利用Role-based Authorization Strategy 插件来管理Jenkins用户权限。安装Role-based Authorization Strategy插件
系统管理---》插件管理---》可选插件---》输入Role-based Authorization Strategy---》选择并进行安装
下载完成后进行配置使用
系统管理---》全局安全配置---》授权策略---》选择并保存
下面是一个实验,用来验证或者展示关于用户权限管理。
1、创建角色
系统管理---》Manage and Assign Roles--->Manage Roles
知识拓展:
Global roles:管理员或者项目高级管理者可以创建一些可以对全局进行操作,权限类似于admin 。新建的用户可以对它的权限进行xi
Item roles :针对于项目的用户,可以对项目进行操作
Node roles:节点相关的权限
角色添加:
newadmin:该角色为全局角色,这个角色需要绑定Overall下面的Read权限,是为了给所有用户绑定最基本的Jenkins访问权限。注意:如果不给后续用户绑定这个角色,会报错误:用户名 is missing the Overall/Read permission
project1:该角色为项目角色。使用正则表达式绑定"project1.*",意思是只能操作itcast开头的项目。
project2:该角色为项目角色。使用正则表达式绑定"project2.*",意思是只能操作itcast开头的项目。
记得保存!!!!
2、创建用户
系统管理---》管理用户---》新建用户
3、为用户分配角色
系统管理---》Manage and Assign Roles---》Assign Roles
记得保存!!!
4、验证
利用admin账户新建两个项目 project123和project258
登录COCO用户,只可以看到以project1开头的项目
登录PRO用户,只可以看到以project2开头的项目
⑦、git和maven安装与配置
1、安装git
安装依赖
安装git
验证安装成功
命令集合
#安装依赖
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel -y
#安装git
yum install git -y
#验证是否安装成功
[root@git ~]# git --version
git version 1.8.3.1
jenkins中关联git
插件中下载git(同其他插件下载的方式)
记得保存!!!!
2、安装maven
下载安装包
安装成功!
命令合集
#下载安装包
wget https://mirrors.bit.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
#创建安装目录以及安装
[root@git ~]# tar -xzf apache-maven-3.5.4-bin.tar.gz
[root@git ~]# ls
apache-maven-3.5.4 apache-maven-3.5.4-bin.tar.gz
[root@git ~]# mkdir -p /opt/maven
[root@git ~]# mv apache-maven-3.5.4/* /opt/maven/
[root@git ~]# ls /opt/maven/
bin boot conf lib LICENSE NOTICE README.txt
[root@git ~]# vi /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64/jre #yum安装的jdk的地址 其他方式安装,使用which java寻找
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
[root@git ~]# source /etc/profile
#验证是否成功
[root@git ~]# mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: /opt/maven
Java version: 1.8.0_312, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.21.3.el7.x86_64", arch: "amd64", family: "unix"
jenkins中关联maven
记得保存!!!!
⑧、 一个关于jdk的坑
系统管理---》全局工具配置---》JDK配置时
出现上述问题是因为利用yum安装的jdk,但是在配置中就会出现不是jdk目录,实际中也就是jdk的目录。
解决方法:删除yum安装的jdk,利用压缩包重新安装jdk。(这是一个坑,暂时还没找到解决方法,麻烦各位大佬指点!)
重新安装之后
记得保存!!!!
⑨、凭证管理
凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便Jenkins可以和这些第三方的应用进行交互。需要安装Credentials Binding插件来实现以上功能。
系统管理---》插件管理---》可选插件---》输入Credentials Binding---》选择并进行安装
安装完成后就可以添加凭证了,具体打开位置如下:
添加凭证
下面是一个和Gitee相连的例子
首先在承载jenkins的主机上生成SSH密钥
把生成的公钥放在Gitee中
个人主页---》个人设置---》SSH公钥
在Jenkins中添加凭证,配置私钥
测试是否可用
新建一个任务,拉取Gitee的数据,是否可以构建成功!
新建任务---》输入任务名称---》构建一个自由风格的软件项目--》源码管理
未选择凭证
选择凭证
查看控制台输出:
立即构建拉取代码成功!!!
凭证配置成功!!
⑩、又一个坑,关于jdk版本
由于之前利用的是jdk17版本,可能是由于版本太超前,或者17版本不稳定,所以配置完git/maven之后重启导致了重启失败。所以之后我又换成了jdk8版本,目前这个版本是最稳定的。具体原因我也没有找到,提示说是因为某种凭证没有处理好!
(4)部署一个自由风格的项目
①、架构介绍
以下是一个关于jenkins部署的例子,具体架构图会在下图中展示
1、开发人员提交代码到代码托管服务器,
2、Jenkins作为持续集成工具,拉取代码到Jenkins中,利用jdk、maven、git等进行代码的编译和打包。
3、最终,将生成的jar包部署到测试环境,测试环境没有问题后,部署到正式运行环境中。
②、tomcat服务器的搭建
1、安装tomcat
注:服务器关闭防火墙或者开放8080端口
命令合集
[root@ecs-fd46 ~]# yum install java-1.8.0-openjdk* -y
[root@ecs-fd46 ~]# tar -xzvf apache-tomcat-8.0.36.tar.gz
[root@ecs-fd46 ~]# mv /root/apache-tomcat-8.0.36/* /opt/tomcat/
[root@ecs-fd46 ~]# /opt/tomcat/bin/startup.sh
Using CATALINA_BASE: /opt/tomcat
Using CATALINA_HOME: /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Tomcat started.
安装成功!
2、配置tomcat用户权限
后续Jenkins部署项目到Tomcat服务器,需要用到Tomcat的用户,所以修改tomcat以下配置,添加用户及权限。
命令合集
[root@ecs-fd46 ~]# vim /opt/tomcat/conf/tomcat-users.xml #插入到<tomcat-users></tomcat-users>之间
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script,tomcat,admin-gui,admin-script"/>
如此设置,用户和密码都是:tomcat。
注意:为了能够刚才配置的用户登录到Tomcat,还需要修改以下配置
vi /opt/tomcat/webapps/manager/META-INF/context.xml
注释掉如下图所示代码:
重新启动
刷新点击manager webapp
输入tomcat/tomcat
tomcat部署成功!!!
③、jenkins上进行构建并部署到tomcat上
下面是一个例子,构建一个自由风格的项目部署到tomcat项目上。具体步骤:拉取代码->编译->打包->部署
以一个Gitee上优秀的项目为例子:
网址:一个优秀的例子
git:git@gitee.com:freebytes/idea-jsp-demo.git
一个提示:
需要在jenkins中配置变量。系统管理---》系统配置----》全局属性
否则会在构建过程中找不到打包命令!
1、创建项目
2、配置源码管理
3、编译打包
4、配置之后的部署
安装 Deploy to container插件
Jenkins本身无法实现远程部署到Tomcat的功能,需要安装Deploy to container插件实现。插件更新同之前的步骤。
5、添加部署
6、点击“立即构建”
构建成功
7、访问成功!!!
至此,一个简单的自由风格的软件项目构建完成!