Jenkins Pipline 代码流水线配置


pipline 是帮助 Jenkins 实现 CI 到 CD 转变的重要角色,是运行在 jenkins 2.X 版本的核 心插件,简单来说 Pipline 就是一套运行于 Jenkins 上的工作流框架,将原本独立运行 于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程,从而 实现单个任务很难实现的复杂流程编排和任务可视化,Pipeline 的实现方式是一套 Groovy DSL,任何发布流程都可以表述为一段 Groovy 脚本。

一、pipline 语法

Stage:阶段,一个 pipline 可以划分为若干个 stage,每个 stage 都是一个操作步骤, 比如 clone 代码、代码编译、代码测试和代码部署,阶段是一个逻辑分组,可以跨多 个 node 执行。

Node:节点,每个 node 都是一个 jenkins 节点,可以是 jenkins master 也可以是 jenkins agent,node 是执行 step 的具体服务器。

Step:步骤,step 是 jenkins pipline 最基本的操作单元,从在服务器创建目录到构建容器镜像,由各类 Jenkins 插件提供实现,一个 stage 中可以有多个 step,例如: sh “make”

二、pipline 优势

可持续性:jenkins 的重启或者中断后不影响已经执行的 Pipline Job。
支持暂停:pipline 可以选择停止并等待人工输入或批准后再继续执行。
可扩展:通过 groovy 的编程更容易的扩展插件。
并行执行:通过 groovy 脚本可以实现 step,stage 间的并行执行,和更复杂的相互依赖关系。

三、pipline job 测试

3.1 创建 pipline job

在这里插入图片描述

3.2 测试简单 pipline job 运行

3.2.1 编写pipline代码

node('jenkins-slave1'){ 
    stage("clone 代码"){
        echo "代码 clone" 
    }

    stage("代码构建"){ 
        echo "代码构建"
        }
        
    stage("代码测试"){
        echo "代码测试"
    }
    
    stage("代码部署"){
        echo "代码部署" 
    } 
}

Jenkins Web 界面配置
在这里插入图片描述

3.2.2 执行 pipline job

立即构建,查看构建状态
在这里插入图片描述

3.3 测试拉取代码 pipline job 运行

3.3.1 自动生成拉取代码的 pipline 脚本

点击 流水线语法 跳转至生成脚本 URL

在这里插入图片描述

git branch: 'develop', credentialsId: 'f55bf2a5-abd5-4f08-87ae-3e9ad4cb1024', url: 'git@10.0.0.31:lcklck/app1.git'

3.3.2 更改 pipline job

在这里插入图片描述

3.3.3 执行 pipline job

在这里插入图片描述

3.3.4 验证 git clone 日志

在这里插入图片描述

3.3.5 jenkins 服务器验证 clone 代码数据

lck@jenkins-slave1:~$ cat /var/lib/jenkins/workspace/linux-pipline-test/index.html
<h1>v111</h1>
<h1>v222</h1>
<h1>v333</h1>

3.4 测试脚本式 pipline 代码

3.4.1 编写脚本式 pipline 代码

