Jenkins的搭建与使用
简介:Jenkins是一个开源可扩展的,持续集成、交付、部署(软件/代码的编译、打包、部署)工具,由Java开发,它提供了软件开发的持续集成服务,支持主流软件配置管理、配合实现软件配置管理及持续集成功能。
jenkins的优势:
1. 主流的运维开发平台,兼容所有主流开发环境
2. 插件市场可与海量业内主流开发工具实现集成
3. Job为配置单位与日志管理,使运维与开发人员协同工作
4. 权限管理划分不同的Job不同角色
5. 强大的负载均衡功能,保障项目的可靠性
Jenkins介绍
Jenkins是一个开源可扩展的,持续集成、交付、部署(软件/代码的编译、打包、
部署)工具,由Java开发,它提供了软件开发的持续集成服务,支持主流软件配置
管理、配合实现软件配置管理及持续集成功能。
搭建:
1.环境安装
#拉入jdk11包 jdk8只支持老版本jenkins
tar zxvf jdk-11.0.19_linux-x64_bin.tar.gz
mv jdk-11.0.19_linux-x64 jdk-11.0.19
ln -s /usr/local/work/jdk-11.0.19/bin/java /usr/local/bin/
#安装jenkins
#jenkins安装包地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/
#拖入rpm包
rpm -ivh jenkins-2.361.1-1.1.noarch.rpm
yum install -y fontconfig xorg-x11-fonts-Type1 xorg-x11-fonts-misc
#配置jenkins
cat /etc/init.d/jenkins #jenkins启动脚本
vim /etc/sysconfig/jenkins #jenkins的配置文件
JENKINS_HOME="/usr/local/work/jenkins" #自定义jenkins家目录
JENKINS_USER="jenkins" #测试环境可更改为root避免权限问题
JENKINS_PORT="8080" #jenkins启动端口
systemctl start jenkins #启动jenkins
#如果修改完jenkins启动失败可更改#
vim /usr/lib/systemd/system/jenkins.service
User=root #避免权限问题
Group=root #避免权限问题
Environment="JENKINS_PORT=8080”
Environment="JENKINS_HOME=/usr/local/work/jenkins”
systemctl daemon-reload
systemctl start jenkins
#也可能系统缺少字体文件
yum install -y fontconfig xorg-x11-fonts-Type1 xorg-x11-fonts-misc
##访问192.168.11.11:8080
#登录页面查看密码 cat /usr/local/work/jenkins/secrets/initialAdminPassword
#等他安装插件一路下一步即可成功,可进入设置更改密码
#安装插件需要用到的插件有: pipeline Git ParameterVersion Pipeline: Deprecated Groovy LibrariesVersion 本机需安装git
maven下载地址:https://maven.apache.org/download.cgi
#这里使用3.6.1版本
cd /usr/local/work/
tar -zxvf apache-maven-3.6.1-bin.tar.gz
vi /etc/profile
export MAVEN_HOME=/usr/local/apache-maven-3.6.1
export PATH=$MAVEN_HOME/bin:$PATH
source /etc/profile
mvn -v
node下载地址:https://registry.npmmirror.com/binary.html?path=node/
#这里使用14.19.3版本
cd /usr/local/work/
wget https://registry.npmmirror.com/-/binary/node/v14.19.3/node-v14.19.3-linux-x64.tar.gz
tar -zxvf node-v14.19.3-linux-x64.tar.gz
mv node-v14.19.3-linux-x64/ node
ln -s /usr/local/work/node/bin/node /usr/local/bin/
ln -s /usr/local/work/node/bin/npm /usr/local/bin/
创建pipeline
接下来需要写pipeline项目发布脚本
1.首先需要拉取gitlab的代码,在下方点击流水线语法
选择checkout
#在下面生成流水线脚本并复制粘贴,然后进行构建
#然后书写发布的脚本,两台机器需要做免密登录
touch /usr/local/jenkins.sh
chmod +x /usr/local/jenkins.sh
#bin/bash
command=$1
ip=192.168.11.12
url=/usr/local/work/jenkins/workspes/test
function app1()
{
scp -r -P 19022 $url/target/app.jar app@$ip:/home/jjy/work/hz/
shz -p 19022 app@$ip > /dev/null 2>&1 << eeooff
rm -r /usr/local/work/end/app/app.jar
mv /home/app/work/hz/app.jar /usr/local/work/end/app/
sh /usr/local/work/end/app/app.sh restart
eeooff
}
function app2()
{
scp -r -P 19022 $url/target/app2.jar app@$ip:/home/jjy/work/hz/
shz -p 19022 app@$ip > /dev/null 2>&1 << eeooff
rm -r /usr/local/work/end/app2/app.jar
mv /home/app/work/hz/app.jar /usr/local/work/end/app2/
sh /usr/local/work/end/app2/app.sh restart
eeooff
}
if [ "${command}" == "app1" ]; then
app1
elif [ "${command}" == "app2" ]; then
app2
fi
最后pipeline脚本是这样的
pipeline {
agent any
stages {
stage('pull') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '$test']], extensions: [], userRemoteConfigs: [[credentialsId: 'mall', url: 'http://192.168.11.11/app.git']]])
}
}
stage('build') {
steps {
sh '/usr/local/work/maven/bin/mvn clean package -P'
}
}
stage('publish') {
steps {
sh 'sh /usr/local/jenkins.sh $project'
}
}
}
}
方法二:
pipeline {
agent any
environment{
ip = "192.168.11.12"
dir= "/usr/local/bak/"
project = "jjy"
}
stages {
stage('拉取代码') {
steps {
checkout scmGit(branches: [[name: 'main']], extensions: [], userRemoteConfigs: [[credentialsId: 'f933a681-2bc1-423b-***************', url: 'http://192.168.11.12/jjy.git']])
}
}
stage('构建代码') {
steps {
sh '''case $status in
deploy)
make install
;;
rollback)
exit
;;
esac'''
}
}
stage('环境部署') {
steps {
sh '''case $status in
deploy)
echo “当前状态是: $status”
echo "当前发布的项目是: $project"
echo “当前发布版本号: $version”
if [ -d "$dir/$project/$version" ]; then
rm -rf $dir/$project/$version
fi
mkdir $dir/$project/$version
cp -Rrf ${JENKINS_HOME}/workspace/go-pro-center-app01/$project /usr/local/bak/$project/$version/
echo '================启动远程部署================'
scp -r -P19022 ${JENKINS_HOME}/workspace/go-pro-center-app01/$project jjy@$ip:/home/jjy/go/$project/
ssh -p19022 jjy@$ip "ps -ef|grep /usr/local/work/center/$project/$project |grep -v grep| awk '{print \\$2}'| xargs kill -9"
ssh -p19022 jjy@$ip "mv /usr/local/work/center/$project/$project /usr/local/bak/$project/$project-\\$(date +"%Y%m%d%H%M") && mv /home/jjy/go/$project/$project /usr/local/work/center/$project/"
ssh -p19022 jjy@$ip "cd /usr/local/work/center/$project/ && ./$project.sh start"
echo '================版本发布成功================'
;;
rollback)
echo “当前状态是: $status”
echo "当前回滚的项目是: $project"
echo “当前发布版本号: version”
scp -r -P19022 $dir/$project/$version/$project jjy@$ip:/home/jjy/go/$project/
echo '================启动回滚部署================'
ssh -p19022 jjy@$ip "ps -ef|grep /usr/local/work/center/$project/$project |grep -v grep| awk '{print \\$2}'| xargs kill -9"
ssh -p19022 jjy@$ip "mv /usr/local/work/center/$project/$project /usr/local/bak/$project/$project-\\$(date +"%Y%m%d%H%M") && mv /home/jjy/go/$project/$project /usr/local/work/center/$project/"
ssh -p19022 jjy@$ip "cd /usr/local/work/center/$project/ && ./$project.sh start"
echo '================版本回滚成功================'
;;
*)
exit
;;
esac'''
}
}
}
}
添加Dingding机器人通知
#在钉钉中添加自定义机器人
#保存webhook
随后在jenkins的插件中安装插件 DingTalk随后重启
#
#下方自定义内容可填写
- 发布应用:$project-app01
- 应用版本号:$version
- 构建编号:${BUILD_NUMBER}
- 测试报告:${BUILD_URL}allure
jenkins配置定时任务并搭配参数选项
#安装插件Parameterized Scheduler