最新的jenkins需要JDK11及以上版本,如果继续用JDK8,则建议直接本地安装jenkins
https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/
下载完成复制到/home/apps/jenkins,位置随意
rpm -ivh jenkins-2.346-1.1.noarch.rpm
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
vi /usr/lib/systemd/system/jenkins.service
,设置User=root,Group=root,端口号根据自己需要修改systemctl daemon-reload
systemctl start jenkins
systemctl stop jenkins
systemctl enable jenkins
yum -y list java*
yum install java-1.8.0-openjdk-devel.x86_64
java -version
命令查看是否安装成功。/usr/lib/jvm
这里推荐使用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
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
存储库签名密钥has just changed。
将rpm --import修复为rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
即可2、yum安装Jenkins
出现提示是否下载的时候输入y并回车
yum install jenkins
- 默认情况是Jenkins是使用Jenkins用户启动的,但这个用户在默认情况下系统并没有赋予权限,因此我们将启动用户修改为root
- Jenkins默认端口是8080,这个跟tomcat的默认端口冲突,我们也修改一下默认端口
找到图中位置,分别修改为root、8888(端口根据自己情况设置,服务器记得修改安全组放开对应端口)
4、修改完成,启动Jenkins service jenkins start
安装完成后,在浏览器打开xxx:8888,即可进入Jenkins,使用指令
tail /var/lib/jenkins/secrets/initialAdminPassword
获取密码,填入并continue。
Jenkins本身不提供很多功能,我们可以通过使用插件来满足我们的使用。例如从Gitlab拉取代码,使用Maven构建项目等功能需要依靠插件完成。接下来演示如何下载插件。
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
如图选择
在available中搜索Localization: Chinese (Simplified)、Locale,分别安装
选中左边框框,点击不重启安装按钮,进入以下页面(仅作为示例),等待如图所示信息,即按照成功。
按照如下设置即可
比较完美的汉化
要在Jenkins使用凭证管理功能,需要安装Credentials Binding插件
我在安装过程中,SSH Credentials报错,然后到主页面,提示我jenkins升级,我就升级了,等升级完成就安装好了
常用的凭证类型有:Username with password(用户密码)
和SSH Username with private key(SSH 密钥)
接下来以使用Git工具到Gitee拉取项目源码为例,演示Jenkins的如何管理Gitee的凭证。
为了让Jenkins支持从Gitee拉取源码,需要安装Git插件以及在CentOS7上安装Git工具。
yum install git -y 安装
git --version 安装后查看版本
1)创建凭证
Jenkins->凭证->系统->全局凭证->添加凭证
2)测试凭证是否可用
创建一个FreeStyle项目:新建Item->FreeStyle Project->确定
在源码管理中,填入仓库地址并选择刚刚配置的凭据
保存后,点击“立即构建”。
发现已经看到gitee上的代码了,说明已经成功。
查看/var/lib/jenkins/workspace/目录,可以发现已存在新建的工程
使用服务器的root用户生成公钥和私钥
ssh-keygen -t rsa
把生成的公钥放在Gitee中
在Jenkins中添加凭证,配置私钥
在Jenkins添加一个新的凭证,类型为"SSH Username with private key",把刚才生成私有文件内容复制过来。
注意
如果刚刚只设置了一种凭据类型,Username with password。则需要在系统管理-凭据配置,勾选SSH Username with private key。
再在系统管理-Manage Credentials中添加凭据
跟上一个方法一样,建立新任务MyTest2,配置后,立即构建。
在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 /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是否配置成功
保存后,立即构建,如果最终成功打成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是没有配置用户角色权限的
但是,后续Jenkins部署项目到Tomcat服务器,需要用到Tomcat的用户,所以修改tomcat以下配置,添加用户及权限
vim /opt/tomcat/conf/tomcat-users.xml
注意:为了能够刚才配置的用户登录到Tomcat,还需要修改以下配置
vim /opt/tomcat/webapps/manager/META-INF/context.xml
/opt/tomcat/bin/shutdown.sh 停止
/opt/tomcat/bin/startup.sh 启动
访问: http://xxxx:8080/manager/html ,输入tomcat和tomcat,看到以下页面代表成功了。
Jenkins中自动构建项目的类型有很多,常用的有以下三种:
每种类型的构建其实都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别,在实际开发中可以根据自己的需求和习惯来选择。(PS:个人推荐使用流水线类型,因为灵活度非常高)
下面演示创建一个自由风格项目来完成项目的集成过程:
拉取代码->编译->打包->部署
echo "开始编译和打包"
mvn clean package
echo "编译和打包结束"
把项目部署到远程的Tomcat里面
Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。
代码:Pipeline以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其传送流程。
持久:无论是计划内的还是计划外的服务器重启,Pipeline都是可恢复的。
可停止:Pipeline可接收交互式输入,以确定是否继续执行Pipeline。
多功能:Pipeline支持现实世界中复杂的持续交付要求。它支持fork/join、循环执行,并行执行任务的功能。
可扩展:Pipeline插件支持其DSL的自定义扩展 ,以及与其他插件集成的多个选项。
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创建项目
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') {
}
}
编写一个简单的脚本式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'
}
}
}
}
待更新…