本文基于Jenkins已搭建完毕,Jenkins服务搭建详解可参考此文:Linux安装与卸载Jenkins(超详细)
一般是Jenkins部署在一台服务器上,gitlab部署在一台服务器上,发布的服务部署在一台服务器上,大致流程基本上三步:
第一步:在Jenkins上创建一个项目,可以创建纯pipeline脚本的,也可以是自由风格的,之后还需要配置一下SSH server,之后就写脚本;
后台项目的pipeline:
pipeline{
agent any
stages{
stage('拉取GitLab代码'){ /*拉取GitLab代码的工作*/
steps{
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
checkout([$class: 'GitSCM', branches: [[name: '*/test']], extensions: [], userRemoteConfigs: [[credentialsId: '创建的gitlab上的身份id', url: '代码地址']]])
} }}
stage('编译代码'){ /*打包构建源码成指定应用包,构建后存放的目录在/root/.jenkins/workspace/指定构建任务/target文件下*/
steps{
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
sh"""
source /etc/profile
cd /opt/jenkins_workspace/workspace/oms_back/zfy-auth/zfy-auth
mvn clean
mvn install -Dmaven.test.skip=true
"""
}
}
}
stage('应用包移动到服务器'){ /*打包构建源码成指定应用包,构建后存放的目录在/root/.jenkins/workspace/指定构建任务/target文件下*/
steps{
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
sh"""
mv /opt/jenkins_workspace/workspace/oms_back/zfy-auth/zfy-auth/zfy-auth-admin/target/zfy-auth-admin.jar /opt/jenkins_workspace/workspace/back/zfy-auth/zfy-auth/zfy-auth-admin/target/zfy-auth-admin.jar
scp -P 10088 /opt/jenkins_workspace/workspace/back/zfy-auth/zfy-auth/zfy-auth-admin/target/zfy-auth-admin.jar root@192.168.2.2:/opt/tomcat-7.0.67/
"""
}
}
}
stage('备份更新启动tomcat'){ /*打包构建源码成指定应用包,构建后存放的目录在/root/.jenkins/workspace/指定构建任务/target文件下*/
steps{
sshPublisher(publishers: [sshPublisherDesc(configName: 'back', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand:
'''
source /etc/profile
cd /opt/tomcat-7.0.67
sh stop.sh
sleep 2
sh start.sh &
'''
, execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '/opt/tomcat-7.0.67')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
}
}
前端pipeline:
host='192.168.1.1'
port='22'
user='root'
pwd='root'
pipeline{
agent any
stages{
stage('拉取GitLab代码'){
steps{
checkout([$class: 'GitSCM', branches: [[name: 'http://192.168.1.1:9001/zfy-projects/zfy.git']], doGenerateSubmoduleConfigurations: false, extensions: [], gitTool: 'Default', submoduleCfg: [], userRemoteConfigs: [[credentialsId: '9947770c-42e2-483c-a47d-b2ef3db791f6', url: '${Gitlab_URL}']]])
}
}
stage('替换相关配置'){
steps{
echo "不需要配置"
}
}
stage('打包构建'){
steps{
sh"""
if [ -f "pom.xml" ];then
cd ${workspace}/${project}/zfy-peak/zfy-client/zfy-c-h
else
cd ${workspace}/${project}/zfy-peak/zfy-client/zfy-c-h
fi
npm install
sleep 2
npm run build
rm -rf zfy-c-h
mv dist zfy-c-h
"""
}
}
stage('应用包移动到nginx'){
steps{
sh"""
cd ${workspace}/${project}/zfy-peak/zfy-client/zfy-c-h
sshpass -p '$pwd' scp -r zfy-c-h '$user'@'$host':/opt/app
"""
}
}
stage('重启加载服务'){
steps{
sshPublisher(publishers: [sshPublisherDesc(configName: "${remoteHost}", transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand:
'''
source /etc/profile
/usr/sbin/nginx -s reload
'''
, execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '/opt/app')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
}
}
第二部:在gitlab上找到需要自动化构建的项目,为它创建一个角色,把该角色的身份id和HTTP代码地址拿到之后放入piepeline脚本里面;
第三步:可以为Jenkins创建免密登录的ssh公私钥,将公钥放在Jenkins上,把私钥放入~/.ssh/authorized_keys文件里面
在piepeline脚本里面也可以输入命令 ssh -p 端口 用户名@IP 进入代码服务器,将打好的jar或者war亦或前端静态文件拷入tomcat或者Nginx服务器。
多多更新,通俗易懂