node('jenkins-slave1'){ 
    stage("clone 代码"){
        git branch: 'develop', credentialsId: 'f55bf2a5-abd5-4f08-87ae-3e9ad4cb1024', url: 'git@10.0.0.31:lcklck/app1.git' 
    }

    stage("代码构建"){ 
        sh 'cd /var/lib/jenkins/workspace/linux-pipline-test && tar czvf code.tar.gz ./index.html'
    }
        
	stage("代码复制"){
		sh 'cd /var/lib/jenkins/workspace/linux-pipline-test && scp code.tar.gz tomcat@10.0.0.37:/data/tomcat/tomcat_appdir/' 
		sh 'cd /var/lib/jenkins/workspace/linux-pipline-test && scp code.tar.gz tomcat@10.0.0.38:/data/tomcat/tomcat_appdir/'
		sh 'cd /var/lib/jenkins/workspace/linux-pipline-test && scp code.tar.gz tomcat@10.0.0.39:/data/tomcat/tomcat_appdir/' 
	}
	
	stage("停止 tomcat 服务"){
		sh 'ssh tomcat@10.0.0.37 "/etc/init.d/tomcat.sh stop"' 
		sh 'ssh tomcat@10.0.0.38 "/etc/init.d/tomcat.sh stop"' 
		sh 'ssh tomcat@10.0.0.39 "/etc/init.d/tomcat.sh stop"' 
	}
	
	stage("代码部署"){ 
		sh 'ssh tomcat@10.0.0.37 "rm -rf /data/tomcat/tomcat_webdir/myapp/* && cd /data/tomcat/tomcat_appdir && tar xvf code.tar.gz -C /data/tomcat/tomcat_webdir/myapp/"' 
		sh 'ssh tomcat@10.0.0.38 "rm -rf /data/tomcat/tomcat_webdir/myapp/* && cd /data/tomcat/tomcat_appdir && tar xvf code.tar.gz -C /data/tomcat/tomcat_webdir/myapp/"' 
		sh 'ssh tomcat@10.0.0.39 "rm -rf /data/tomcat/tomcat_webdir/myapp/* && cd /data/tomcat/tomcat_appdir && tar xvf code.tar.gz -C /data/tomcat/tomcat_webdir/myapp/"' 
	}
	
	stage("启动 tomcat 服务"){ 
		sh 'ssh tomcat@10.0.0.37 "/etc/init.d/tomcat.sh start"' 
		sh 'ssh tomcat@10.0.0.38 "/etc/init.d/tomcat.sh start"' 
		sh 'ssh tomcat@10.0.0.39 "/etc/init.d/tomcat.sh start"' 
	}
}

在这里插入图片描述

3.4.2 执行并验证 pipline job

在这里插入图片描述

3.5 测试声明式 pipline job 代码

3.5.1 编写声明式 pipline job 代码

root@jenkins-master:~# cd app1/
root@jenkins-master:~/app1# vim index.html
<h1>v111</h1>
<h1>v222</h1>
<h1>v333</h1>
<h1>v444</h1>
root@jenkins-master:~/app1# git commit -m "v4 version"
[master 625ecab] v4 version
 1 file changed, 1 insertion(+)
root@jenkins-master:~/app1# git push
Counting objects: 3, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 297 bytes | 297.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To 10.0.0.31:lcklck/app1.git
   3f721f0..625ecab  master -> master
