Linux服务器Jenkins自动化部署教程

写在前面

最新的jenkins需要JDK11及以上版本,如果继续用JDK8,则建议直接本地安装jenkins
https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/
下载完成复制到/home/apps/jenkins,位置随意

  1. rpm -ivh jenkins-2.346-1.1.noarch.rpm
  2. 给默认生成的Jenkins的配置文件赋予读写权限

chmod -R 777 /var/lib/jenkins
chmod -R 777 /var/cache/jenkins
chmod -R 777 /var/log/jenkins
#或
chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins

  1. 使用systemctl启动,以前的老配置文件是不管用的,需要修改启动文件vi /usr/lib/systemd/system/jenkins.service,设置User=root,Group=root,端口号根据自己需要修改
  2. 修改完成后启动jenkins
    systemctl daemon-reload
    启动
    systemctl start jenkins
    停止
    systemctl stop jenkins
    加入开机启动
    systemctl enable jenkins

一、环境准备

1. 安装JDK

  1. 利用yum脚手架工具,查询jdk版本
yum -y list java*
  1. 使用以下指令安装JDK。带“-devel”的是JDK,不带的是jre。
yum install java-1.8.0-openjdk-devel.x86_64
  1. 安装完成,使用 java -version 命令查看是否安装成功。
  2. 安装位置 /usr/lib/jvm

二、安装Jenkins

这里推荐使用yum方式安装Jenkins,最简单方便。

1、yum的repos中默认是没有Jenkins的,需要先将Jenkins存储库添加到yum repos,分别执行以下指令

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

在这里插入图片描述
补充:

  1. 在安装时出现了以下问题,当我们使用wget命令下载不安全的https 域名下的内容时会提示如下内容:

