index.html 30.8 KB
Newer Older
LinuxSuRen's avatar
LinuxSuRen 已提交
1 2 3 4 5
<!DOCTYPE html>
<html class="no-js" lang="zh-CN">
  <head>
    <meta charset="utf-8">
    
LinuxSuRen's avatar
LinuxSuRen 已提交
6 7 8
    <link rel="preload" href="https://jenkins-zh.cn/files/muli-latin-200.woff2" as="font" type="font/woff2" crossorigin>
    <link rel="preload" href="https://jenkins-zh.cn/files/muli-latin-400.woff2" as="font" type="font/woff2" crossorigin>
    <link rel="preload" href="https://jenkins-zh.cn/files/muli-latin-800.woff2" as="font" type="font/woff2" crossorigin>
LinuxSuRen's avatar
LinuxSuRen 已提交
9 10 11

    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     
LinuxSuRen's avatar
LinuxSuRen 已提交
12 13
     <title>Custom WAR Packager - Jenkins 中文社区</title>
     <meta name="HandheldFriendly" content="True">
LinuxSuRen's avatar
LinuxSuRen 已提交
14
    <meta name="MobileOptimized" content="320">
LinuxSuRen's avatar
LinuxSuRen 已提交
15 16 17 18
    
    <meta name="description" content="打造你自己的 Jenkins!了解自定义 WAR/Docker Packager">
    
    
LinuxSuRen's avatar
LinuxSuRen 已提交
19
    <meta name="keywords" content="Jenkins,Jenkins中文社区,Jenkins官方公众号,持续集成,持续交付,开源社区,DevOps">
LinuxSuRen's avatar
LinuxSuRen 已提交
20
    
LinuxSuRen's avatar
LinuxSuRen 已提交
21 22

    <meta name="viewport" content="width=device-width,minimum-scale=1">
LinuxSuRen's avatar
LinuxSuRen 已提交
23
     <meta name="generator" content="Hugo 0.54.0" />
LinuxSuRen's avatar
LinuxSuRen 已提交
24 25

      
LinuxSuRen's avatar
LinuxSuRen 已提交
26
        <META NAME="ROBOTS" CONTENT="INDEX, FOLLOW">
LinuxSuRen's avatar
LinuxSuRen 已提交
27 28
      

LinuxSuRen's avatar
LinuxSuRen 已提交
29
    <link href='/dist/main.css' rel='stylesheet' type="text/css" /><style>
LinuxSuRen's avatar
LinuxSuRen 已提交
30 31 32 33 34 35 36 37
  img.avatar {
    width: 32px;
    display: inline;
  }
</style>
<meta property="og:title" content="Custom WAR Packager" />
<meta property="og:description" content="打造你自己的 Jenkins!了解自定义 WAR/Docker Packager" />
<meta property="og:type" content="article" />
LinuxSuRen's avatar
LinuxSuRen 已提交
38
<meta property="og:url" content="https://jenkins-zh.cn/wechat/articles/2018/12/2018-12-5-custom-war-packager/" />
LinuxSuRen's avatar
LinuxSuRen 已提交
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54


<meta itemprop="name" content="Custom WAR Packager">
<meta itemprop="description" content="打造你自己的 Jenkins!了解自定义 WAR/Docker Packager">



<meta itemprop="wordCount" content="497">



<meta itemprop="keywords" content="tools,docker,jenkins-x,cloud-native," />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Custom WAR Packager"/>
<meta name="twitter:description" content="打造你自己的 Jenkins!了解自定义 WAR/Docker Packager"/>

LinuxSuRen's avatar
LinuxSuRen 已提交
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
        
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-4216293-5"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'UA-4216293-5');



var trackOutboundLink = function(id, url) {
  console.log("track:", id, url)
  gtag('event', 'click', {
    'event_category': 'outbound',
    'event_label': id,
    'transport_type': 'beacon',
    'event_callback': function(){document.location = url;}
  });
}

</script>

      
LinuxSuRen's avatar
LinuxSuRen 已提交
79 80 81 82 83 84 85 86
  </head>
  <body class="ma0 sans-serif bg-primary-color-light">
    
<nav class="bg-primary-color-dark pv4 w-100" role="navigation">

  <div class="center flex-ns flex-wrap items-center justify-start mw9">

    <h1 class="dim f3 lh-solid ml0-ns mr0 mr4-l mv0 pl3 pl4-ns">
LinuxSuRen's avatar
LinuxSuRen 已提交
87
      <a href="https://jenkins-zh.cn/" class="link white">
LinuxSuRen's avatar
LinuxSuRen 已提交
88 89 90 91 92 93 94 95 96 97
         Jenkins 中文社区
      </a>
    </h1>
    <ul class="list ma0 pa0 dn dib-l">
      
        <li class="f5 dib mr4" role="menuitem">
            
            
          <a href="/wechat/" class="dim link light-silver"
            >
LinuxSuRen's avatar
LinuxSuRen 已提交
98
            博客
LinuxSuRen's avatar
LinuxSuRen 已提交
99 100 101 102 103
              
            
          </a>
        </li>
      
