{"id":26646831,"url":"https://github.com/Orkestra-Tech/orkestra","last_synced_at":"2025-03-24T23:40:01.883Z","repository":{"id":57724718,"uuid":"135275252","full_name":"Orkestra-Tech/orkestra","owner":"Orkestra-Tech","description":"Functional DevOps with Scala and Kubernetes","archived":false,"fork":false,"pushed_at":"2019-01-20T04:30:03.000Z","size":1913,"stargazers_count":102,"open_issues_count":6,"forks_count":4,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-24T23:39:56.824Z","etag":null,"topics":["cd","ci","continuous-delivery","continuous-deployment","continuous-integration","devops","functional-devops","functional-programming","kubernetes","orkestra","scala"],"latest_commit_sha":null,"homepage":"https://orkestra.tech","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Orkestra-Tech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-05-29T09:46:51.000Z","updated_at":"2024-12-31T02:28:04.000Z","dependencies_parsed_at":"2022-08-30T06:11:22.736Z","dependency_job_id":null,"html_url":"https://github.com/Orkestra-Tech/orkestra","commit_stats":null,"previous_names":["orkestracd/orkestra","orchestracd/orchestra"],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Orkestra-Tech%2Forkestra","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Orkestra-Tech%2Forkestra/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Orkestra-Tech%2Forkestra/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Orkestra-Tech%2Forkestra/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Orkestra-Tech","download_url":"https://codeload.github.com/Orkestra-Tech/orkestra/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245372216,"owners_count":20604488,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cd","ci","continuous-delivery","continuous-deployment","continuous-integration","devops","functional-devops","functional-programming","kubernetes","orkestra","scala"],"created_at":"2025-03-24T23:40:00.960Z","updated_at":"2025-03-24T23:40:01.875Z","avatar_url":"https://github.com/Orkestra-Tech.png","language":"Scala","funding_links":[],"categories":["CI/CD"],"sub_categories":["Spring Cloud框架"],"readme":"\u003cimg alt=\"Orkestra\" src=\"https://raw.githubusercontent.com/orkestra-tech/orkestra/master/docs/src/main/resources/microsite/img/orkestra.png\" srcset=\"https://raw.githubusercontent.com/orkestra-tech/orkestra/master/docs/src/main/resources/microsite/img/orkestra.png 2x\"\u003e\n\n[![Latest version](https://index.scala-lang.org/orkestra-tech/orkestra/orkestra-core/latest.svg?color=blue)](https://index.scala-lang.org/orkestra-tech/orkestra/orkestra-core)\n[![Gitter](https://img.shields.io/badge/gitter-join%20chat-green.svg)](https://gitter.im/Orkestra-Tech/orkestra)\n\nOrkestra is an Open Source Continuous Integration / Continuous Deployment server as a library running on\n[Kubernetes](https://kubernetes.io).  \nIt leverages Kubernetes concepts such as Jobs or Secrets, and configuration as code in [Scala](https://scala-lang.org)\nto take the most of compile time type safety and compatibility with Scala or Java libraries.\n\nKey features:\n* Configured completely via code which can be version controlled\n* Fully scalable\n* Highly Available\n* Extendable via any Scala/Java libraries\n\n\n# Quick start\n\n## Requirements\n\n- [Java](https://java.com/download)\n- [SBT](https://scala-sbt.org)\n- [Kubernetes](https://kubernetes.io) or [Minikube](https://github.com/kubernetes/minikube)\n\n## Installation\n\n*project/plugins.sbt*:\n```scala\naddSbtPlugin(\"tech.orkestra\" % \"sbt-orkestra\" % \"\u003clatest version\u003e\")\n```\n*build.sbt*:\n```scala\nlazy val orkestra = orkestraProject(\"orkestra\", file(\"orkestra\"))\n  .settings(\n    libraryDependencies ++= Seq(\n      \"tech.orkestra\" %%% \"orkestra-github\" % orkestraVersion, // Optional Github plugin\n      \"tech.orkestra\" %%% \"orkestra-cron\" % orkestraVersion, // Optional Cron plugin\n      \"tech.orkestra\" %% \"orkestra-lock\" % orkestraVersion // Optional Lock plugin\n    )\n  )\n```\n\n## Simple example\n\nGiven the above [installation](#installation), here is a minimal project with one job:\n\n*orkestra/src/main/scala/orkestra.scala*:\n```tut:silent\nimport tech.orkestra._\nimport tech.orkestra.Dsl._\nimport tech.orkestra.board._\nimport tech.orkestra.job._\nimport tech.orkestra.model._\n\n// We extend OrkestraServer to create the web server\nobject Orkestra extends OrkestraServer {\n  // Configuring the UI\n  lazy val board = deployFrontendJobBoard\n  // Configuring the jobs\n  lazy val jobs = Set(deployFrontendJob)\n  \n  // Creating the job and configuring UI related settings\n  lazy val deployFrontendJobBoard = JobBoard[() =\u003e Unit](JobId(\"deployFrontend\"), \"Deploy Frontend\")()\n  // Creating the job from the above definition (this will be compiled to JVM)\n  lazy val deployFrontendJob = Job(deployFrontendJobBoard) { implicit workDir =\u003e () =\u003e\n    println(\"Deploying Frontend\")\n  }\n}\n```\nThis example is described in [Jobs \u0026 Boards](https://orkestra.tech/jobsboards.html).\n\n[See example projects](https://github.com/orkestra-tech/orkestra/tree/master/examples)\n\n## Deployment on Kubernetes with Minikube\n\nWe provide some basic Kubernetes Deployment in [kubernetes-dev](https://github.com/orkestra-tech/orkestra/tree/master/examples/kubernetes-dev)\nthat you can use to deploy on a dev environment.  \nAssuming that you are in one of the [example projects](https://github.com/orkestra-tech/orkestra/tree/master/examples)\n(or in your own project), here is how to deploy on Kubernetes with Minikube:\n```\nminikube start --memory 4096              # Start Minikube\neval `minikube docker-env`                # Make docker use the docker engine of Minikube\nsbt orkestraJVM/Docker/publishLocal       # Publish the docker artifact\nkubectl apply -f ../kubernetes-dev        # Apply the deployment to Kubernetes\nkubectl proxy                             # Proxy the Kubernetes api\n```\nVisit Orkestra on `http://127.0.0.1:8001/api/v1/namespaces/orkestra/services/orkestra:http/proxy`.  \nYou can troubleshoot any deployment issue with `minikube dashboard`.\n\nMore on how to configure the deployment in [Config](https://orkestra.tech/config.html).\n\n\n# Documentation\n\nFind all the documentation on [https://orkestra.tech](https://orkestra.tech):\n- [Jobs \u0026 Boards](https://orkestra.tech/jobsboards.html)\n- [Config](https://orkestra.tech/config.html)\n- [Parameters](https://orkestra.tech/parameters.html)\n- [Stages](https://orkestra.tech/stages.html)\n- [Shell scripts](https://orkestra.tech/shells.html)\n- [Directories](https://orkestra.tech/directories.html)\n- [Secrets](https://orkestra.tech/secrets.html)\n- [Triggering jobs](https://orkestra.tech/triggers.html)\n- [RunId](https://orkestra.tech/runid.html)\n- [Containers](https://orkestra.tech/containers.html)\n- [Plugins](https://orkestra.tech/plugins/)\n\nTalks and articles:\n- [*Functional DevOps with Scala and Kubernetes*](https://itnext.io/functional-devops-with-scala-a-kubernetes-3d7c91bca72f) article from [Joan Goyeau](https://twitter.com/JoanG38)\n- [*Functional DevOps with Scala and Kubernetes*](https://skillsmatter.com/skillscasts/12343-orchestra-devops-with-scala-and-kubernetes) talk from [Joan Goyeau](https://twitter.com/JoanG38)\n\n\n# Origins of Orkestra\n\n\u003ca href=\"https://drivetribe.com\"\u003e\u003cimg alt=\"DriveTribe\" src=\"https://raw.githubusercontent.com/orkestra-tech/orkestra/master/docs/src/main/resources/microsite/img/drivetribe.png\" srcset=\"https://raw.githubusercontent.com/orkestra-tech/orkestra/master/docs/src/main/resources/microsite/img/drivetribe.png 2x\"\u003e\u003c/a\u003e\n\nOrkestra has been created at [DriveTribe](https://drivetribe.com) by its Scala backend team that had to do DevOps. Obsessed by functional programming they decided to apply the same paradigm to their DevOps.\n\n\n# Related projects\n\n* [Jenkins](https://jenkins.io)\n* [Kubernetes Plugin for Jenkins](https://github.com/jenkinsci/kubernetes-plugin)\n\n\n# Contributing\n\nContributions to Orkestra are more than welcomed!\nSee [CONTRIBUTING.md](https://github.com/orkestra-tech/orkestra/tree/master/CONTRIBUTING.md) for all the information and getting help.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FOrkestra-Tech%2Forkestra","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FOrkestra-Tech%2Forkestra","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FOrkestra-Tech%2Forkestra/lists"}