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

微信截图_20230720172601.png#等他安装插件一路下一步即可成功,可进入设置更改密码

微信图片_20230111144056-2-1536x797.png#安装插件需要用到的插件有: 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

微信图片_20230111144056-2-1536x797-lepq.pngimage-1536x464.pngimage-1536x464-vlcj.pngimage-2-1536x495.pngimage-2-1536x495-xtvp.pngimage-6-1536x605.pngimage-3-1536x580.png接下来需要写pipeline项目发布脚本
1.首先需要拉取gitlab的代码,在下方点击流水线语法

选择checkout

image-8-1536x671.pngimage-7-1536x893.png#在下面生成流水线脚本并复制粘贴,然后进行构建

image-8-1536x671.png#然后书写发布的脚本,两台机器需要做免密登录

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'
            }
        }
    }
}

方法二:

微信图片_20230803111434.png微信图片_20230803111457.png微信图片_20230803111513.png

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机器人通知

#在钉钉中添加自定义机器人

微信截图_20231010152322.png#保存webhook

随后在jenkins的插件中安装插件 DingTalk随后重启

微信截图_20231010152714.png微信截图_20231010152858.png

微信图片_20231010153111.png#

#下方自定义内容可填写
- 发布应用:$project-app01
- 应用版本号:$version
- 构建编号:${BUILD_NUMBER}
- 测试报告:${BUILD_URL}allure

jenkins配置定时任务并搭配参数选项

#安装插件Parameterized Scheduler