ERROR: cannot verify pkg.jenkins.io’s certificate, issued by ‘/C=US/O=Let’s Encrypt/CN=R3’:
Issued certificate has expired.
To connect to pkg.jenkins.io insecurely, use `–no-check-certificate’.

修复方法:运行一下sudo yum install -y ca-certificates

  1. 出现Public key for jenkins-2.387.2-1.1.noarch.rpm is not installed类似的问题,是因为存储库签名密钥has just changed。将rpm --import修复为rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key即可

2、yum安装Jenkins
出现提示是否下载的时候输入y并回车

yum install jenkins

Linux服务器Jenkins自动化部署教程_第1张图片
3、Jenkins安装好后,我们还需要做以下的配置修改:

  • 默认情况是Jenkins是使用Jenkins用户启动的,但这个用户在默认情况下系统并没有赋予权限,因此我们将启动用户修改为root
  • Jenkins默认端口是8080,这个跟tomcat的默认端口冲突,我们也修改一下默认端口
  1. 进入Jekins配置文件vi /etc/sysconfig/jenkins
    Linux服务器Jenkins自动化部署教程_第2张图片

找到图中位置,分别修改为root、8888(端口根据自己情况设置,服务器记得修改安全组放开对应端口

4、修改完成,启动Jenkins service jenkins start
在这里插入图片描述

三、Jenkins配置

  1. 安装完成后,在浏览器打开xxx:8888,即可进入Jenkins,使用指令
    tail /var/lib/jenkins/secrets/initialAdminPassword 获取密码,填入并continue。

  2. 跳过插件安装
    因为Jenkins插件需要连接默认官网下载,速度非常慢,而且经过会失败,所以我们暂时先跳过插件安装
    Linux服务器Jenkins自动化部署教程_第3张图片
    Linux服务器Jenkins自动化部署教程_第4张图片

  3. 添加一个管理员账户,并进入Jenkins后台
    Linux服务器Jenkins自动化部署教程_第5张图片
    Linux服务器Jenkins自动化部署教程_第6张图片

  4. 开始使用Jenkins
    Linux服务器Jenkins自动化部署教程_第7张图片

四、Jenkins插件管理

Jenkins本身不提供很多功能,我们可以通过使用插件来满足我们的使用。例如从Gitlab拉取代码,使用Maven构建项目等功能需要依靠插件完成。接下来演示如何下载插件。

1. 修改Jenkins插件下载地址

Jenkins国外官方插件地址下载速度非常慢,所以可以修改为国内插件地址:

Jenkins->Manage Jenkins->Manage Plugins,点击Available
Linux服务器Jenkins自动化部署教程_第8张图片
这样做是为了把Jenkins官方的插件列表下载到本地,接着修改地址文件,替换为国内插件地址。

依次执行以下指令:

cd /var/lib/jenkins/updates

sed -i 's/http:\/\/updates.jenkinsci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

最后,Manage Plugins点击Advanced,把Update Site改为国内插件下载地址。

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

Linux服务器Jenkins自动化部署教程_第9张图片

2.本地化语言(中文):

如图选择
Linux服务器Jenkins自动化部署教程_第10张图片
在available中搜索Localization: Chinese (Simplified)、Locale,分别安装
Linux服务器Jenkins自动化部署教程_第11张图片

选中左边框框,点击不重启安装按钮,进入以下页面(仅作为示例),等待如图所示信息,即按照成功。
Linux服务器Jenkins自动化部署教程_第12张图片
按照如下设置即可
Linux服务器Jenkins自动化部署教程_第13张图片
比较完美的汉化
Linux服务器Jenkins自动化部署教程_第14张图片

3. Jenkins凭证管理

安装Credentials Binding插件

要在Jenkins使用凭证管理功能,需要安装Credentials Binding插件
Linux服务器Jenkins自动化部署教程_第15张图片

我在安装过程中,SSH Credentials报错,然后到主页面,提示我jenkins升级,我就升级了,等升级完成就安装好了

Linux服务器Jenkins自动化部署教程_第16张图片
可以添加的凭证有5种:
Linux服务器Jenkins自动化部署教程_第17张图片

  • Username with password:用户名和密码
  • SSH Username with private key: 使用SSH用户和密钥
  • Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的Secret file就会被删除。
  • Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
  • Certificate:通过上传证书文件的方式

常用的凭证类型有:Username with password(用户密码)SSH Username with private key(SSH 密钥)

接下来以使用Git工具到Gitee拉取项目源码为例,演示Jenkins的如何管理Gitee的凭证。

安装Git插件和Git工具

为了让Jenkins支持从Gitee拉取源码,需要安装Git插件以及在CentOS7上安装Git工具。

  • Git插件安装:
    插件中搜索Git并安装
    Linux服务器Jenkins自动化部署教程_第18张图片

  • CentOS7上安装Git工具:

yum install git -y  安装
git --version    安装后查看版本

4. 关联云端代码

(1)用户密码类型

1)创建凭证
Jenkins->凭证->系统->全局凭证->添加凭证
Linux服务器Jenkins自动化部署教程_第19张图片

Linux服务器Jenkins自动化部署教程_第20张图片
2)测试凭证是否可用
创建一个FreeStyle项目:新建Item->FreeStyle Project->确定
Linux服务器Jenkins自动化部署教程_第21张图片
在源码管理中,填入仓库地址并选择刚刚配置的凭据
Linux服务器Jenkins自动化部署教程_第22张图片
保存后,点击“立即构建”。
Linux服务器Jenkins自动化部署教程_第23张图片
发现已经看到gitee上的代码了,说明已经成功。
Linux服务器Jenkins自动化部署教程_第24张图片
查看/var/lib/jenkins/workspace/目录,可以发现已存在新建的工程
Linux服务器Jenkins自动化部署教程_第25张图片

(2)SSH密钥类型

SSH免密登录示意图
Linux服务器Jenkins自动化部署教程_第26张图片

  1. 使用服务器的root用户生成公钥和私钥

    ssh-keygen -t rsa

    在/root/.ssh/目录保存了公钥和使用
    Linux服务器Jenkins自动化部署教程_第27张图片
    id_rsa:私钥文件
    id_rsa.pub:公钥文件

  2. 把生成的公钥放在Gitee中

    在gitee账号-设置-SSH公钥
    复制刚才id_rsa.pub文件的内容到这里,点击确定。
    Linux服务器Jenkins自动化部署教程_第28张图片

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

    在Jenkins添加一个新的凭证,类型为"SSH Username with private key",把刚才生成私有文件内容复制过来。
    Linux服务器Jenkins自动化部署教程_第29张图片

注意

如果刚刚只设置了一种凭据类型,Username with password。则需要在系统管理-凭据配置,勾选SSH Username with private key。
Linux服务器Jenkins自动化部署教程_第30张图片
再在系统管理-Manage Credentials中添加凭据
Linux服务器Jenkins自动化部署教程_第31张图片

跟上一个方法一样,建立新任务MyTest2,配置后,立即构建。

注意: 使用gitee的SSH仓库地址
Linux服务器Jenkins自动化部署教程_第32张图片

5. Maven安装和配置

在Jenkins集成服务器上,我们需要安装Maven来编译和打包项目。

安装Maven

先上传Maven软件到centOS服务器上

tar -xzf apache-maven-3.8.1-bin.tar.gz  解压
mkdir -p /opt/maven               创建目录
mv apache-maven-3.8.1/* /opt/maven   移动文件

配置环境变量

vi /etc/profile

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk 
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

source /etc/profile   配置生效
mvn -v          查找Maven版本

全局工具配置关联JDK和Maven

Jenkins->系统管理->全局工具配置->JDK->新增JDK,配置如下:
Linux服务器Jenkins自动化部署教程_第33张图片

Jenkins->系统管理->全局工具配置->Maven->新增Maven,配置如下:
Linux服务器Jenkins自动化部署教程_第34张图片

添加Jenkins全局变量

Jenkins->系统管理->系统配置->全局属性,添加三个全局变量

Linux服务器Jenkins自动化部署教程_第35张图片

JAVA_HOME、M2_HOME、PATH+EXTRA
Linux服务器Jenkins自动化部署教程_第36张图片

JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk
M2_HOME /opt/maven
PATH+EXTRA $M2_HOME/bin

修改Maven的settings.xml

mkdir /root/repo 创建本地仓库目录
vim /opt/maven/conf/settings.xml

本地仓库改为:/root/repo/

/root/repo/

添加阿里云私服地址:



    nexus-aliyun
    centra\l
    Nexus aliyun
    http://maven.aliyun.com/nexus/content/groups/public

测试Maven是否配置成功

使用之前的测试项目,修改配置
Linux服务器Jenkins自动化部署教程_第37张图片
在这里插入图片描述

保存后,立即构建,如果最终成功打成war包,说明配置生效
Linux服务器Jenkins自动化部署教程_第38张图片
Tomcat安装和配置

安装Tomcat8.5

把Tomcat压缩包上传到centOS服务器

yum install java-1.8.0-openjdk* -y     安装JDK(已完成,跳过)
tar -xzf apache-tomcat-8.5.65.tar.gz    解压
mkdir -p /opt/tomcat           创建目录
mv apache-tomcat-8.5.65/* /opt/tomcat/  移动文件
/opt/tomcat/bin/startup.sh        启动tomcat

注意:服务器已经关闭了防火墙,所以可以直接访问Tomcat了

Linux服务器Jenkins自动化部署教程_第39张图片
配置Tomcat用户角色权限

默认情况下Tomcat是没有配置用户角色权限的
Linux服务器Jenkins自动化部署教程_第40张图片
Linux服务器Jenkins自动化部署教程_第41张图片
但是,后续Jenkins部署项目到Tomcat服务器,需要用到Tomcat的用户,所以修改tomcat以下配置,添加用户及权限

vim /opt/tomcat/conf/tomcat-users.xml

用户和密码都是:tomcat
Linux服务器Jenkins自动化部署教程_第42张图片

注意:为了能够刚才配置的用户登录到Tomcat,还需要修改以下配置

vim /opt/tomcat/webapps/manager/META-INF/context.xml

把下面这行注释掉即可!
在这里插入图片描述
重启Tomcat,访问测试

/opt/tomcat/bin/shutdown.sh 停止
/opt/tomcat/bin/startup.sh 启动

访问: http://xxxx:8080/manager/html ,输入tomcat和tomcat,看到以下页面代表成功了。
Linux服务器Jenkins自动化部署教程_第43张图片

五、Jenkins构建Maven项目

1. Jenkins项目构建类型(1)-Jenkins构建的项目类型介绍

Jenkins中自动构建项目的类型有很多,常用的有以下三种:

  • 自由风格软件项目(FreeStyle Project)
  • Maven项目(Maven Project)
  • 流水线项目(Pipeline Project)

每种类型的构建其实都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别,在实际开发中可以根据自己的需求和习惯来选择。(PS:个人推荐使用流水线类型,因为灵活度非常高)

2. Jenkins项目构建类型(2)-自由风格项目构建

下面演示创建一个自由风格项目来完成项目的集成过程:

拉取代码->编译->打包->部署

拉取代码
与之前一样,新建工程,配置Git信息
Linux服务器Jenkins自动化部署教程_第44张图片
Linux服务器Jenkins自动化部署教程_第45张图片
Linux服务器Jenkins自动化部署教程_第46张图片

echo "开始编译和打包"
mvn clean package
echo "编译和打包结束"

立即构建,查看控制台,成功
Linux服务器Jenkins自动化部署教程_第47张图片
部署

把项目部署到远程的Tomcat里面

  1. 安装 Deploy to container插件
    Jenkins本身无法实现远程部署到Tomcat的功能,需要安装Deploy to container插件实现
    Linux服务器Jenkins自动化部署教程_第48张图片

  2. 添加Tomcat用户凭证
    在系统管理-Manage Credentials里面添加,和之前的一样
    Linux服务器Jenkins自动化部署教程_第49张图片

  3. 添加构建后操作
    回到我的视图,选择刚才的项目,点击配置
    Linux服务器Jenkins自动化部署教程_第50张图片
    Linux服务器Jenkins自动化部署教程_第51张图片
    立即构建

3. Jenkins项目构建类型(3)-Maven项目构建

  1. 安装Maven Integration插件
    Linux服务器Jenkins自动化部署教程_第52张图片
  2. 创建Maven项目
    Linux服务器Jenkins自动化部署教程_第53张图片
  3. 配置项目
    拉取代码和远程部署的过程和自由风格项目一样,只是"构建"部分不同
    Linux服务器Jenkins自动化部署教程_第54张图片

4. Jenkins项目构建类型(4)-Pipeline流水线项目构建(*)

Pipeline简介
1. 概念

Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。

2. 使用Pipeline有以下好处(来自翻译自官方文档):

代码:Pipeline以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其传送流程。

持久:无论是计划内的还是计划外的服务器重启,Pipeline都是可恢复的。

可停止:Pipeline可接收交互式输入,以确定是否继续执行Pipeline。

多功能:Pipeline支持现实世界中复杂的持续交付要求。它支持fork/join、循环执行,并行执行任务的功能。

可扩展:Pipeline插件支持其DSL的自定义扩展 ,以及与其他插件集成的多个选项。

3. 如何创建 Jenkins Pipeline呢?

Pipeline 脚本是由 Groovy 语言实现的,但是我们没必要单独去学习 Groovy

Pipeline 支持两种语法:Declarative(声明式)和 Scripted Pipeline(脚本式)语法

Pipeline 也有两种创建方法:可以直接在 Jenkins 的 Web UI 界面中输入脚本;也可以通过创建一个 Jenkinsfile 脚本文件放入项目源码库中(一般我们都推荐在 Jenkins 中直接从源代码控制(SCM)中直接载入 Jenkinsfile Pipeline 这种方法)。

安装Pipeline插件

Manage Jenkins->Manage Plugins->可选插件
Linux服务器Jenkins自动化部署教程_第55张图片
安装插件后,创建项目的时候多了“流水线”类型
Linux服务器Jenkins自动化部署教程_第56张图片

Pipeline语法快速入门

1)Declarative声明式-Pipeline创建项目

创建流水线项目,选择HelloWorld模板
Linux服务器Jenkins自动化部署教程_第57张图片

pipeline {
  agent any
  stages {
     stage('Hello') {
        steps {
           echo 'Hello World'
        }
    }
  }
}
  • stages:代表整个流水线的所有执行阶段。通常stages只有1个,里面包含多个stage

  • stage:代表流水线中的某个阶段,可能出现n个。一般分为拉取代码,编译构建,部署等阶段。

  • steps:代表一个阶段内需要执行的逻辑。steps里面是shell脚本,git拉取代码,ssh远程发布等任意内容。

编写一个简单声明式Pipeline:

pipeline {
  agent any
  
  stages {
     stage('拉取代码') {
        steps {
           echo '拉取代码'
        }
    }
     stage('编译构建') {
        steps {
           echo '编译构建'
        }
    }
     stage('项目部署') {
        steps {
           echo '项目部署'
        }
    }
  }
}

点击构建,可以看到整个构建过程

Linux服务器Jenkins自动化部署教程_第58张图片

2)Scripted Pipeline脚本式-Pipeline

创建项目,这次选择"Scripted Pipeline"

Linux服务器Jenkins自动化部署教程_第59张图片

node {
  def mvnHome
  
  stage('Preparation') { // for display purposes
   
  }
  
  stage('Build') {
   
  }
  
  stage('Results') {
   
  }
}
  • Node:节点,一个 Node 就是一个 Jenkins 节点,Master 或者 Agent,是执行 Step 的具体运行环境,后续讲到Jenkins的Master-Slave架构的时候用到。
  • Stage:阶段,一个 Pipeline 可以划分为若干个 Stage,每个 Stage 代表一组操作,比如:Build、Test、Deploy,Stage 是一个逻辑分组的概念。
  • Step:步骤,Step 是最基本的操作单元,可以是打印一句话,也可以是构建一个 Docker 镜像,由各类 Jenkins 插件提供,比如命令:sh ‘make’,就相当于我们平时 shell 终端中执行 make 命令一样。

编写一个简单的脚本式Pipeline

node {
  def mvnHome
  
  stage('拉取代码') { // for display purposes
     echo '拉取代码'
  }
  stage('编译构建') {
     echo '编译构建'
  }
  stage('项目部署') {
     echo '项目部署'
  }
}

构建结果和声明式一样

pipeline {
  agent any
  
  stages {
     stage('拉取代码') {
        steps {
           checkout([$class: 'GitSCM', branches: [[name: '*/master']],
doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [],
userRemoteConfigs: [[credentialsId: '68f2087f-a034-4d39-a9ff-1f776dd3dfa8', url:
'[email protected]:itheima_group/web_demo.git']]])
        }
    }
     stage('编译构建') {
        steps {
           sh label: '', script: 'mvn clean package'
        }
    }
     stage('项目部署') {
        steps {
           deploy adapters: [tomcat8(credentialsId: 'afc43e5e-4a4e-4de6-984fb1d5a254e434', path: '', url: 'http://192.168.66.102:8080')], contextPath: null,
war: 'target/*.war'
        }
    }
  }
}

待更新…

你可能感兴趣的:(java成长之路,运维,jenkins)