{"id":15056569,"url":"https://github.com/samrocketman/jervis","last_synced_at":"2025-05-16T17:05:31.740Z","repository":{"id":23619725,"uuid":"26989169","full_name":"samrocketman/jervis","owner":"samrocketman","description":"Self service Jenkins job generation using Jenkins Job DSL plugin groovy scripts. Reads .jervis.yml and generates a job in Jenkins.","archived":false,"fork":false,"pushed_at":"2025-05-08T18:32:38.000Z","size":2727,"stargazers_count":269,"open_issues_count":25,"forks_count":45,"subscribers_count":21,"default_branch":"main","last_synced_at":"2025-05-08T19:39:34.863Z","etag":null,"topics":["automation","github","groovy","hacktoberfest","jenkins","jenkins-pipeline-library","job-dsl","travis-ci"],"latest_commit_sha":null,"homepage":"http://sam.gleske.net/jervis-api/","language":"Groovy","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/samrocketman.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2014-11-22T04:58:13.000Z","updated_at":"2025-05-08T18:32:42.000Z","dependencies_parsed_at":"2024-09-29T04:01:18.822Z","dependency_job_id":"e354cac4-2373-4109-b808-9d03e1870a6d","html_url":"https://github.com/samrocketman/jervis","commit_stats":{"total_commits":1784,"total_committers":3,"mean_commits":594.6666666666666,"dds":0.007286995515695116,"last_synced_commit":"e3a2879cb10b80c5a934a575d1a3b44ef5c55747"},"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samrocketman%2Fjervis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samrocketman%2Fjervis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samrocketman%2Fjervis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samrocketman%2Fjervis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samrocketman","download_url":"https://codeload.github.com/samrocketman/jervis/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254573588,"owners_count":22093731,"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":["automation","github","groovy","hacktoberfest","jenkins","jenkins-pipeline-library","job-dsl","travis-ci"],"created_at":"2024-09-24T21:53:30.251Z","updated_at":"2025-05-16T17:05:31.664Z","avatar_url":"https://github.com/samrocketman.png","language":"Groovy","readme":"# Jervis: Jenkins as a service\n\n[![Build Status][status-build]][jervis-ci]\n[![Coverage Status][status-coverage]][jervis-coveralls]\n[![Maven Central Release][status-release]][maven-release]\n[![GH commits since latest release][commits-since]][commits-since-diff]\n\n* *Project status:* [released to maven central][maven-release].\n* *Currently Targeted platforms:*\n  * *Jenkins server host:* Linux and Mac OS X (Windows compatible)\n  * *Jobs on clients:* Linux only (Multi-platform capable)\n\n##### What is Jervis?\n\n* What is Jervis? A library for [Job DSL plugin][jenkins-plugin-job-dsl]\n  scripts and [shared Jenkins pipeline libraries][pipeline].  It is used to\n  augment the automation of generating Jenkins jobs.\n* [SCM Filter Jervis plugin][scm-filter-jervis] is available for multibranch\n  pipline filtering.  Installing this plugin also makes the Jervis library\n  available for import in shared pipeline libraries.\n\n# Documentation\n\n* [Jervis Wiki][jervis-wiki]\n  * [Build Overview][jervis-wiki-overview]\n  * [Supported Languages][jervis-wiki-languages]\n  * [Supported Build Tools][jervis-wiki-build-tools]\n\n\nThe library API is also [fully documented][jervis-api-docs].  To generate the\nlatest developer docs execute the following command.\n\n    ./gradlew groovydoc\n\nThe documentation can be found in `build/docs/groovydoc`.\n\n##### Provided examples\n\n* Bootstrapping Jenkins: Example [bootstrap for\n  Jenkins][jervis-jenkins-bootstrap] which allows you to quickly try out this\n  library.\n* Job DSL Script: [Example Job DSL script](jobs/firstjob_dsl.groovy) is\n  provided.\n* Jenkins build node: There's also a [docker container][jervis-docker] designed\n  to be used as a Jenkins build agent through the [Jenkins Docker\n  Plugin][jenkins-plugin-docker].\n* Jervis configuration files: [`lifecycles.yaml`][yaml-lifecycles],\n  [`toolchains.yaml`][yaml-toolchains], and [`platforms.yaml`][yaml-platforms].\n* Shared pipeline library: [`vars/`](vars) and [`resources/`](resources)\n  directories.\n\n# More about Jervis\n\nJervis is a combination of some letters in the words Jenkins and Travis: JEnkins\ntRaVIS.  [Jenkins][jenkins] is a [continuous integration][wiki-ci] tool which is\ntypically installed on premises.  [Travis][travis] is a hosted, distributed\ncontinuous integration system used by many [open source][wiki-os] projects.\nBoth Jenkins and Travis have paid and enterprise offerings.\n\nJervis uses Travis-like job generation using the [Job DSL\nplugin][jenkins-plugin-job-dsl] and groovy scripts.  It reads the `.jervis.yml`\nfile of a project and generates a job in Jenkins based on it.  If `.jervis.yml`\ndoesn't exist then it will fall back to using the [`.travis.yml`][travis-yaml]\nfile.\n\nFor development planning and other documentation see the [Jervis\nwiki][jervis-wiki].  If you wish to stay up to date with the latest Jervis news\nthen please feel free to [watch this repository][watch-repo] because I use the\nissue tracking and wiki for planning.\n\n## Why Jervis?\n\nWhat is Jervis attempting to scale?  Let's talk about some scale bottlenecks\nthat have been overcome by Jenkins (formerly Hudson) and its community.\n\nThe scaling issue is a main bullet. The solution for the issue is in a\nsub-bullet.\n\n* Developers are challenged with integrating work, building often, and even\n  deploying often.\n  * Jenkins was invented.\n* Jenkins infrastructure is strained when too many agents are in one server and\n  too many jobs are queued up on a daily basis.  A single Jenkins server\n  struggles to perform all requested builds in a timely manner.  Jenkins also\n  suffers from single point of failure as a lone server.\n  * Multi-controller Jenkins was invented. This provides redundancy for the\n    server.  Throughput for daily build capacity is improved.\n* Jenkins jobs suffer from a lot of duplicate code.  It is difficult to fix a\n  bug in one job and have it propagate to other jobs.\n  * Jenkins Job DSL plugin was invented.  Configuration through code is now\n    possible.  Multiple jobs can be generated and regenerated with the same code\n    using templates in a domain specific language.\n* Onboarding new projects in a Jenkins installation can be difficult.  Typically\n  engineers will get together and discuss the needs of the project and then\n  configure a Jenkins job for the needs of the project.  For enterprises with a\n  very large number of projects it is typically hard to scale number of build\n  engineers to match with the large number of projects which require onboarding\n  into the build ecosystem.\n  * Jervis is being invented.  Job generation through convention over\n    configuration.  Scaling the onboarding for a project by creating and abiding\n    by conventions in how jobs are generated.  This is for large scale job\n    generation and project onboarding.  Jervis is taking lessons learned from a\n    seasoned build engineer and attempting to fill this gap in the Jenkins\n    ecosystem.\n\n# Set up\n\nTo include this library for use in your Job DSL plugin scripts you only need\ninclude it in your build tool.\n\n#### Maven\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003enet.gleske\u003c/groupId\u003e\n  \u003cartifactId\u003ejervis\u003c/artifactId\u003e\n  \u003cversion\u003e2.0\u003c/version\u003e\n  \u003ctype\u003epom\u003c/type\u003e\n\u003c/dependency\u003e\n```\n\n#### Gradle\n\nYour Job DSL scripts should have a `build.gradle` file which has the following\ncontents.\n\n```gradle\napply plugin: 'maven'\n\nrepositories {\n    mavenCentral()\n}\n\n\nconfigurations {\n    libs\n}\n\ndependencies {\n    libs 'net.gleske:jervis:2.0'\n    libs 'org.yaml:snakeyaml:2.0'\n}\n\ntask cleanLibs(type: Delete) {\n    delete 'lib'\n}\n\ntask libs(type: Copy) {\n    into 'lib'\n    from configurations.libs\n}\n\ndefaultTasks 'clean', 'libs'\nclean.dependsOn cleanLibs\n```\n\nThen execute `./gradlew libs` to assemble dependencies into the `lib` directory\nof the Jenkins workspace.  Don't forget to add `lib` to the classpath.  This\nmust be done before you configure your Jenkins job to execute Job DSL scripts.\n\n# Interactive debugging\n\nGroovy Console is built into the Gradle file.\n\n    ./gradlew console\n\n# Other development commands\n\nGenerate code coverage reports.\n\n    ./gradlew clean check jacocoTestReport\n\nBuild the jar file.\n\n    ./gradlew clean jar\n\nSign build jars and sign archives.\n\n    ./gradlew clean check signArchives\n\nSee also [RELEASE.md](RELEASE.md).\n\n# Local SonarQube Analysis\n\nSee [SonarQube README](sonarqube/README.md).\n\n# License\n\n    Copyright 2014-2024 Sam Gleske\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n[commits-since]: https://img.shields.io/github/commits-since/samrocketman/jervis/latest/main\n[commits-since-diff]: https://github.com/samrocketman/jervis/compare/jervis-2.0...HEAD\n[jenkins-plugin-docker]: https://wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin\n[jenkins-plugin-job-dsl]: https://wiki.jenkins-ci.org/display/JENKINS/Job+DSL+Plugin\n[jenkins]: https://jenkins-ci.org/\n[jervis-api-docs]: http://sam.gleske.net/jervis-api/\n[jervis-ci]: https://github.com/samrocketman/jervis/actions?query=branch%3Amain\n[jervis-coveralls]: https://coveralls.io/github/samrocketman/jervis\n[jervis-docker]: https://github.com/samrocketman/docker-jenkins-jervis\n[jervis-jenkins-bootstrap]: https://github.com/samrocketman/jenkins-bootstrap-jervis\n[jervis-wiki-build-tools]: https://github.com/samrocketman/jervis/wiki/Supported-Tools\n[jervis-wiki-languages]: https://github.com/samrocketman/jervis/wiki/Supported-Languages\n[jervis-wiki-overview]: https://github.com/samrocketman/jervis/wiki/Build-overview\n[jervis-wiki]: https://github.com/samrocketman/jervis/wiki\n[yaml-lifecycles]: resources/lifecycles-ubuntu2204-stable.yaml\n[yaml-platforms]: resources/platforms.yaml\n[yaml-toolchains]: resources/toolchains-ubuntu2204-stable.yaml\n[maven-release]: https://search.maven.org/search?q=g:net.gleske%20AND%20a:jervis\u0026core=gav\n[milestone-progress]: https://github.com/samrocketman/jervis/milestones\n[pipeline]: https://jenkins.io/doc/book/pipeline/shared-libraries/\n[scm-filter-jervis]: https://plugins.jenkins.io/scm-filter-jervis/\n[status-build]: https://img.shields.io/github/actions/workflow/status/samrocketman/jervis/ci.yaml?branch=main\n[status-coverage]: https://coveralls.io/repos/github/samrocketman/jervis/badge.svg?branch=main\n[status-release]: https://img.shields.io/maven-central/v/net.gleske/jervis?color=success\n[travis-yaml]: http://docs.travis-ci.com/user/build-configuration/\n[travis]: https://travis-ci.org/\n[watch-repo]: https://help.github.com/articles/watching-repositories/\n[wiki-ci]: https://en.wikipedia.org/wiki/Continuous_integration\n[wiki-os]: http://en.m.wikipedia.org/wiki/Open_source\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamrocketman%2Fjervis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsamrocketman%2Fjervis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamrocketman%2Fjervis/lists"}