<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>DevOps技术分享 &#187; Jenkins Pipeline</title>
	<atom:link href="http://www.showerlee.com/archives/tag/jenkins-pipeline/feed" rel="self" type="application/rss+xml" />
	<link>http://www.showerlee.com</link>
	<description>与你共同学习运维开发</description>
	<lastBuildDate>Mon, 19 Oct 2020 05:51:41 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.6</generator>
		<item>
		<title>浅谈Jenkins Pipeline</title>
		<link>http://www.showerlee.com/archives/1972</link>
		<comments>http://www.showerlee.com/archives/1972#comments</comments>
		<pubDate>Wed, 19 Jul 2017 09:34:35 +0000</pubDate>
		<dc:creator>showerlee</dc:creator>
				<category><![CDATA[DevTools]]></category>
		<category><![CDATA[Jenkins]]></category>
		<category><![CDATA[Jenkins Pipeline]]></category>

		<guid isPermaLink="false">http://www.showerlee.com/?p=1972</guid>
		<description><![CDATA[已经很久很久没有更新我的空间了, 最近刚好工作上的变动让我有时间去静下心来去整理一下这一年来学到的东西. 谈到 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>
	已经很久很久没有更新我的空间了, 最近刚好工作上的变动让我有时间去静下心来去整理一下这一年来学到的东西.
</p>
<p>
	谈到Jenkins, 大家肯定耳熟能详, 持续集成/持续交付, 自动化部署工具, 测试工具, 配合目前我们绝大多说开发工具, 简直是万能的瑞士军刀.
</p>
<p>
	接触Devops这个概念两年有余, 使用了很多开发工具诸如JIRA, Gitlab, Ansible, SVN, NEXUS, CHEF, FISHEYE, Confluence等等, 唯独Jenkins让我印象最为深刻.
</p>
<p>
	为什么呢?
</p>
<p>
	还记得我之前写过几篇文章, 介绍了Jenkins配合ansible, gitlab实现持续集成自动化部署. Jenkins作为核心的部署工具将原来只能通过命令行或者二次开发才能实现部署方式搬到前台, 将更多的GUI可操作空间交给DevOps和开发, 加之完善的权限分配规范, 让运维与开发能够和谐的在这个系统间协同工作.&nbsp;
</p>
<p>
	<a href="http://www.showerlee.com/archives/tag/jenkins-pipeline" title="查看Jenkins Pipeline中的全部文章" class="tag_link">Jenkins Pipeline</a>, 我觉得是Jenkins2.0以后一个革命性的更新, 那就是用一种全新的Pipeline code方式, 将我们原来意义上的手动配置每一个Jenkins Job的具体配置项变成将所有配置代码化, 并再次配合Gitlab等版本控制系统去保存我们的代码配置, 这样子无论Job在未来需要更新, 或者需要回滚到之前的某一个配置, 又或者一个新的Job需要参考之前的老Job的配置并直接套用, 又或者我们需要去批量生成若干个Job配置, 我们都可以像管理软件代码的方式去管理我们的Jenkins Job配置. 这样就极大的简化我们自动化部署的结构, 将以前需要手动配置Job的这个步骤, 直接代码化. 最终体现出我们DevOps的最终目标.&nbsp;
</p>
<p>
	<a href="http://www.showerlee.com/archives/1972/realworld-pipeline-flow-2"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2017/07/realworld-pipeline-flow1.png" alt="realworld-pipeline-flow" width="1024" height="387" class="alignnone size-full wp-image-2016" /></a>
</p>
<p>
	目前来说Jenkins pipeline应该算上是一个出生不久但我觉得比较成熟的概念, 如果你要认真去了解他, 我觉得会给你带来意想不到的收获.
</p>
<p>
	
</p>
<p>
	Jenkinsfile (Declarative Pipeline)
</p>
<pre class="prettyprint">Jenkinsfile (Declarative Pipeline)
pipeline {
    agent any 

    stages {
        stage('Build') { 
            steps { 
                sh 'make' 
            }
        }
        stage('Test'){
            steps {
                sh 'make check'
                junit 'reports/**/*.xml' 
            }
        }
        stage('Deploy') {
            steps {
                sh 'make publish'
            }
        }
    }
}</pre>
<p>
	这是一个比较简单JenkinsFile(pipeline code), 简单来说包含了三块我们日常基本的自动化部署步骤, 之所以会命名Pipeline, 可以说是因为我们可以在不同的stage下去编写我们的具体部署需求, 然后通过Pipeline将这些stage块连接起来, 不仅能够将我们的部署结构分割成块状并可以直接通过查询这个块的的日志来定位/排错我们的部署内容, 而且将一个块状内的代码方法化, 实现不同块之间的相互调用, 这样就在原有的Jenkins平行逻辑配置的基础上, 加入逻辑化的功能, 而且本身配置代码化又便于我们去做版本控制, 可以说是在原有Jenkins下做出的重大的变革.&nbsp;
</p>
<p>
	接下来我将利用上述代码编写一个Jenkins pipeline示例:
</p>
<p>
	首先我们将上面的代码写入一个我们新建好的pipeline job
</p>
<p>
	<a href="http://www.showerlee.com/?attachment_id=1991"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2017/07/pipe21.jpg" alt="pipe2" width="1024" height="321" class="alignnone size-full wp-image-1991" /></a>
</p>
<p>
	<a href="http://www.showerlee.com/?attachment_id=1993"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2017/07/pipe31.jpg" alt="pipe3" width="1024" height="475" class="alignnone size-full wp-image-1993" /></a>
</p>
<p>
	
</p>
<p>
	这里我们可以清晰的看到每一个stage的名字, 是否执行成功, 涉及到的版本控制commit变更, 以及所用到的平均时间.
</p>
<p></p>
<p>
	<a href="http://www.showerlee.com/?attachment_id=1988"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2017/07/pipeline11.jpg" alt="pipeline1" width="1024" height="352" class="alignnone size-full wp-image-1988" /></a>
</p>
<p>
	我们也可以通过Pipeline script from SCM - Git的方式实现我刚才所说的将我们具体的pipeline code保存到git上, 利用Jenkins git将代码抓取到该job实现JenkinsFile版本控制.
</p>
<p>
	<a href="http://www.showerlee.com/?attachment_id=1996"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2017/07/pipe5.jpg" alt="pipe5" width="1024" height="721" class="alignnone size-full wp-image-1996" /></a>
</p>
<p>
	
</p>
<p>
	最后, 无论是我们DevOps去编写/排错job code还是开发去测试代码质量, 都可以将我们在执行这个job过程中出现的任何问题精确的定位到每一个块状stage下, 从而提高我们工作效率.
</p>
<p>
	接下来我会在空间陆续更新Pipeline的一些语法及常见编写规范.
</p>
<p>
	希望大家有兴趣可以尝试一下Jenkins这个新功能, 下面是具体的Pipeline语法及编写文档.
</p>
<p>
	Pipeline Guide:
</p>
<p><a href="https://jenkins.io/doc/book/pipeline" rel="nofollow">https://jenkins.io/doc/book/pipeline</a></p>
<p><a href="https://jenkins.io/doc/book/pipeline/syntax" rel="nofollow">https://jenkins.io/doc/book/pipeline/syntax</a></p>
<p></p>
<div>声明: 本文采用 <a rel="external" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" title="署名-非商业性使用-相同方式共享 3.0 Unported">CC BY-NC-SA 3.0</a> 协议进行授权</div><div>转载请注明来源：<a rel="external" title="DevOps技术分享" href="http://www.showerlee.com/archives/1972">DevOps技术分享</a></div><div>本文链接地址：<a rel="external" title="浅谈Jenkins Pipeline" href="http://www.showerlee.com/archives/1972">http://www.showerlee.com/archives/1972</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.showerlee.com/archives/1972/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