LinuxSuRen's avatar
LinuxSuRen 已提交
104 105 106 107 108 109 110 111 112 113 114
        <li class="f5 dib mr4" role="menuitem">
            
            
          <a href="/tutorial/" class="dim link light-silver"
            >
            教程
              
            
          </a>
        </li>
      
LinuxSuRen's avatar
LinuxSuRen 已提交
115 116 117 118 119 120 121 122 123 124 125
        <li class="f5 dib mr4" role="menuitem">
            
            
          <a href="/event/" class="dim link light-silver"
            >
            活动
              
            
          </a>
        </li>
      
LinuxSuRen's avatar
LinuxSuRen 已提交
126 127 128 129 130 131 132 133 134 135 136
        <li class="f5 dib mr4" role="menuitem">
            
            
          <a href="/partner/" class="dim link light-silver"
            >
            合作伙伴
              
            
          </a>
        </li>
      
LinuxSuRen's avatar
LinuxSuRen 已提交
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
        <li class="f5 dib mr4" role="menuitem">
            
            
          <a href="/about/" class="dim link light-silver"
            >
            关于我们
              
            
          </a>
        </li>
      
        <li class="f5 dib mr4" role="menuitem">
            
            
          <a href="http://jenkins.io/zh" class="dim link light-silver"
            target="_blank">
            Jenkins 官网
              
            
              <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10" height="10" viewBox="0 0 32 32" class="fill-current v-base" aria-label="External Link">
<path d="M25.152 16.576v5.696q0 2.144-1.504 3.648t-3.648 1.504h-14.848q-2.144 0-3.648-1.504t-1.504-3.648v-14.848q0-2.112 1.504-3.616t3.648-1.536h12.576q0.224 0 0.384 0.16t0.16 0.416v1.152q0 0.256-0.16 0.416t-0.384 0.16h-12.576q-1.184 0-2.016 0.832t-0.864 2.016v14.848q0 1.184 0.864 2.016t2.016 0.864h14.848q1.184 0 2.016-0.864t0.832-2.016v-5.696q0-0.256 0.16-0.416t0.416-0.16h1.152q0.256 0 0.416 0.16t0.16 0.416zM32 1.152v9.12q0 0.48-0.352 0.8t-0.8 0.352-0.8-0.352l-3.136-3.136-11.648 11.648q-0.16 0.192-0.416 0.192t-0.384-0.192l-2.048-2.048q-0.192-0.16-0.192-0.384t0.192-0.416l11.648-11.648-3.136-3.136q-0.352-0.352-0.352-0.8t0.352-0.8 0.8-0.352h9.12q0.48 0 0.8 0.352t0.352 0.8z"></path>
</svg>

            
          </a>
        </li>
      
    </ul>

    <div class="db dib-ns pl3"><form id="site-search-form" action="" role="search">
  <fieldset class="bn ma0 pa0">
    <label class="clip" for="email-address">Search</label>
    <input type="search" id="search-input" class="needs-js bg-left bg-transparent bn f5 input-reset lh-solid mt3 mt0-ns pl4 pv2 w5 white"
      placeholder="搜索文档" type="text"
      name="email-address" value="" style="background-image:url('/images/icon-search.png');background-size:16px 16px;">
  </fieldset>
</form>
</div>

    <div class="list ma0 pa0 dn dib-l"></div>

    <span class="absolute mt1 mt2-l pr3 right-0 top-0">

<a class="github-button needs-js link primary-color-dark" href="https://github.com/jenkins-zh/jenkins-zh/" data-size="large" data-show-count="false" aria-label="Star Jenkins WeChat GitHub">Star</a>
</span>

  </div>
</nav>

    
    <main role="main" class="content-with-sidebar min-vh-100 pb7 pb0-ns">
      
<main>
  <article class="w-100 ph4 pb5 pb6-ns pt1 pt5-ns">
    <div class="flex-l">
      

      <div class="order-2 w-100 w-20-l ph5-m ph0-l mb4 sticky">





  <aside class="mw5 br3 mv3 nested-links">
    
    
      
LinuxSuRen's avatar
LinuxSuRen 已提交
204
        <h3 class="f4 dib author">
LinuxSuRen's avatar
LinuxSuRen 已提交
205 206 207 208 209
            Zhao Xiaojie
        </h3>

      
      
LinuxSuRen's avatar
LinuxSuRen 已提交
210
        <p class="lh-copy measure center mt0 f6 black-60 bio">
LinuxSuRen's avatar
LinuxSuRen 已提交
211 212
          Contributor of @jenkinsci . Jenkins press contact in China.
        </p>
LinuxSuRen's avatar
LinuxSuRen 已提交
213
      
LinuxSuRen's avatar
LinuxSuRen 已提交
214
      <a href="https://github.com/LinuxSuRen" target="_blank" class="link dim v-mid dib">
LinuxSuRen's avatar
LinuxSuRen 已提交
215 216 217 218 219
        <svg version="1.1" fill="gray" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="18" viewBox="0 0 27 32">
