Linux服务器Jenkins自动化部署教程
一、环境准备1. 安装JDK利用yum脚手架工具,查询jdk版本yum -y list java*使用以下指令安装JDK。带“-devel”的是JDK,不带的是jre。==yum install java-1.8.0-openjdk-devel.x86_64==安装完成,使用 java -version 命令查看是否安装成功。安装位置 /usr/lib/jvm2.安装Jekins这里推荐使用yum
写在前面
最新的jenkins需要JDK11及以上版本,如果继续用JDK8,则建议直接本地安装jenkins
https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/
下载完成复制到/home/apps/jenkins,位置随意
rpm -ivh jenkins-2.346-1.1.noarch.rpm
- 给默认生成的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
- 使用systemctl启动,以前的老配置文件是不管用的,需要修改启动文件
vi /usr/lib/systemd/system/jenkins.service
,设置User=root,Group=root,端口号根据自己需要修改 - 修改完成后启动jenkins
systemctl daemon-reload
启动
systemctl start jenkins
停止
systemctl stop jenkins
加入开机启动
systemctl enable jenkins
一、环境准备
1. 安装JDK
- 利用yum脚手架工具,查询jdk版本
yum -y list java*
- 使用以下指令安装JDK。带“-devel”的是JDK,不带的是jre。
yum install java-1.8.0-openjdk-devel.x86_64
- 安装完成,使用
java -version
命令查看是否安装成功。 - 安装位置
/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
补充:
- 在安装时出现了以下问题,当我们使用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
- 出现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
3、Jenkins安装好后,我们还需要做以下的配置修改:
- 默认情况是Jenkins是使用Jenkins用户启动的,但这个用户在默认情况下系统并没有赋予权限,因此我们将启动用户修改为root
- Jenkins默认端口是8080,这个跟tomcat的默认端口冲突,我们也修改一下默认端口
- 进入Jekins配置文件
vi /etc/sysconfig/jenkins
找到图中位置,分别修改为root、8888(端口根据自己情况设置,服务器记得修改安全组放开对应端口)
4、修改完成,启动Jenkins service jenkins start
三、Jenkins配置
-
安装完成后,在浏览器打开xxx:8888,即可进入Jenkins,使用指令
tail /var/lib/jenkins/secrets/initialAdminPassword
获取密码,填入并continue。 -
跳过插件安装
因为Jenkins插件需要连接默认官网下载,速度非常慢,而且经过会失败,所以我们暂时先跳过插件安装
-
添加一个管理员账户,并进入Jenkins后台
-
开始使用Jenkins
四、Jenkins插件管理
Jenkins本身不提供很多功能,我们可以通过使用插件来满足我们的使用。例如从Gitlab拉取代码,使用Maven构建项目等功能需要依靠插件完成。接下来演示如何下载插件。
1. 修改Jenkins插件下载地址
Jenkins国外官方插件地址下载速度非常慢,所以可以修改为国内插件地址:
Jenkins->Manage Jenkins->Manage Plugins,点击Available
这样做是为了把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
2.本地化语言(中文):
如图选择
在available中搜索Localization: Chinese (Simplified)、Locale,分别安装
选中左边框框,点击不重启安装按钮,进入以下页面(仅作为示例),等待如图所示信息,即按照成功。
按照如下设置即可
比较完美的汉化
3. Jenkins凭证管理
安装Credentials Binding插件
要在Jenkins使用凭证管理功能,需要安装Credentials Binding插件
我在安装过程中,SSH Credentials报错,然后到主页面,提示我jenkins升级,我就升级了,等升级完成就安装好了
可以添加的凭证有5种:
- 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并安装
-
CentOS7上安装Git工具:
yum install git -y 安装
git --version 安装后查看版本
4. 关联云端代码
(1)用户密码类型
1)创建凭证
Jenkins->凭证->系统->全局凭证->添加凭证
2)测试凭证是否可用
创建一个FreeStyle项目:新建Item->FreeStyle Project->确定
在源码管理中,填入仓库地址并选择刚刚配置的凭据
保存后,点击“立即构建”。
发现已经看到gitee上的代码了,说明已经成功。
查看/var/lib/jenkins/workspace/目录,可以发现已存在新建的工程
(2)SSH密钥类型
SSH免密登录示意图
-
使用服务器的root用户生成公钥和私钥
ssh-keygen -t rsa
在/root/.ssh/目录保存了公钥和使用
id_rsa:私钥文件
id_rsa.pub:公钥文件 -
把生成的公钥放在Gitee中
在gitee账号-设置-SSH公钥
复制刚才id_rsa.pub文件的内容到这里,点击确定。
-
在Jenkins中添加凭证,配置私钥
在Jenkins添加一个新的凭证,类型为"SSH Username with private key",把刚才生成私有文件内容复制过来。
注意
如果刚刚只设置了一种凭据类型,Username with password。则需要在系统管理-凭据配置,勾选SSH Username with private key。
再在系统管理-Manage Credentials中添加凭据
跟上一个方法一样,建立新任务MyTest2,配置后,立即构建。
注意: 使用gitee的SSH仓库地址
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,配置如下:
Jenkins->系统管理->全局工具配置->Maven->新增Maven,配置如下:
添加Jenkins全局变量
Jenkins->系统管理->系统配置->全局属性,添加三个全局变量
JAVA_HOME、M2_HOME、PATH+EXTRA
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/
<localRepository>/root/repo/</localRepository>
添加阿里云私服地址:
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>centra\l</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
测试Maven是否配置成功
使用之前的测试项目,修改配置
保存后,立即构建,如果最终成功打成war包,说明配置生效
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了
配置Tomcat用户角色权限
默认情况下Tomcat是没有配置用户角色权限的
但是,后续Jenkins部署项目到Tomcat服务器,需要用到Tomcat的用户,所以修改tomcat以下配置,添加用户及权限
vim /opt/tomcat/conf/tomcat-users.xml
用户和密码都是:tomcat
注意:为了能够刚才配置的用户登录到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,看到以下页面代表成功了。
五、Jenkins构建Maven项目
1. Jenkins项目构建类型(1)-Jenkins构建的项目类型介绍
Jenkins中自动构建项目的类型有很多,常用的有以下三种:
- 自由风格软件项目(FreeStyle Project)
- Maven项目(Maven Project)
- 流水线项目(Pipeline Project)
每种类型的构建其实都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别,在实际开发中可以根据自己的需求和习惯来选择。(PS:个人推荐使用流水线类型,因为灵活度非常高)
2. Jenkins项目构建类型(2)-自由风格项目构建
下面演示创建一个自由风格项目来完成项目的集成过程:
拉取代码->编译->打包->部署
拉取代码
与之前一样,新建工程,配置Git信息
echo "开始编译和打包"
mvn clean package
echo "编译和打包结束"
立即构建,查看控制台,成功
部署
把项目部署到远程的Tomcat里面
-
安装
Deploy to container
插件
Jenkins本身无法实现远程部署到Tomcat的功能,需要安装Deploy to container插件实现
-
添加Tomcat用户凭证
在系统管理-Manage Credentials里面添加,和之前的一样
-
添加构建后操作
回到我的视图,选择刚才的项目,点击配置
立即构建
3. Jenkins项目构建类型(3)-Maven项目构建
- 安装Maven Integration插件
- 创建Maven项目
- 配置项目
拉取代码和远程部署的过程和自由风格项目一样,只是"构建"部分不同
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->可选插件
安装插件后,创建项目的时候多了“流水线”类型
Pipeline语法快速入门
1)Declarative声明式-Pipeline创建项目
创建流水线项目,选择HelloWorld模板
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 '项目部署'
}
}
}
}
点击构建,可以看到整个构建过程
2)Scripted Pipeline脚本式-Pipeline
创建项目,这次选择"Scripted Pipeline"
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:
'git@192.168.66.100: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'
}
}
}
}
待更新…
更多推荐
所有评论(0)