Docker 搭建 Jenkins 流水线项目配置

本篇介绍 Jenkins 流水线项目的配置及流水线脚本语法规则。至于 Jenkins 的安装及其它配置,我之前写过一篇文章可以查看。 https://www.yuque.com/testpu/pro/bo7lzr ,以下,演示也是基于这篇文章中介绍的 Jenkins 配置为准。

1、流水线项目配置

安装完流水线的插件可以,创建项目时会出现对应的流水线项目选项,如下:

Docker 搭建 Jenkins 流水线项目配置_第1张图片

输入名称,api_pipeline_dev 选中,流水线,即可创建对应项目。

Docker 搭建 Jenkins 流水线项目配置_第2张图片

至于,其它配置,如,git拉取代码,jdk,maven、远程服务器等,查看我的上一篇文章,这里只介绍 Jenkins 流水线项目的创建及流水线脚本。

Docker 搭建 Jenkins 流水线项目配置_第3张图片

Docker 搭建 Jenkins 流水线项目配置_第4张图片

2、流水线 api-jar包打包脚本

下面是 api jar包的构建及部署脚本。

pipeline {
    agent any
    
    stages {
        stage('拉取代码') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '*/dev']], extensions: [], userRemoteConfigs: [[credentialsId: '32d07987c09', url: 'http://192.8.8.8:8080/git/api']]])
                echo '拉取代码成功'
            }
        }
        
        stage('编译构建') {
            steps {
                echo "${env.WORKSPACE}" //用于打印 Jenkins 工作目录,没啥实质用处
                sh 'mvn -f spomlile/pom.xml clean install'
                echo '编译成功'
            }
        }
        
        //stage('项目部署') {
            //Jenkins 的ssh插件来实现部署jar包,就是这里配置后生成脚本 https://www.yuque.com/testpu/pro/lsigkl#xidkx
            //steps {
                //sshPublisher failOnError: true, publishers: [sshPublisherDesc(configName: '211.4docker', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/api/spomlile-all/', remoteDirectorySDF: false, removePrefix: 'spomlile/spomlile-all/target', sourceFiles: 'spomlile/spomlile-all/target/spomlile-all-0.1.0-exec.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)]
                //echo '项目部署成功'
            //}
        //}        

        stage('项目部署') {
            //执行远程服务器上的脚本来实现部署
            steps {
                sh '''ssh [email protected] "nohup sh /data/api/scp_from_211.3_api_pipeline.sh & sleep 1"
                sleep 3'''
            }
        }                
        
    }
}

2.1脚本说明:

1、编译构建脚本中这个命令非常关键,如果你的项目工程存在多个微服务,那么你从 Git 仓库拉取下来的代码多了一层目录(根目录中不会有 pom.xml 这个文件),此时必须要指定这个文件的位置,否则 maven 识别不了,哈哈哈哈。用如下的方式指定该文件的位置,比如:

# 指定pom.xml文件的位置,基于Jenkins工作目录的相对目录
'mvn -f litemall/pom.xml clean install'

2、部署脚本有两种实现方法,一种是直接用 Jenkins 的ssh插件,传输 jar 到远程服务器(上面脚本注释的部分),另外一种是在远程服务器上写好部署脚本,用 Jenkins 执行远程服务器上的部署脚本,按自己项目需求二选一。

远程服务器上的部署脚本如下。

#!/bin/bash

host='192.8.8.8'
name='booksmpil-all-5.1.0-exec.jar'
dir='booksmpil'
DT=`date +%Y%m%d%H%M`

if ps -ef|grep $name |grep -v "grep" &>/dev/null; then
  java_pid=`ps -ef | grep $name | grep -v "grep" | awk '{print $2}'`
  echo "kill -9 的pid:" $java_pid
  kill -9 ${java_pid}
fi
echo '【开始暂停jar包】'

if ps -ef|grep $name |grep -v "grep" &>/dev/null; then
  echo "Tomcat stop failed.Please check the problem."
  exit 5
fi

cd /data/api
cmd='mv '$dir' bk/'$dir'_'$DT
echo $cmd
eval $cmd
echo '【项目备份完成】'

sleep 3

if [ ! -d booksmpil ]; then
  mkdir $dir
fi

sleep 3

scp -rq root@$host:/data/jenkins/jenkins_home/workspace/api_pipeline_dev/booksmpil/booksmpil-all/target/$name /data/api/$dir
sleep 2
echo '【项目部署完成】'

sleep 2

cd /data/api/$dir
cp /data/api/confbk/appconifg-all.yml ./appconifg-core.yml
echo '【备份配置完成】'

source /etc/profile
nohup java -jar $name >/dev/null &
if ps -ef|grep $name |grep -v "grep" &>/dev/null; then
  echo '【启动jar包】'
fi

NR=`ps -ef | grep "${name}" | grep -v grep | wc -l`
if [ "$NR" -eq 1 ]
then
        echo '【启动成功】'
else
        echo '【启动失败】'
fi

3、流水线脚本语法生成

Jenkins 自带流水线语法生成插件,入口项目配置-流水线-流水线语法

Docker 搭建 Jenkins 流水线项目配置_第5张图片

3.1Git拉取代码脚本生成

Docker 搭建 Jenkins 流水线项目配置_第6张图片

Docker 搭建 Jenkins 流水线项目配置_第7张图片

选中红框中的步骤,然后依次填写Git仓库的信息,点击 ‘生成流水线脚本’即可。

3.2执行 shell 脚本生成

Docker 搭建 Jenkins 流水线项目配置_第8张图片

选中红框中的步骤,然后写你要执行的 shell 脚本,点击生成即可。

3.3向远程服务器发布jar包脚本生成

Docker 搭建 Jenkins 流水线项目配置_第9张图片

Docker 搭建 Jenkins 流水线项目配置_第10张图片

依次填写远程服务器的配置、远程目录、源文件地址等信息后,点击生成。

还有很多流水线脚本生成语法,按需生成。


读后感

来这里找我交流

  • QQ群:330374464
  • 公众号:软件测试资源站(ID:testpu)
  • 阿里语雀:https://www.yuque.com/testpu/pro

你可能感兴趣的:(软件测试资源站,软件测试,Jenkins,Jenkins,流水线,Linux,docker,软件测试)