<path d="M9.28 21.44q0.064-0.128-0.064-0.256-0.16-0.128-0.256-0.032-0.064 0.128 0.064 0.224 0.16 0.128 0.256 0.064zM8.768 20.704q-0.096-0.128-0.224-0.096-0.096 0.096 0 0.224 0.128 0.16 0.224 0.096t0-0.224zM8.032 19.968q0.032-0.064-0.096-0.128-0.128-0.032-0.128 0.032-0.064 0.096 0.064 0.16 0.16 0.032 0.16-0.064zM8.416 20.384q0.032 0 0.032-0.064t-0.064-0.096q-0.128-0.128-0.192-0.064t0.032 0.192q0.096 0.096 0.192 0.032zM9.952 21.728q0.032-0.128-0.16-0.192-0.16-0.064-0.224 0.064t0.16 0.192q0.16 0.064 0.224-0.064zM10.688 21.792q0-0.16-0.192-0.16t-0.192 0.16 0.192 0.128 0.192-0.128zM11.392 21.664q-0.032-0.128-0.224-0.096t-0.16 0.16q0.032 0.16 0.192 0.096t0.192-0.16zM22.848 16q0-3.776-2.656-6.464t-6.464-2.688-6.464 2.688-2.688 6.464q0 2.976 1.76 5.376t4.48 3.296q0.32 0.064 0.48-0.096t0.16-0.352q0-0.928-0.032-1.696-0.096 0.032-0.256 0.064t-0.64 0.032-0.864-0.096-0.768-0.352-0.544-0.736q-0.416-1.056-1.024-1.312-0.032-0.032-0.064-0.064l-0.16-0.16t-0.096-0.16 0.064-0.128 0.352-0.064q0.096 0 0.256 0.032t0.544 0.288 0.576 0.64q0.288 0.48 0.672 0.736t0.768 0.256 0.704-0.064 0.512-0.16q0.128-0.864 0.608-1.248-0.896-0.096-1.536-0.32t-1.312-0.704-0.992-1.344-0.352-2.144q0-1.408 0.96-2.464-0.448-1.088 0.096-2.4 0.32-0.128 0.96 0.128t1.088 0.512l0.448 0.288q1.056-0.288 2.304-0.288t2.272 0.288q0.192-0.128 0.512-0.32t0.992-0.448 1.024-0.16q0.512 1.312 0.096 2.4 0.928 1.056 0.928 2.464 0 1.024-0.256 1.792t-0.64 1.248-0.928 0.8-1.12 0.448-1.216 0.224q0.608 0.544 0.608 1.696 0 0.704 0 1.6t-0.032 0.896q0 0.224 0.16 0.352t0.48 0.096q2.752-0.928 4.512-3.296t1.728-5.376zM27.424 7.424v17.152q0 2.112-1.504 3.616t-3.648 1.536h-17.12q-2.144 0-3.648-1.536t-1.504-3.616v-17.152q0-2.112 1.504-3.616t3.648-1.536h17.12q2.144 0 3.648 1.536t1.504 3.616z"></path>
</svg>

      </a>
LinuxSuRen's avatar
LinuxSuRen 已提交
220 221 222 223 224 225 226 227 228

  
  <div>
    作者:<span class="originalAuthor">oleg_nenashev</span>
    <div>
      <a class="originalLink" href="" target="_blank">原文链接</a>
    </div>
  </div>
  
LinuxSuRen's avatar
LinuxSuRen 已提交
229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244
  </aside>


<aside class="fixed-lTK mw5-l right-0 f6 bl-l b--moon-gray pv4 pv0-ns ph4-l nested-list-reset nested-links nested-copy-line-height">
	

	<div date-pref>
		<a href=".." class="dib f6 pl1 hover-bg-light-gray br-100">
			<svg class="fill-current" height="30px" viewBox="0 0 24 24" width="30px" xmlns="http://www.w3.org/2000/svg">
      <path transform="rotate(90 11.704999923706055,12.000000000000002) " d="m15.41,7.41l-1.41,-1.41l-6,6l6,6l1.41,-1.41l-4.58,-4.59l4.58,-4.59z" id="svg_1"/>
    <path d="M0 0h24v24H0z" fill="none"/>
</svg>

		</a>
		
		
LinuxSuRen's avatar
LinuxSuRen 已提交
245
			<a href="https://jenkins-zh.cn/wechat/articles/2018/12/2018-12-19-jenkins-survey/" class="dib f6 pl1 hover-bg-light-gray br-100" title="2018年 Jenkins 国内使用情况调查问卷 ">
LinuxSuRen's avatar
LinuxSuRen 已提交
246 247 248 249 250 251 252 253 254
				<svg class="fill-current" height="30px" viewBox="0 0 24 24" width="30px" xmlns="http://www.w3.org/2000/svg">
    <path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/>
    <path d="M0 0h24v24H0z" fill="none"/>
</svg>

			</a>
		

		
LinuxSuRen's avatar
LinuxSuRen 已提交
255
			<a href="https://jenkins-zh.cn/wechat/articles/2018/12/2018-12-26-official-docker-image/" class="dib f6 pr1 hover-bg-light-gray br-100" title="Docker Hub 上的官方 Jenkins 镜像">
