blob: 0bb3e34dd9df834f4d5ae2ba315b1362cd20ecba [file] [log] [blame]
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Jenkins CI Environment &mdash; Apache Cassandra Documentation v4.1</title>
<script type="text/javascript" src="../_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/extra.css" type="text/css" />
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Dependency Management" href="dependencies.html" />
<link rel="prev" title="Working on Documentation" href="documentation.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> Apache Cassandra
</a>
<div class="version">
4.1
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../getting_started/index.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../new/index.html">New Features in Apache Cassandra 4.0</a></li>
<li class="toctree-l1"><a class="reference internal" href="../architecture/index.html">Architecture</a></li>
<li class="toctree-l1"><a class="reference internal" href="../cql/index.html">The Cassandra Query Language (CQL)</a></li>
<li class="toctree-l1"><a class="reference internal" href="../data_modeling/index.html">Data Modeling</a></li>
<li class="toctree-l1"><a class="reference internal" href="../configuration/index.html">Configuring Cassandra</a></li>
<li class="toctree-l1"><a class="reference internal" href="../operating/index.html">Operating Cassandra</a></li>
<li class="toctree-l1"><a class="reference internal" href="../tools/index.html">Cassandra Tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="../troubleshooting/index.html">Troubleshooting</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Contributing to Cassandra</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="gettingstarted.html">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="ide.html">Building and IDE Integration</a></li>
<li class="toctree-l2"><a class="reference internal" href="testing.html">Testing</a></li>
<li class="toctree-l2"><a class="reference internal" href="patches.html">Contributing Code Changes</a></li>
<li class="toctree-l2"><a class="reference internal" href="code_style.html">Code Style</a></li>
<li class="toctree-l2"><a class="reference internal" href="license_compliance.html">License Compliance</a></li>
<li class="toctree-l2"><a class="reference internal" href="how_to_review.html">Review Checklist</a></li>
<li class="toctree-l2"><a class="reference internal" href="how_to_commit.html">How-to Commit</a></li>
<li class="toctree-l2"><a class="reference internal" href="documentation.html">Working on Documentation</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Jenkins CI Environment</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#about-ci-testing-and-apache-cassandra">About CI testing and Apache Cassandra</a></li>
<li class="toctree-l3"><a class="reference internal" href="#setting-up-your-own-jenkins-server">Setting up your own Jenkins server</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#required-plugins">Required plugins</a></li>
<li class="toctree-l4"><a class="reference internal" href="#configure-throttle-category">Configure Throttle Category</a></li>
<li class="toctree-l4"><a class="reference internal" href="#setup-seed-job">Setup seed job</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="dependencies.html">Dependency Management</a></li>
<li class="toctree-l2"><a class="reference internal" href="release_process.html">Release Process</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../faq/index.html">Frequently Asked Questions</a></li>
<li class="toctree-l1"><a class="reference internal" href="../plugins/index.html">Third-Party Plugins</a></li>
<li class="toctree-l1"><a class="reference internal" href="../bugs.html">Reporting Bugs</a></li>
<li class="toctree-l1"><a class="reference internal" href="../contactus.html">Contact us</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">Apache Cassandra</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html">Docs</a> &raquo;</li>
<li><a href="index.html">Contributing to Cassandra</a> &raquo;</li>
<li>Jenkins CI Environment</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/development/ci.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="jenkins-ci-environment">
<h1>Jenkins CI Environment<a class="headerlink" href="#jenkins-ci-environment" title="Permalink to this headline"></a></h1>
<div class="section" id="about-ci-testing-and-apache-cassandra">
<h2>About CI testing and Apache Cassandra<a class="headerlink" href="#about-ci-testing-and-apache-cassandra" title="Permalink to this headline"></a></h2>
<p>Cassandra can be automatically tested using various test suites, that are either implemented based on JUnit or the <a class="reference external" href="https://github.com/riptano/cassandra-dtest">dtest</a> scripts written in Python. As outlined in <a class="reference internal" href="testing.html"><span class="doc">Testing</span></a>, each kind of test suite addresses a different way how to test Cassandra. But in the end, all of them will be executed together on our CI platform at <a class="reference external" href="https://builds.apache.org">builds.apache.org</a>, running <a class="reference external" href="http://jenkins-ci.org">Jenkins</a>.</p>
</div>
<div class="section" id="setting-up-your-own-jenkins-server">
<h2>Setting up your own Jenkins server<a class="headerlink" href="#setting-up-your-own-jenkins-server" title="Permalink to this headline"></a></h2>
<p>Jenkins is an open source solution that can be installed on a large number of platforms. Setting up a custom Jenkins instance for Cassandra may be desirable for users who have hardware to spare, or organizations that want to run Cassandra tests for custom patches before contribution.</p>
<p>Please refer to the Jenkins download and documentation pages for details on how to get Jenkins running, possibly also including slave build executor instances. The rest of the document will focus on how to setup Cassandra jobs in your Jenkins environment.</p>
<div class="section" id="required-plugins">
<h3>Required plugins<a class="headerlink" href="#required-plugins" title="Permalink to this headline"></a></h3>
<p>The following plugins need to be installed additionally to the standard plugins (git, ant, ..).</p>
<p>You can install any missing plugins through the install manager.</p>
<p>Go to <code class="docutils literal notranslate"><span class="pre">Manage</span> <span class="pre">Jenkins</span> <span class="pre">-&gt;</span> <span class="pre">Manage</span> <span class="pre">Plugins</span> <span class="pre">-&gt;</span> <span class="pre">Available</span></code> and install the following plugins and respective dependencies:</p>
<ul class="simple">
<li><p>Copy Artifact Plugin</p></li>
<li><p>description setter plugin</p></li>
<li><p>Javadoc Plugin</p></li>
<li><p>Job DSL</p></li>
<li><p>Post build task</p></li>
<li><p>Publish Over SSH</p></li>
<li><p>JMH Report</p></li>
<li><p>Slack Notification Plugin</p></li>
<li><p>Test stability history</p></li>
<li><p>Throttle Concurrent Builds Plug-in</p></li>
<li><p>Timestamper</p></li>
</ul>
</div>
<div class="section" id="configure-throttle-category">
<h3>Configure Throttle Category<a class="headerlink" href="#configure-throttle-category" title="Permalink to this headline"></a></h3>
<p>Builds that are not containerized (e.g. cqlshlib tests and in-jvm dtests) use local resources for Cassandra (ccm). To prevent these builds running concurrently the <code class="docutils literal notranslate"><span class="pre">Cassandra</span></code> throttle category needs to be created.</p>
<p>This is done under <code class="docutils literal notranslate"><span class="pre">Manage</span> <span class="pre">Jenkins</span> <span class="pre">-&gt;</span> <span class="pre">System</span> <span class="pre">Configuration</span> <span class="pre">-&gt;</span> <span class="pre">Throttle</span> <span class="pre">Concurrent</span> <span class="pre">Builds</span></code>. Enter “Cassandra” for the <code class="docutils literal notranslate"><span class="pre">Category</span> <span class="pre">Name</span></code> and “1” for <code class="docutils literal notranslate"><span class="pre">Maximum</span> <span class="pre">Concurrent</span> <span class="pre">Builds</span> <span class="pre">Per</span> <span class="pre">Node</span></code>.</p>
</div>
<div class="section" id="setup-seed-job">
<h3>Setup seed job<a class="headerlink" href="#setup-seed-job" title="Permalink to this headline"></a></h3>
<p>Config <code class="docutils literal notranslate"><span class="pre">New</span> <span class="pre">Item</span></code></p>
<ul class="simple">
<li><p>Name it <code class="docutils literal notranslate"><span class="pre">Cassandra-Job-DSL</span></code></p></li>
<li><p>Select <code class="docutils literal notranslate"><span class="pre">Freestyle</span> <span class="pre">project</span></code></p></li>
</ul>
<p>Under <code class="docutils literal notranslate"><span class="pre">Source</span> <span class="pre">Code</span> <span class="pre">Management</span></code> select Git using the repository: <code class="docutils literal notranslate"><span class="pre">https://github.com/apache/cassandra-builds</span></code></p>
<p>Under <code class="docutils literal notranslate"><span class="pre">Build</span></code>, confirm <code class="docutils literal notranslate"><span class="pre">Add</span> <span class="pre">build</span> <span class="pre">step</span></code> -&gt; <code class="docutils literal notranslate"><span class="pre">Process</span> <span class="pre">Job</span> <span class="pre">DSLs</span></code> and enter at <code class="docutils literal notranslate"><span class="pre">Look</span> <span class="pre">on</span> <span class="pre">Filesystem</span></code>: <code class="docutils literal notranslate"><span class="pre">jenkins-dsl/cassandra_job_dsl_seed.groovy</span></code></p>
<p>Generated jobs will be created based on the Groovy script’s default settings. You may want to override settings by checking <code class="docutils literal notranslate"><span class="pre">This</span> <span class="pre">project</span> <span class="pre">is</span> <span class="pre">parameterized</span></code> and add <code class="docutils literal notranslate"><span class="pre">String</span> <span class="pre">Parameter</span></code> for on the variables that can be found in the top of the script. This will allow you to setup jobs for your own repository and branches (e.g. working branches).</p>
<p><strong>When done, confirm “Save”</strong></p>
<p>You should now find a new entry with the given name in your project list. However, building the project will still fail and abort with an error message <cite>“Processing DSL script cassandra_job_dsl_seed.groovy ERROR: script not yet approved for use”</cite>. Goto <code class="docutils literal notranslate"><span class="pre">Manage</span> <span class="pre">Jenkins</span></code> -&gt; <code class="docutils literal notranslate"><span class="pre">In-process</span> <span class="pre">Script</span> <span class="pre">Approval</span></code> to fix this issue. Afterwards you should be able to run the script and have it generate numerous new jobs based on the found branches and configured templates.</p>
<p>Jobs are triggered by either changes in Git or are scheduled to execute periodically, e.g. on daily basis. Jenkins will use any available executor with the label “cassandra”, once the job is to be run. Please make sure to make any executors available by selecting <code class="docutils literal notranslate"><span class="pre">Build</span> <span class="pre">Executor</span> <span class="pre">Status</span></code> -&gt; <code class="docutils literal notranslate"><span class="pre">Configure</span></code> -&gt; Add “<code class="docutils literal notranslate"><span class="pre">cassandra</span></code>” as label and save.</p>
<p>Executors need to have “JDK 1.8 (latest)” installed. This is done under <code class="docutils literal notranslate"><span class="pre">Manage</span> <span class="pre">Jenkins</span> <span class="pre">-&gt;</span> <span class="pre">Global</span> <span class="pre">Tool</span> <span class="pre">Configuration</span> <span class="pre">-&gt;</span> <span class="pre">JDK</span> <span class="pre">Installations…</span></code>. Executors also need to have the virtualenv package installed on their system.</p>
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="dependencies.html" class="btn btn-neutral float-right" title="Dependency Management" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="documentation.html" class="btn btn-neutral float-left" title="Working on Documentation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2020, The Apache Cassandra team
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>