pipeline{
    agent { label 'jenkins-slave1' }
    stages{
        stage("代码clone"){
            steps{
                sh "cd /var/lib/jenkins/workspace/linux-pipline-test && rm -rf ./*"
                git credentialsId: 'f55bf2a5-abd5-4f08-87ae-3e9ad4cb1024', url: 'git@10.0.0.31:lcklck/app1.git'
                echo "代码 clone完成"
            }
        }
        
        stage("代码构建"){
			steps{
				sh "cd /var/lib/jenkins/workspace/linux-pipline-test && tar czvf code.tar.gz ./index.html"
			}
		}
		
	   stage("停止服务"){
			steps{
				sh 'ssh tomcat@10.0.0.37 "/etc/init.d/tomcat.sh stop && rm -rf /data/tomcat/tomcat_webapps/myapp/*"'
				sh 'ssh tomcat@10.0.0.38 "/etc/init.d/tomcat.sh stop && rm -rf /data/tomcat/tomcat_webapps/myapp/*"'
				sh 'ssh tomcat@10.0.0.39 "/etc/init.d/tomcat.sh stop && rm -rf /data/tomcat/tomcat_webapps/myapp/*"'
			}
		}
        
		stage("代码copy"){
			steps{
				sh "cd /var/lib/jenkins/workspace/linux-pipline-test && scp code.tar.gz  tomcat@10.0.0.37:/data/tomcat/tomcat_appdir/"
				sh "cd /var/lib/jenkins/workspace/linux-pipline-test && scp code.tar.gz  tomcat@10.0.0.38:/data/tomcat/tomcat_appdir/"
				sh "cd /var/lib/jenkins/workspace/linux-pipline-test && scp code.tar.gz  tomcat@10.0.0.39:/data/tomcat/tomcat_appdir/"
			}
		}
		
		stage("代码部署"){
			steps{
				sh 'ssh tomcat@10.0.0.37 "cd  /data/tomcat/tomcat_appdir/ && tar xvf code.tar.gz -C /data/tomcat/tomcat_webapps/myapp/"'
				sh 'ssh tomcat@10.0.0.38 "cd  /data/tomcat/tomcat_appdir/ && tar xvf code.tar.gz -C /data/tomcat/tomcat_webapps/myapp/"'
				sh 'ssh tomcat@10.0.0.39 "cd  /data/tomcat/tomcat_appdir/ && tar xvf code.tar.gz -C /data/tomcat/tomcat_webapps/myapp/"'
			}
		}
		
		
		stage("启动服务"){
			steps{
				sh 'ssh tomcat@10.0.0.37 "/etc/init.d/tomcat.sh start"'
				sh 'ssh tomcat@10.0.0.38 "/etc/init.d/tomcat.sh start"'
				sh 'ssh tomcat@10.0.0.39 "/etc/init.d/tomcat.sh start"'
			}
		}
    }
}

3.5.2 执行并验证 pipline job

在这里插入图片描述
在这里插入图片描述

3.6 使用Jenkinsfile放置pipline代码

3.6.1 编写Jenkinsfile并提交Gitlab

root@jenkins-master:~/app1# vim Jenkinsfile

pipeline{
    agent { label 'jenkins-slave1' }
    stages{
        stage("代码clone"){
            steps{
...............................................
root@jenkins-master:~/app1# git add .
root@jenkins-master:~/app1# git commit -m "add Jenkinsfile"
[master 3424fa3] add Jenkinsfile
 1 file changed, 51 insertions(+)
 create mode 100644 Jenkinsfile
root@jenkins-master:~/app1# git push
Counting objects: 3, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 809 bytes | 809.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To 10.0.0.31:lcklck/app1.git
   625ecab..3424fa3  master -> master

在这里插入图片描述

3.6.2 执行并验证 pipline job

在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Jenkins流水线配置SVN拉包的步骤: 1. 在Jenkins中安装Subversion插件,以便Jenkins能够与SVN进行交互。 2. 在Jenkins中创建一个新的流水线项目。 3. 在流水线项目的配置页面中,选择“Pipeline script”作为流水线的定义方式。 4. 在Pipeline脚本中,使用SVN插件提供的checkout命令从SVN仓库中拉取代码。例如: ```groovy checkout([$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[credentialsId: 'svn-credentials', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: 'http://svn.example.com/repo/trunk']], workspaceUpdater: [$class: 'UpdateUpdater']]) ``` 其中,`svn-credentials`是在Jenkins配置的SVN凭据ID,`http://svn.example.com/repo/trunk`是SVN仓库的URL。 5. 接下来,您可以在Pipeline脚本中执行其他操作,例如编译代码、运行测试、构建部署包等。 6. 最后,您可以使用SSH插件将构建好的部署包上传到远程Linux服务器。例如: ```groovy sshPublisher(publishers: [sshPublisherDesc(configName: 'my-ssh-server', transfers: [sshTransfer(execCommand: "sudo /bin/bash /path/to/deploy.sh", execTimeout: 120000, flatten: false, remoteDirectory: '.', sourceFiles: '/path/to/deploy-package.tgz')])]) ``` 其中,`my-ssh-server`是在Jenkins配置的SSH服务器ID,`/path/to/deploy.sh`是远程Linux服务器上的部署脚本,`/path/to/deploy-package.tgz`是要上传的部署包。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值