LinuxSuRen's avatar
LinuxSuRen 已提交
256 257 258 259 260 261 262 263 264 265 266 267 268
			<svg class="fill-current" height="30px" viewBox="0 0 24 24" width="30px" xmlns="http://www.w3.org/2000/svg">
    <path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/>
    <path d="M0 0h24v24H0z" fill="none"/>
</svg>

			</a>
		
	</div>

</aside>
</div>

      <div class="order-1 w-80-l mw8 ph0 ph5-ns mid-gray nested-copy-line-height no-underline nested-links nested-img nested-copy-seperator nested-blockquote mt0-ns" style="flex-grow:1;">
LinuxSuRen's avatar
LinuxSuRen 已提交
269
        <button id="copyMe" onclick="copyMe()" style="display: none">Copy Me</button>
LinuxSuRen's avatar
LinuxSuRen 已提交
270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507
        <div class="documentation-copy center mw8">
          <div id="readout" class="fixed right-0 bottom-0">
          </div>
          <header class="flex-none w-100">
  
  <h1 class="lh-title mb3 mv0 pt3 primary-color-dark">Custom WAR Packager</h1>
</header>

<aside class="bt bw1 pt3 mt2 mid-gray b--mid-gray fn w-100">
  
    <div class="f4 fw4 lh-copy">
      打造你自己的 Jenkins!了解自定义 WAR/Docker Packager
    </div>
  

  
</aside>



<div class="prose" id="prose">

