https://juejin.cn/post/6844903949183483911
1.选择流水线item
2.步骤:拉取git代码、sonar扫描、部署环境、拉取自动化代码、运行自动化
3.流水线语法如下
def getDay(){
return new Date().format('yyyyMMdd')
}
pipeline{
agent{label 'jenkins-slave-172.21.*.*'}
environment{
currentDay = getDay()
}
parameters{
choice(name: 'isRun', choices: ['True','False'], description: '请填写是否运行任务')
choice(name:'isDeploy', choices: '打包加部署\n打包\n仅部署\n打包加部署加测试', description: '部署配置')
}
stages{
stage('CHECKOUT'){
steps{
script{
git branch:'nest_oss_eip_v3.0',credentialsId:'*****',url:'git@***'
HTTPD= sh( returnStdout: true, script: 'git rev-parse HEAD')
echo '--------最新的commit id----------'
echo "${HTTPD}"
echo 'sonarqube扫描'
sh """
export JAVA_HOME=/usr/java/jdk1.8.0_66
/home/jenkins/tools/hudson.plugins.sonar.SonarRunnerInstallation/sonarqube_scanner/bin/sonar-scanner
"""
}
}
}
stage('BUILD'){
parallel{
stage('BUILD_OSS'){
steps{
script{
if(env.isRun == 'True'){
echo '--------开始BUILD OSS----------'
sh"""
source /etc/profile
sh /home/workspace/DW/eip_oss/daily/nest-oss-controller/bin/oss-server.sh stop
mvn clean package install
echo `pwd`
rm -rf /home/workspace/DW/eip_oss/daily/*
cp -rf /home/jenkins/workspace/eip_oss_test1/nest-oss-controller/target/nest-oss-controller.zip /home/workspace/DW/eip_oss/daily/
"""
}
else{
echo '-----------不需要BUILD OSS----------------'
}
}
}
}
}
}
stage('Deploy'){
when{
expression{
return(env.isDeploy == '打包加部署'||env.isDeploy == '打包加部署加测试'||env.isDeploy == '仅部署')
}
}
parallel{
stage('deploy_oss'){
agent{label 'jenkins-slave-172.21.1.174'}
steps{
script{
if (env.isRun == 'True'){
echo '----------开始Deloy Oss-------------'
sh """
JENKINS_NODE_COOKIE=dontKillMe
source /etc/profile
cd /home/workspace/DW/eip_oss/daily/
unzip nest-oss-controller.zip
cd nest-oss-controller/config
sed -i 's#spring.profiles.active: dev#spring.profiles.active: autotest#g' application.yml
sh ../bin/oss-server.sh restart
"""
git branch:'V1.3',credentialsId:'*',url:'git@*'
sh """
cd /home/jenkins/workspace/eip_oss_test1@2
python3 run.py eip_wangpan 1041 no
"""
}
else{
echo '-------------没有Deloy OSS-------------'
}
}
}
}
}
}
}
}
4.远程登陆其他机器:
https://juejin.cn/post/6844903949183483911#heading-6
#!/bin/sh
ssh -tt 远程服务器用户名@远程服务器ip << remotessh
cd /home/tlgc_server_api
/bin/git pull
npm run stop
npm run start
exit
remotessh
5.一个Jenkins任务需要拉多个git仓库的项目,放不同的目录下
方法一:
https://blog.csdn.net/a398942089/article/details/99655915?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-12.control&dist_request_id=1331647.21899.16184726555325961&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-12.control
checkout([$class: 'GitSCM', branches: [[name: '*/PMS_DD_4.9']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'be']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'XXXXXXXXXXXXXXXXXXXXXXX', url: 'git@XXXXXXXXXXX']]])
COMMITID_BE= sh( returnStdout: true, script: 'git rev-parse --short HEAD').trim()
echo '--------最新后端commit id----------'
echo "${COMMITID_BE}"
方法二:
pipeline语法中拉代码前加文件夹名称(该文件夹提前在jenkins机器对应任务的workspace下建好),如图例“EIP_KG_INDUSTRY”
stage('CHECKOUT BE'){
steps{
script{
dir ("EIP_KG_INDUSTRY"){
git branch:"${BRANCH_NAME_BE}",credentialsId:'XXX',url:'git@XXX.git'
COMMITID_BE= sh( returnStdout: true, script: 'git rev-parse --short HEAD').trim()
echo '--------最新后端commit id----------'
echo "${COMMITID_BE}"
echo '--------git sum----------------'
git_be_loc = sh(returnStdout: true, script: "git log --since='2021-03-30' --no-merges --pretty=tformat: --numstat | gawk '{ loc += \$1 - \$2 ;} END {printf(loc)}'")
echo "后端本版本总代码行:${git_be_loc}"
echo '--------git sum----------------'
git_be_yesterday_loc = sh(returnStdout: true, script: "git log --since=yesterday --no-merges --pretty=tformat: --numstat | gawk '{ loc += \$1 - \$2 ;} END {printf(loc)}'")
echo "后端昨日总代码行:${git_be_yesterday_loc}"
echo '--------git log----------------'
git_be_log = sh(returnStdout: true, script: " git log --since='1 day ago' ")
echo "BE yesterday build comments is ${git_be_log}"
echo '----------后端代码更新完成---------'
}