-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
135 lines (109 loc) · 15.7 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<html><head><title>Orkestra</title><meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="author" content="tech.orkestra" /><meta name="description" content="Functional DevOps with Scala and Kubernetes" /><meta name="og:image" content="/img/poster.png" /><meta name="og:title" content="Orkestra" /><meta name="og:site_name" content="Orkestra" /><meta name="og:url" content="https://orkestra.tech" /><meta name="og:type" content="website" /><meta name="og:description" content="Functional DevOps with Scala and Kubernetes" /><link rel="icon" type="image/png" href="/img/favicon.png" /><meta name="twitter:title" content="Orkestra" /><meta name="twitter:image" content="https://orkestra.techimg/poster.png" /><meta name="twitter:description" content="Functional DevOps with Scala and Kubernetes" /><meta name="twitter:card" content="summary_large_image" /><link rel="icon" type="image/png" sizes="16x16" href="/img/favicon16x16.png" /><link rel="icon" type="image/png" sizes="24x24" href="/img/favicon24x24.png" /><link rel="icon" type="image/png" sizes="32x32" href="/img/favicon32x32.png" /><link rel="icon" type="image/png" sizes="48x48" href="/img/favicon48x48.png" /><link rel="icon" type="image/png" sizes="57x57" href="/img/favicon57x57.png" /><link rel="icon" type="image/png" sizes="60x60" href="/img/favicon60x60.png" /><link rel="icon" type="image/png" sizes="64x64" href="/img/favicon64x64.png" /><link rel="icon" type="image/png" sizes="70x70" href="/img/favicon70x70.png" /><link rel="icon" type="image/png" sizes="72x72" href="/img/favicon72x72.png" /><link rel="icon" type="image/png" sizes="76x76" href="/img/favicon76x76.png" /><link rel="icon" type="image/png" sizes="96x96" href="/img/favicon96x96.png" /><link rel="icon" type="image/png" sizes="114x114" href="/img/favicon114x114.png" /><link rel="icon" type="image/png" sizes="120x120" href="/img/favicon120x120.png" /><link rel="icon" type="image/png" sizes="128x128" href="/img/favicon128x128.png" /><link rel="icon" type="image/png" sizes="144x144" href="/img/favicon144x144.png" /><link rel="icon" type="image/png" sizes="150x150" href="/img/favicon150x150.png" /><link rel="icon" type="image/png" sizes="152x152" href="/img/favicon152x152.png" /><link rel="icon" type="image/png" sizes="196x196" href="/img/favicon196x196.png" /><link rel="icon" type="image/png" sizes="310x310" href="/img/favicon310x310.png" /><link rel="icon" type="image/png" sizes="310x150" href="/img/favicon310x150.png" /><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" /><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" /><link rel="stylesheet" href="/highlight/styles/atom-one-light.css" /><link rel="stylesheet" href="/css/style.css" /><link rel="stylesheet" href="/css/palette.css" /><link rel="stylesheet" href="/css/codemirror.css" /><link rel="stylesheet" href="/css/override.css" /></head><body><header id="site-header"><div class="navbar-wrapper"><div class="container"><div class="row"><div class="col-xs-6"><a href="/" class="brand"><div class="icon-wrapper"><span>Orkestra</span></div></a></div><div class="col-xs-6"><nav class="text-right"><ul class=""><li><a href="https://github.com/Orkestra-Tech/orkestra"><i class="fa fa-github"></i><span class="hidden-xs">GitHub</span></a></li></ul></nav></div></div></div></div><div class="jumbotron"><div class="container"><h1 class="text-center">Functional DevOps with Scala and Kubernetes</h1><h2></h2><p class="text-center"><a href="https://github.com/Orkestra-Tech/orkestra" class="btn btn-outline-inverse">View on GitHub</a></p></div></div><div><ul class="horizontalNav"> <li><a class="" href="/jobsboards.html">Jobs & Boards</a></li> <li><a class="" href="/config.html">Config</a></li> <li><a class="" href="/parameters.html">Parameters</a></li> <li><a class="" href="/stages.html">Stages</a></li> <li><a class="" href="/shells.html">Shell scripts</a></li> <li><a class="" href="/directories.html">Directories</a></li> <li><a class="" href="/secrets.html">Secrets</a></li> <li><a class="" href="/triggers.html">Triggering jobs</a></li> <li><a class="" href="/containers.html">Containers</a></li> <li><a class="" href="/runid.html">RunId</a></li> <li><a class="" href="/plugins/">Plugins</a></li> </ul></div></header><main id="site-main"><section class="use"><div class="container"><div id="content"><p><img alt="Orkestra" src="https://raw.githubusercontent.com/orkestracd/orkestra/master/docs/src/main/resources/microsite/img/orkestra.png" srcset="https://raw.githubusercontent.com/orkestracd/orkestra/master/docs/src/main/resources/microsite/img/orkestra.png 2x" /></p>
<p><a href="https://index.scala-lang.org/orkestracd/orkestra/orkestra-core"><img src="https://index.scala-lang.org/orkestracd/orkestra/orkestra-core/latest.svg?color=blue" alt="Latest version" /></a>
<a href="https://gitter.im/OrkestraCD/orkestra"><img src="https://img.shields.io/badge/gitter-join%20chat-green.svg" alt="Gitter" /></a></p>
<p>Orkestra is an Open Source Continuous Integration / Continuous Deployment server as a library running on
<a href="https://kubernetes.io">Kubernetes</a>.<br />
It leverages Kubernetes concepts such as Jobs or Secrets, and configuration as code in <a href="https://scala-lang.org">Scala</a>
to take the most of compile time type safety and compatibility with Scala or Java libraries.</p>
<p>Key features:</p>
<ul>
<li>Configured completely via code which can be version controlled</li>
<li>Fully scalable</li>
<li>Highly Available</li>
<li>Extendable via any Scala/Java libraries</li>
</ul>
<h1 id="quick-start">Quick start</h1>
<h2 id="requirements">Requirements</h2>
<ul>
<li><a href="https://java.com/download">Java</a></li>
<li><a href="https://scala-sbt.org">SBT</a></li>
<li><a href="https://kubernetes.io">Kubernetes</a> or <a href="https://github.com/kubernetes/minikube">Minikube</a></li>
</ul>
<h2 id="installation">Installation</h2>
<p><em>project/plugins.sbt</em>:</p>
<div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">addSbtPlugin</span><span class="o">(</span><span class="s">"tech.orkestra"</span> <span class="o">%</span> <span class="s">"sbt-orkestra"</span> <span class="o">%</span> <span class="s">"<latest version>"</span><span class="o">)</span>
</code></pre></div></div>
<p><em>build.sbt</em>:</p>
<div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">lazy</span> <span class="k">val</span> <span class="n">orkestra</span> <span class="k">=</span> <span class="n">orkestraProject</span><span class="o">(</span><span class="s">"orkestra"</span><span class="o">,</span> <span class="n">file</span><span class="o">(</span><span class="s">"orkestra"</span><span class="o">))</span>
<span class="o">.</span><span class="n">settings</span><span class="o">(</span>
<span class="n">libraryDependencies</span> <span class="o">++=</span> <span class="nc">Seq</span><span class="o">(</span>
<span class="s">"tech.orkestra"</span> <span class="o">%%%</span> <span class="s">"orkestra-github"</span> <span class="o">%</span> <span class="n">orkestraVersion</span><span class="o">,</span> <span class="c1">// Optional Github plugin
</span> <span class="s">"tech.orkestra"</span> <span class="o">%%%</span> <span class="s">"orkestra-cron"</span> <span class="o">%</span> <span class="n">orkestraVersion</span><span class="o">,</span> <span class="c1">// Optional Cron plugin
</span> <span class="s">"tech.orkestra"</span> <span class="o">%%</span> <span class="s">"orkestra-lock"</span> <span class="o">%</span> <span class="n">orkestraVersion</span> <span class="c1">// Optional Lock plugin
</span> <span class="o">)</span>
<span class="o">)</span>
<span class="k">lazy</span> <span class="k">val</span> <span class="n">orkestraJVM</span> <span class="k">=</span> <span class="n">orkestra</span><span class="o">.</span><span class="n">jvm</span>
<span class="k">lazy</span> <span class="k">val</span> <span class="n">orkestraJS</span> <span class="k">=</span> <span class="n">orkestra</span><span class="o">.</span><span class="n">js</span>
</code></pre></div></div>
<h2 id="simple-example">Simple example</h2>
<p>Given the above <a href="#installation">installation</a>, here is a minimal project with one job:</p>
<p><em>orkestra/src/main/scala/orkestra.scala</em>:</p>
<div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">import</span> <span class="nn">tech.orkestra._</span>
<span class="k">import</span> <span class="nn">tech.orkestra.Dsl._</span>
<span class="k">import</span> <span class="nn">tech.orkestra.board._</span>
<span class="k">import</span> <span class="nn">tech.orkestra.job._</span>
<span class="k">import</span> <span class="nn">tech.orkestra.model._</span>
<span class="c1">// We extend OrkestraServer to create the web server
</span><span class="k">object</span> <span class="nc">Orkestra</span> <span class="k">extends</span> <span class="nc">OrkestraServer</span> <span class="o">{</span>
<span class="c1">// Configuring the UI
</span> <span class="k">lazy</span> <span class="k">val</span> <span class="n">board</span> <span class="k">=</span> <span class="n">deployFrontendJobBoard</span>
<span class="c1">// Configuring the jobs
</span> <span class="k">lazy</span> <span class="k">val</span> <span class="n">jobs</span> <span class="k">=</span> <span class="nc">Set</span><span class="o">(</span><span class="n">deployFrontendJob</span><span class="o">)</span>
<span class="c1">// Creating the job and configuring UI related settings
</span> <span class="k">lazy</span> <span class="k">val</span> <span class="n">deployFrontendJobBoard</span> <span class="k">=</span> <span class="nc">JobBoard</span><span class="o">[()</span> <span class="k">=></span> <span class="kt">Unit</span><span class="o">](</span><span class="nc">JobId</span><span class="o">(</span><span class="s">"deployFrontend"</span><span class="o">),</span> <span class="s">"Deploy Frontend"</span><span class="o">)()</span>
<span class="c1">// Creating the job from the above definition (this will be compiled to JVM)
</span> <span class="k">lazy</span> <span class="k">val</span> <span class="n">deployFrontendJob</span> <span class="k">=</span> <span class="nc">Job</span><span class="o">(</span><span class="n">deployFrontendJobBoard</span><span class="o">)</span> <span class="o">{</span> <span class="k">implicit</span> <span class="n">workDir</span> <span class="k">=></span> <span class="o">()</span> <span class="k">=></span>
<span class="n">println</span><span class="o">(</span><span class="s">"Deploying Frontend"</span><span class="o">)</span>
<span class="o">}</span>
<span class="o">}</span>
</code></pre></div></div>
<p>This example is described in <a href="https://orkestra.tech/jobsboards.html">Jobs & Boards</a>.</p>
<p><a href="https://github.com/orkestracd/orkestra/tree/master/examples">See example projects</a></p>
<h2 id="deployment-on-kubernetes-with-minikube">Deployment on Kubernetes with Minikube</h2>
<p>We provide some basic Kubernetes Deployment in <a href="https://github.com/orkestracd/orkestra/tree/master/examples/kubernetes-dev">kubernetes-dev</a>
that you can use to deploy on a dev environment.<br />
Assuming that you are in one of the <a href="https://github.com/orkestracd/orkestra/tree/master/examples">example projects</a>
(or in your own project), here is how to deploy on Kubernetes with Minikube:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>minikube start --memory 4096 # Start Minikube
eval `minikube docker-env` # Make docker use the docker engine of Minikube
sbt orkestraJVM/Docker/publishLocal # Publish the docker artifact
kubectl apply -f ../kubernetes-dev # Apply the deployment to Kubernetes
kubectl proxy # Proxy the Kubernetes api
</code></pre></div></div>
<p>Visit Orkestra on <code class="highlighter-rouge">http://127.0.0.1:8001/api/v1/namespaces/orkestra/services/orkestra:http/proxy</code>.<br />
You can troubleshoot any deployment issue with <code class="highlighter-rouge">minikube dashboard</code>.</p>
<p>More on how to configure the deployment in <a href="https://orkestra.tech/config.html">Config</a>.</p>
<h1 id="documentation">Documentation</h1>
<p>Find all the documentation on <a href="https://orkestra.tech">https://orkestra.tech</a>:</p>
<ul>
<li><a href="https://orkestra.tech/jobsboards.html">Jobs & Boards</a></li>
<li><a href="https://orkestra.tech/config.html">Config</a></li>
<li><a href="https://orkestra.tech/parameters.html">Parameters</a></li>
<li><a href="https://orkestra.tech/stages.html">Stages</a></li>
<li><a href="https://orkestra.tech/shells.html">Shell scripts</a></li>
<li><a href="https://orkestra.tech/directories.html">Directories</a></li>
<li><a href="https://orkestra.tech/secrets.html">Secrets</a></li>
<li><a href="https://orkestra.tech/triggers.html">Triggering jobs</a></li>
<li><a href="https://orkestra.tech/runid.html">RunId</a></li>
<li><a href="https://orkestra.tech/containers.html">Containers</a></li>
<li><a href="https://orkestra.tech/plugins/">Plugins</a></li>
</ul>
<p>Talks and articles:</p>
<ul>
<li><a href="https://itnext.io/functional-devops-with-scala-a-kubernetes-3d7c91bca72f"><em>Functional DevOps with Scala and Kubernetes</em></a> article from <a href="https://twitter.com/JoanG38">Joan Goyeau</a></li>
<li><em>Functional DevOps with Scala and Kubernetes</em> talk from <a href="https://twitter.com/JoanG38">Joan Goyeau</a></li>
</ul>
<h1 id="origins-of-orkestra">Origins of Orkestra</h1>
<p><a href="https://drivetribe.com"><img alt="DriveTribe" src="https://raw.githubusercontent.com/orkestracd/orkestra/master/docs/src/main/resources/microsite/img/drivetribe.png" srcset="https://raw.githubusercontent.com/orkestracd/orkestra/master/docs/src/main/resources/microsite/img/drivetribe.png 2x" /></a></p>
<p>Orkestra has been created at <a href="https://drivetribe.com">DriveTribe</a> by its Scala backend team that had to do DevOps. Obsessed by functional programming they decided to apply the same paradigm to their DevOps.</p>
<h1 id="related-projects">Related projects</h1>
<ul>
<li><a href="https://jenkins.io">Jenkins</a></li>
<li><a href="https://github.com/jenkinsci/kubernetes-plugin">Kubernetes Plugin for Jenkins</a></li>
</ul>
</div></div></section><section class="technologies"><div class="container"><div class="row"></div></div></section></main><footer id="site-footer"><div class="container"><div class="row"><div class="col-xs-6"><p>Orkestra is designed and developed by <a href="https://orkestra.tech" target="_blank">tech.orkestra</a></p></div><div class="col-xs-6"><p class="text-right"><a href="https://github.com/Orkestra-Tech/orkestra"><span class="fa fa-github"></span>View on GitHub</a></p></div></div><div class="row"><div class="col-xs-6"><p>Website built with <a href="https://47deg.github.io/sbt-microsites/" target="_blank">Sbt-microsites</a> - © 2016 <a href="https://www.47deg.com/" target="_blank">47 Degrees</a></p></div></div></div></footer><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script><script src="/highlight/highlight.pack.js"></script><script>hljs.configure({
languages:['scala','java','bash']
});
hljs.initHighlighting();
</script><script>((window.gitter = {}).chat = {}).options = {
room: 'orkestra-tech/Orkestra'};</script><script src="https://sidecar.gitter.im/dist/sidecar.v1.js"></script></body></html>