一、DevOps介绍

DevOps 一词的来自于 Development 和 Operations 的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。DevOps 其实包含了三个部分:开发、测试和运维。换句话 DevOps 希望做到的是软件产品交付过程中IT工具链的打通,使得各个团队减少时间损耗,更加高效地协同工作。

(1)持续集成

  持续集成是一个将集成提前到开发周期的实践方式。让构建、测试和集成代码变更集成经常反复发生。

 通俗来说,持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_git

(2)持续交付

  持续交付意味着每次修改、整合和构建代码时,也同时在类似于生产环境中测试代码。

持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的 Staging 环境中更多的测试。如果代码没有问题,可以继续部署到生产环境中。

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_自动化_02

(3)持续部署

持续交付即在持续交付之后,将在测试机上没有问题的代码部署到真实服务器上。再次基础上自动化。

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_devops_03

 二、Jenkins

(1)介绍

  Jenkins 是一个功能强大的应用程序,允许持续集成和持续交付项目。免费获取,可以处理任何类型的构建或持续集成。

  它可以持续、自动的构建/测试软件项目。且监控软件开发流程、快速问题定位即处理,提高开发效率。

(2)安装

内存不少于256M、不低于1G磁盘、JDK版本大于等于8

   它有三种安装办法:yum安装、war包安装、docker形式安装。

   ①、yum安装

     1、关闭防火墙(云主机中注意安全组)

注:也可以打开,需要在其中打开Jenkins的访问端口。安全组中同理

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_devops_04

    2、安装JDK

    建议:建议在安装jdk时选用压缩包安装以及jdk8版本。具体原因在之后的配置中有解释。

但在yum安装中会出现软连接过多,最终会在全局变量中出现问题。

 <1> yum安装

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_devops_05

代码集合


[root@jenkins ~]# yum install jdk-1.8.0-openjdk -y

 <2>压缩包安装

       下载安装包

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_devops_06

    解压并进行后续操作

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_git_07

 jdk安装成功

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_自动化_08

代码集合