<p>我打算给 Jenkins 管理员和开发者介绍一个新的工具
<a href="https://github.com/jenkinsci/custom-war-packager">Custom WAR Packager</a>。该工具可以打包 Jenkins 的自定义 WAR 发行版、
<a href="https://github.com/jenkinsci/docker">Docker 镜像</a>
<a href="https://github.com/jenkinsci/jenkinsfile-runner">Jenkinsfile Runner</a> 包。
它可以打包 Jenkins、插件以及配置为开箱即用的发行版。
<code>Custom WAR Packager</code> 是我们在博客
A Cloud Native Jenkins(/blog/2018/09/12/speaker-blog-a-cloud-native-jenkins/) 中介绍过的无状态 <code>Jenkins master</code> 工具链的一部分。这个工具链已经在 <a href="https://jenkins-x.io">Jenkins X</a> 中被使用,用于构建 serverless 镜像(<a href="https://github.com/jenkins-x/jenkins-x-serverless)。">https://github.com/jenkins-x/jenkins-x-serverless)。</a></p>

<p>在这篇文章中,我将会介绍几种 <code>Custom WAR Packager</code> 常见的使用场景。</p>

<p>== 历史</p>

<p>正如 Jenkins 本身一样,<code>Custom WAR Packager</code> 开始于一个小的开发工具。在 Jenkins 内运行集成测试很长时间以来都是一个难题。
对此,我们有三个主要的框架:
    <a href="https://github.com/jenkinsci/jenkins-test-harness">Jenkins Test Harness</a>,
    <a href="https://github.com/jenkinsci/acceptance-test-harness">Acceptance Test Harness</a>,
<a href="https://github.com/jenkinsci/plugin-compat-tester">Plugin Compatibility Tester</a>.
这些框架都需要一个 Jenkins WAR 文件来运行测试。但是假如你想在类似 AWS 一样的自定义环境中进行 Jenkins 测试呢?
或者,你希望基于 <a href="/sigs/cloud-native/pluggable-storage/">Pluggable Storage</a> 的环境也可以复用 Jenkins 流水线测试,来确保没有回归缺陷?</p>

<p>这并不是一个无意义的问题。Jenkins 项目中有重大的活动正在进行:云原生 Jenkins、Jenkins Evergreen 以及 Jenkins X。
这些都需要很多集成测试来保障持续部署流程。为了复用已有的框架,我们需要打包一个自带配置的 WAR 文件,使得可以在已有的框架中运行集成测试。
这正是 Custom WAR Packager 于 2018年4月 创建的原因。到 2018年9月,它相继支持了 Docker 镜像和 Jenkinsfile Runner,
后者由 <a href="https://github.com/kohsuke/">Kohsuke Kawaguchi</a> 创建并由 <a href="https://github.com/ndeloof">Nicolas de Loof</a>
完善。</p>

<p>== 包含的内容?</p>

<p>Custom WAR Packager 是一个工具,可以作为命令行、Maven 插件或者 Docker 来用。
它从用户那获取配置和包。所有内容都由一个 YAML 配置文件管理:</p>

<p>image::/images/post-images/2018-10-16-cwp/cwp_flow.png[Custom WAR Packager 构建流程]</p>

<p>它支持多种输入类型。插件列表可以来自 YAML,<code>pom.xml</code> 或一个 BOM(jep:309[] 提出的 Bill of Materials) 文件。
Custom WAR Packager 不仅支持发布版本,还可以构建部署到
<a href="/blog/2018/05/15/incremental-deployment/">增量仓库</a> (Jenkins 核心及插件的 CD 流程 - jep:305[]),
甚至直接从 Git 或指定目录中构建。它允许构建的包来自任何源,而无需等待官方的发版。
构建过程也非常快,因为,插件已经通过 <code>Commit ID</code> 缓存到了本地的 Maven 仓库中。</p>

<p>Custom WAR Packager 还支持下面的配置选项:</p>

<p>** <a href="https://github.com/jenkinsci/configuration-as-code-plugin">Jenkins 配置即代码</a> 的 YAMl 文件
** <a href="https://wiki.jenkins.io/display/JENKINS/Groovy+Hook+Script">Groovy Hooks</a> (例如:预配置的 init hooks)
** 系统属性</p>

<p>== WAR 打包</p>

<p>每当这个库构建时会打包出来一个 WAR 文件。
通常,Custom WAR Packager 会根据下面对 Jenkins 核心和 JCasC 的配置把所有内容打包的一个 WAR 文件中。</p>

<p>样例配置:</p>

<pre><code class="language-yaml">bundle:
  groupId: &quot;io.jenkins.tools.war-packager.demo&quot;
  artifactId: &quot;blogpost-demo&quot;
  vendor: &quot;Jenkins project&quot;
  description: &quot;Just a demo for the blogpost&quot;
war:
  groupId: &quot;org.jenkins-ci.main&quot;
  artifactId: &quot;jenkins-war&quot;
  source:
    version: 2.138.2
plugins:
  - groupId: &quot;io.jenkins&quot;
    artifactId: &quot;configuration-as-code&quot;
    source:
      # Common release
      version: 1.0-rc2
  - groupId: &quot;io.jenkins&quot;
    artifactId: &quot;artifact-manager-s3&quot;
    source:
      # Incrementals
      version: 1.2-rc259.c9d60bf2f88c
  - groupId: &quot;org.jenkins-ci.plugins.workflow&quot;
    artifactId: &quot;workflow-job&quot;
    source:
      # Git
      git: https://github.com/jglick/workflow-job-plugin.git
      commit: 18d78f305a4526af9cdf3a7b68eb9caf97c7cfbc
  # etc.
systemProperties:
    jenkins.model.Jenkins.slaveAgentPort: &quot;9000&quot;
    jenkins.model.Jenkins.slaveAgentPortEnforce: &quot;true&quot;
groovyHooks:
  - type: &quot;init&quot;
    id: &quot;initScripts&quot;
    source:
      dir: src/main/groovy
casc:
  - id: &quot;jcasc&quot;
    source:
      dir: casc.yml
</code></pre>

<p>== Docker 打包</p>

<p>为了打包 Docker,Custom WAR Packager 使用官方的 Docker 镜像 <a href="https://hub.docker.com/r/jenkins/jenkins/">jenkins/jenkins</a>
或同样格式的其他镜像。构建中,WAR 文件会被该工具所替换。这也就意味着镜像的 <strong>所有</strong> 特色在该自定义构建中都可用:
<code>plugins.txt</code>, Java 选项, Groovy hooks 等等。</p>

<pre><code class="language-yaml">
## ...
## WAR configuration from above
## ...

buildSettings:
  docker:
    build: true
    # Base image
    base: &quot;jenkins/jenkins:2.138.2&quot;
    # Tag to set for the produced image
    tag: &quot;jenkins/custom-war-packager-casc-demo&quot;
</code></pre>

<p>例如:<a href="https://github.com/jenkinsci/custom-war-packager/tree/master/demo/external-logging-elasticsearch">示例</a>
展示了打包带有将构建日志存储到 Elasticsearch 的 Docker 镜像。
尽管这些已经作为了 jep:207[] 和 jep:210[] 的一部分,你还是可以查看这个示例,了解该 Docker 镜像是如何配置、连接到 Elasicsearch、
然后启动外部的日志存储,而不需要改变日志的界面。一个 Docker Compose 文件对于运行整个集群是必要的。</p>

<p>== Jenkinsfile Runner 打包</p>

<p>这可能是 Jenkinsfile Runner 最有意思的模式。
三月份,在开发者列表中 <a href="https://groups.google.com/d/msg/jenkinsci-dev/gjz3CDhi-kk/1mwi_oa0AQAJ">宣布</a>
一个新的项目 <a href="https://github.com/jenkinsci/jenkinsfile-runner">Jenkinsfile Runner</a>
大体的思路是,支持在单一 master 上只运行一次并打印输出到控制台的 Jenkins 流水线。
Jenkinsfile Runner 作为命令或一个 Docker 镜像来运行。
虽然只推荐 Docker 的形式,但是 Custom WAR Packager 都能够生成。
有了 Jenkinsfile Runner 你可以像下面的方式来运行流水线:</p>

<pre><code class="language-sh">docker run --rm -v $PWD/Jenkinsfile:/workspace/Jenkinsfile acmeorg/jenkinsfile-runner
</code></pre>

<p>当我们开始在云原生特别兴趣小组(Cloud Native SIG)中开始研究无状态(也就是“一次”)时,
有一个想法就是使用 Custom WAR Packager 和其他已有的工具(Jenkinsfile Runner, Jenkins Configuration as Code 等)来实现。
也许只是替换 Jenkinsfile Runner 中的 Jenkins 核心的 JAR 以及插件,但这还不够。
为了高效,Jenkinsfile Runner 镜像应该启动的 *很快*。在这个实现中,我们使用了 Jenkins 和 Jenkinsfile Runner 一些实验性的选项,
包括:类加载预缓存、插件解压等等。有了这些后,Jenkins 使用 configuration-as-code 和几十个插件可以在几秒钟内启动。</p>

<p>那么,如何构建自定义 Jenkinsfile Runner 镜像呢?尽管现在还没有发布,我们继续实现上面提到的内容。</p>

<pre><code class="language-yaml">##...
## WAR Configuration from above
##...

buildSettings:
  jenkinsfileRunner:
    source:
      groupId: &quot;io.jenkins&quot;
      artifactId: &quot;jenkinsfile-runner&quot;
      build:
        noCache: true
      source:
        git: https://github.com/jenkinsci/jenkinsfile-runner.git
        commit: 8ff9b1e9a097e629c5fbffca9a3d69750097ecc4
    docker:
      base: &quot;jenkins/jenkins:2.138.2&quot;
      tag: &quot;onenashev/cwp-jenkinsfile-runner-demo&quot;
      build: true
</code></pre>

<p>你可以从 <a href="https://github.com/jenkinsci/custom-war-packager/tree/master/demo/jenkinsfile-runner">这里</a>
找到用 Custom WAR Packager 打包 Jenkinsfile Runner 的例子。</p>

<p>== 更多</p>

<p>还有很多其他的特色没有在本文中提到。例如:它还可以修改 Maven 构建配置或增加、替换 Jenkins 核心中的库(例如:Remoting)。
请查看 <a href="https://github.com/jenkinsci/custom-war-packager/blob/master/README.md">Custom WAR Packager 文档</a>
获取更多信息。这个库中还有很多示例。</p>

<p>如果你有兴趣对这个库做贡献,请创建 PR 并抄送 <a href="https://github.com/oleg-nenashev/">@oleg-nenashev</a>
<a href="https://github.com/raul-arabaolaza">Raul Arabaolaza</a>,第二位维护者正在研究 Jenkins 自动化测试流程。</p>

<p>== 下一步?</p>

<p>还有很多值得改进的地方可以让这个工具更加高效:</p>

<ul>
<li>增加对插件依赖传递的检查以便在构建过程中发现冲突</li>
<li>允许在 YAML 配置文件中设置各种系统属性和 Java 选项</li>
<li>改进 Jenkinsfile Runner 的性能</li>
<li>集成到 Jenkins 集成测试流程中,(查看 Jenkins 流水线库中的 <a href="https://github.com/jenkins-infra/pipeline-library/blob/master/vars/essentialsTest.groovy">essentialsTest()</a>)</li>
</ul>

<p>还有很多其他的任务需要在 Custom WAR Packager 中实现,但是,现在它已经能够让 Jenkins 用户构建他们自己的发行版。</p>

</div>


<aside class="bt bw1 pt3 mt2 mid-gray b--mid-gray fn w-100">

</aside>




<script src="https://utteranc.es/client.js"
        repo="jenkins-zh/jenkins-zh.github.io"
        issue-term="pathname"
        theme="github-light"
        crossorigin="linuxsuren"
        async>
</script>


          

        </div>
      </div>
      

    </div>
  </article>

  <div class="w-100 bg-light-gray">
    <div class="mw7 pa4 center nested-lh-copy lh-copy">
      <h6 class="f4 dark-gray mb2">
LinuxSuRen's avatar
LinuxSuRen 已提交
508
  <a href="https://jenkins-zh.cn/wechat/articles/2018/12/2018-12-5-custom-war-packager/" class="hide-child link primary-color">
LinuxSuRen's avatar
LinuxSuRen 已提交
509 510 511
  <span class="nl3 child"><svg class="grow" fill="" height="14px" viewBox="0 0 24 24" width="14px" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" fill="none"/><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/></svg>
</span>
    “Custom WAR Packager”
LinuxSuRen's avatar
LinuxSuRen 已提交
512
  </a> 更新于:January 1, 0001
LinuxSuRen's avatar
LinuxSuRen 已提交
513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568
</h6>

      <a href="https://github.com/jenkins-zh/jenkins-zh/edit/master/content/wechat/articles/2018/12/2018-12-5-custom-war-packager.md" class="
f6 ph3 pv1 br2 dib  tc ttu mv3 bg-primary-color white hover-bg-green link
" target="_blank">改善此页</a>

      

  
  
  

  <div class="nested-lh-copy">
    <ul class="list dib nested-links ml0 pl0">
      
        <li class="db mb2 b">
          Tags:
        </li>
        
          <li class="db dib-l mr3">
            <a class="tag" href="/tags/tools">
              tools
            </a>
          </li>
        
          <li class="db dib-l mr3">
            <a class="tag" href="/tags/docker">
              docker
            </a>
          </li>
        
          <li class="db dib-l mr3">
            <a class="tag" href="/tags/jenkins-x">
              jenkins-x
            </a>
          </li>
        
          <li class="db dib-l mr3">
            <a class="tag" href="/tags/cloud-native">
              cloud-native
            </a>
          </li>
        
              
      
        
        
      
    </ul>
  </div>


    </div>
  </div>
</main>

LinuxSuRen's avatar
LinuxSuRen 已提交
569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654
<script type="text/javascript">
if(window.location.search == "?copy=true") {
  showCopyBut();
}

function copyMe(){
  var tempElements = [];

  var logoZone = document.createElement("div");
  logoZone.innerHTML = "<a href=\"https://jenkins-zh.cn\"><img width=\"520\" src=\"https://jenkins-zh.cn/wechat/images/grey-backgroud-jenkins-slogan.jpg\"/></a>";
  document.getElementById('prose').append(logoZone);
  tempElements.push(logoZone);
  var doc = document.getElementsByClassName('documentation-copy')[0];

  var articleHeader = document.createElement("div");
  tempElements.push(articleHeader);
  articleHeader.innerHTML = "本文首发于:<a href=\"https:\/\/jenkins-zh.cn\/wechat\/articles\/2018\/12\/2018-12-5-custom-war-packager\/\">Jenkins 中文社区</a>";

  
  var rangeToSelect = document.createRange();
  rangeToSelect.selectNodeContents(doc);

  var data = window.getSelection();
  data.addRange(rangeToSelect);

  tempElements.push(appendArticleFooter(data.getRangeAt(0)));
  data.getRangeAt(0).insertNode(articleHeader);
  document.execCommand("copy", true, null);

  
  for(var i in tempElements) {
    tempElements[i].remove();
  }
  clearSelection();

  hideCopyBut();
}

function clearSelection(){
  window.getSelection().empty();
}

function showCopyBut() {
  document.getElementById('copyMe').style="";
}

function hideCopyBut() {
  document.getElementById('copyMe').style="display:none";
}

function appendArticleFooter(range) {
  var articleFooter = createArticleFooter();
  range.insertNode(articleFooter);
  return articleFooter;
}

function createArticleFooter() {
  var articleFooter = document.createElement("div");
  var authors = document.getElementsByClassName("author");
  var originalAuthors = document.getElementsByClassName("originalAuthor");
  var originalLinks = document.getElementsByClassName("originalLink");
  var articleFooterHtml = "";
  var isTranslated = false;
  if(originalAuthors.length > 0){
    articleFooterHtml += "<div>";
    if(originalLinks.length > 0){
      articleFooterHtml += "<a href=" + originalLinks[0].innerText + ">原文链接</a>&nbsp;&nbsp;&nbsp;&nbsp;";
    }
    articleFooterHtml += "作者:" + originalAuthors[0].innerText;
    articleFooterHtml += "</div>";
    isTranslated = true;
  }
  if(authors.length > 0){
    articleFooterHtml += "<div>";
    if(isTranslated) {
      articleFooterHtml += "译者:" + authors[0].innerText;
    } else {
      articleFooterHtml += "作者:" + authors[0].innerText;
    }
    articleFooterHtml += "</div>";
  }
  articleFooter.innerHTML = articleFooterHtml;
  return articleFooter;
}
</script>

LinuxSuRen's avatar
LinuxSuRen 已提交
655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679
    </main>

    <footer class="bg-primary-color-dark ph4-ns pt4 relative w-100" role="contentinfo">
  <div class="center flex-ns flex-wrap justify-between mw9 w-90">
    <div class="pb3 pt4 w-100 w-50-ns">

      <div class="b f3  light-gray mb3 nested-links tc">
<a href="https://github.com/jenkins-zh/jenkins-zh/graphs/contributors" target="_blank" class="link">Jenkins 社区贡献者</a> 维护<br/>
      </div>

      <ul class="center f6 list ma0 mv3 pa0 tc" style="display:none"><li class="dib mr3"><a href="https://github.com/jenkins-zh/jenkins-zh/issues/new" class="dim link light-gray pv2">File an Issue</a></li></ul>

      <ul class="center f6 list ma0 mv4 pa0 tc">
        <li class="dib mr3">
          <a href="https://twitter.com/suren69811254" target="_blank" class="dim link light-gray pv2">@suren69811254</a>
        </li>
        <li class="dib mr3">
          <a href="https://www.youtube.com/channel/UC63xz3pq26BBgwB3cnwCoqQ" target="_blank" class="dim link light-gray pv2">YouTube</a>
        </li>
      </ul>

      
    </div>

    <div>
LinuxSuRen's avatar
LinuxSuRen 已提交
680 681 682
        <div style="color: #ffffff; display: inline-block; text-align: center; margin-right: 5px; margin-left: 5px;">优酷视频
          <div>
            <a href="https://i.youku.com/jenkinszh" target="_blank">
LinuxSuRen's avatar
LinuxSuRen 已提交
683
              <img src="/images/youku-qrcode.png" with="100" height="100">
LinuxSuRen's avatar
LinuxSuRen 已提交
684 685 686 687 688 689 690 691 692 693 694
            </a>
          </div>
        </div>
        <div style="color: #ffffff; display: inline-block; text-align: center; margin-right: 5px; margin-left: 5px;">微信公众号
          <div>
            <a href="https://mp.weixin.qq.com/s/vifdduC3kRGSIMpyL03yVA" target="_blank">
              <img src="https://jenkins.io/images/jenkins-wechat.png" with="100" height="100">
            </a>
          </div>
        </div>
      </div>
LinuxSuRen's avatar
LinuxSuRen 已提交
695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710

  </div>

  <div class="f7 gray mb5 mb0-ns ph3 w-100" style="display:none"> 
    <p class="dib mr4">Jenkins&reg; is a registered trademark of <a href="https://www.spi-inc.org/" class="link">Software in the Public Interest, Inc.</a></p>
    <p class="dib">Copyright 2018–2019 the original authors.</p>
  </div>


  <div class="bg-primary-color-dark bottom-0 left-0 right-0 dn-l fixed pb3 ph3 w-100"><div  class="globalmenu mobilemenu pb3 dn">
    

<ul class="list hidden dib ph0 ma0 scrolling-touch tc">
  
    <li  class="tl dib ma0 hover-bg-black w-100">
        <a href="/wechat/" class="ttu f6 link primary-color-light overflow hover-white db brand-font  ma0 w-100 pv3 ph4">
LinuxSuRen's avatar
LinuxSuRen 已提交
711
          博客
LinuxSuRen's avatar
LinuxSuRen 已提交
712 713 714
        </a>
    </li>
  
LinuxSuRen's avatar
LinuxSuRen 已提交
715 716 717 718 719 720
    <li  class="tl dib ma0 hover-bg-black w-100">
        <a href="/tutorial/" class="ttu f6 link primary-color-light overflow hover-white db brand-font  ma0 w-100 pv3 ph4">
          教程
        </a>
    </li>
  
LinuxSuRen's avatar
LinuxSuRen 已提交
721 722 723 724 725 726 727
    <li  class="tl dib ma0 hover-bg-black w-100">
        <a href="/event/" class="ttu f6 link primary-color-light overflow hover-white db brand-font  ma0 w-100 pv3 ph4">
          活动
        </a>
    </li>
  
    <li  class="tl dib ma0 hover-bg-black w-100">
LinuxSuRen's avatar
LinuxSuRen 已提交
728 729 730 731 732 733
        <a href="/partner/" class="ttu f6 link primary-color-light overflow hover-white db brand-font  ma0 w-100 pv3 ph4">
          合作伙伴
        </a>
    </li>
  
    <li  class="tl dib ma0 hover-bg-black w-100">
LinuxSuRen's avatar
LinuxSuRen 已提交
734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769
        <a href="/about/" class="ttu f6 link primary-color-light overflow hover-white db brand-font  ma0 w-100 pv3 ph4">
          关于我们
        </a>
    </li>
  
    <li  class="tl dib ma0 hover-bg-black w-100">
        <a href="http://jenkins.io/zh" class="ttu f6 link primary-color-light overflow hover-white db brand-font  ma0 w-100 pv3 ph4">
          Jenkins 官网
        </a>
    </li>
  
</ul>

</div>
<div  class="docsmenu mobilemenu pb3 dn">
    

<ul class="list dib ph0 ma0 scrolling-touch tc">
  
</ul>

</div>

<div class="flex dn-l justify-between">
  <button class="js-toggle flex-auto dib dn-l f6 tc db mt4-ns ph3 pv2 link mr2 white bg-primary-color-dark hover-bg-primary-color ba b--white-40 w-auto" data-target=".globalmenu">Menu</button>

  <button class="js-toggle flex-auto dib dn-l f6 tc db mt4-ns ph3 pv2 link white bg-primary-color-dark hover-bg-primary-color ba b--white-40 w-auto" data-target=".docsmenu">Docs Menu</button>
</div>
</div>

</footer>

    
<link href="/dist/auto-complete.css" rel="stylesheet">
<script type="text/javascript">
    
LinuxSuRen's avatar
LinuxSuRen 已提交
770
        var baseurl = "https:\/\/jenkins-zh.cn\/";
LinuxSuRen's avatar
LinuxSuRen 已提交
771 772 773 774 775 776 777 778
    
</script>
<script src="/dist/lunr.js"></script>
<script src="/dist/autocomplete.js"></script>
<script src="/dist/jquery-3.2.1.min.js"></script>
<script src="/dist/search.js"></script>

<script async defer src="https://buttons.github.io/buttons.js"></script>
LinuxSuRen's avatar
LinuxSuRen 已提交
779 780 781 782 783 784 785 786 787
<script>
    var _hmt = _hmt || [];
    (function() {
      var hm = document.createElement("script");
      hm.src = "https://hm.baidu.com/hm.js?6db234f713318730f0e5f6a95bdd8d47";
      var s = document.getElementsByTagName("script")[0]; 
      s.parentNode.insertBefore(hm, s);
    })();
</script>
LinuxSuRen's avatar
LinuxSuRen 已提交
788 789 790 791 792 793 794
<script>
(function(){
var src = (document.location.protocol == "http:") ? "http://js.passport.qihucdn.com/11.0.1.js?6276dcef5c15f276644151772390c1f9":"https://jspassport.ssl.qhimg.com/11.0.1.js?6276dcef5c15f276644151772390c1f9";
document.write('<script src="' + src + '" id="sozz"><\/script>');
})();
</script>

LinuxSuRen's avatar
LinuxSuRen 已提交
795 796 797

  </body>
</html>