[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源

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_jenkins_09

  导入公钥

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_自动化_10

 通过yum安装jenkins

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_自动化_11

启动:

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_自动化_12

出现错误:

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.

 解决方案:

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_自动化_13

启动并设为开机自启

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_自动化_14

 

代码集合

[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 

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_tomcat_15

   ②、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: 

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_tomcat_16

   ③、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

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_自动化_17

(3)配置

   ①、查看安装目录

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_自动化_18

 ②、进入之后的第一个操作

      选择插件安装

     因为Jenkins插件需要连接默认官网下载,速度非常慢,而且经过会失败,所以我们暂时先跳过插件安装

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_git_19

  创建一个用户用来登录

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_jenkins_20

 配置访问网址

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_devops_21

 ③、替换官方源为国内源,加速

服务器端操作

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_jenkins_22

[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  如下图操作:

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_jenkins_23

   

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_jenkins_24

修改后,使用submit进行保存之后进行重启。 重启方法在⑤。

④、汉化

Jenkins->Manage Jenkins->Manage Plugins,点击Available,搜索"Chinese"

下载成功

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_devops_25

 ⑤、重启

配置国内源和汉化之后,需要进行重启,像汉化就可以直接重启,但其他不可以。

重启方法一、服务器重启

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_tomcat_26

 重启方法二:网页端重启

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_自动化_27

⑥、用户权限管理

我们可以利用Role-based Authorization Strategy 插件来管理Jenkins用户权限。安装Role-based Authorization Strategy插件

系统管理---》插件管理---》可选插件---》输入Role-based Authorization Strategy---》选择并进行安装

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_自动化_28

下载完成后进行配置使用

系统管理---》全局安全配置---》授权策略---》选择并保存

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_jenkins_29

 下面是一个实验,用来验证或者展示关于用户权限管理。

   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

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_git_30

 

project1:该角色为项目角色。使用正则表达式绑定"project1.*",意思是只能操作itcast开头的项目。

project2:该角色为项目角色。使用正则表达式绑定"project2.*",意思是只能操作itcast开头的项目。

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_devops_31

记得保存!!!! 

   2、创建用户

     系统管理---》管理用户---》新建用户

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_devops_32

   3、为用户分配角色

   系统管理---》Manage and Assign Roles---》Assign Roles 

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_git_33

记得保存!!! 

   4、验证

利用admin账户新建两个项目 project123和project258

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_git_34

登录COCO用户,只可以看到以project1开头的项目

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_git_35

 登录PRO用户,只可以看到以project2开头的项目

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_git_36

⑦、git和maven安装与配置

   1、安装git

     安装依赖

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_devops_37

   安装git

 

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_devops_38

  验证安装成功 

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_tomcat_39

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_jenkins_40

命令集合

#安装依赖
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(同其他插件下载的方式)

 

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_git_41

记得保存!!!! 

  2、安装maven 

  下载安装包

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_tomcat_42

安装成功! 

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_自动化_43

命令合集

#下载安装包
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 

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_devops_44

记得保存!!!! 

⑧、 一个关于jdk的坑

系统管理---》全局工具配置---》JDK配置时

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_git_45

 出现上述问题是因为利用yum安装的jdk,但是在配置中就会出现不是jdk目录,实际中也就是jdk的目录。

解决方法:删除yum安装的jdk,利用压缩包重新安装jdk。(这是一个坑,暂时还没找到解决方法,麻烦各位大佬指点!)

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_git_46

重新安装之后

 

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_自动化_47

记得保存!!!!  

 ⑨、凭证管理

     凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便Jenkins可以和这些第三方的应用进行交互。需要安装Credentials Binding插件来实现以上功能。

   系统管理---》插件管理---》可选插件---》输入Credentials Binding---》选择并进行安装

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_jenkins_48

安装完成后就可以添加凭证了,具体打开位置如下:

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_git_49

 添加凭证

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_git_50

下面是一个和Gitee相连的例子

首先在承载jenkins的主机上生成SSH密钥

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_tomcat_51

 把生成的公钥放在Gitee中

个人主页---》个人设置---》SSH公钥

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_tomcat_52

在Jenkins中添加凭证,配置私钥

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_tomcat_53

 测试是否可用

新建一个任务,拉取Gitee的数据,是否可以构建成功!

新建任务---》输入任务名称---》构建一个自由风格的软件项目--》源码管理

未选择凭证 

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_git_54

选择凭证

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_devops_55

查看控制台输出:

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_git_56

立即构建拉取代码成功!!! 

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_自动化_57

 凭证配置成功!!

⑩、又一个坑,关于jdk版本

 由于之前利用的是jdk17版本,可能是由于版本太超前,或者17版本不稳定,所以配置完git/maven之后重启导致了重启失败。所以之后我又换成了jdk8版本,目前这个版本是最稳定的。具体原因我也没有找到,提示说是因为某种凭证没有处理好!

(4)部署一个自由风格的项目

①、架构介绍

以下是一个关于jenkins部署的例子,具体架构图会在下图中展示

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_git_58

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.

安装成功! 

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_devops_59

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

 注释掉如下图所示代码:

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_jenkins_60

重新启动

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_git_61

 刷新点击manager webapp

输入tomcat/tomcat

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_jenkins_62

tomcat部署成功!!! 

③、jenkins上进行构建并部署到tomcat上

 下面是一个例子,构建一个自由风格的项目部署到tomcat项目上。具体步骤:拉取代码->编译->打包->部署

 以一个Gitee上优秀的项目为例子:

网址:一个优秀的例子

git:git@gitee.com:freebytes/idea-jsp-demo.git

一个提示:

需要在jenkins中配置变量。系统管理---》系统配置----》全局属性

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_git_63

否则会在构建过程中找不到打包命令! 

1、创建项目

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_jenkins_64

2、配置源码管理

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_devops_65

3、编译打包

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_自动化_66

  4、配置之后的部署 

 安装 Deploy to container插件

  Jenkins本身无法实现远程部署到Tomcat的功能,需要安装Deploy to container插件实现。插件更新同之前的步骤。

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_tomcat_67

 5、添加部署

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_tomcat_68

 6、点击“立即构建”

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_自动化_69

构建成功

7、访问成功!!!

Java Azure blob storage 上传到指定的目录下 azure devops jenkins_自动化_70

 至此,一个简单的自由风格的软件项目构建完成!