Code Monkey home page Code Monkey logo

jenkins-epo's Introduction

Time for kickass CI !

Hulk

Jenkins EPO

Implements extended CI features on top of Jenkins and GitHub for in-house CI.

Features

  • Define jobs from repository in jenkins.yml.
  • Jobs pipeline façon GitLab CI.
  • Query GitHub API to poll open PR instead of polling git repository.
  • Read instructions from PR comments.
  • Cancel running jobs when pushing new commits.
  • Report issue on broken protected branches.
  • Auto-merge PR.
  • Works with webhook and/or behind firewall.
  • Extensible through entry-point.

Quickstart

On your poller host:

pip3 install jenkins-epo
# Setup env vars
export JENKINS_URL=http://myjenkins.lan JOBS_CREDENTIALS=clone-creds
export GITHUB_TOKEN=YOUR_SECRET_TOKEN REPOSITORIES=owner/repo
# Check repository is manageable
jenkins-epo list-heads
# Trigger a dry run
DRY_RUN=1 jenkins-epo process https://github.com/owner/repo/tree/master
# Run it for real
jenkins-epo bot

Now write a jenkins.yml file and open a PR:

myjob: |
    tox -r

Many instructions are available. Just ask the bot by commenting jenkins: help in an open PR!

jenkins-epo's People

Contributors

amessinger avatar bersace avatar ewjoachim avatar jpic avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

pombredanne toopy

jenkins-epo's Issues

Failing on certain jobs

On a PR whose only params are :

jenkins:
  jobs: [rh2*, -rh2-ansible*, -rh2*docker]      # PR python
  # jobs: rh2-db

We get, when switching VERBOSE to 1, the following logs:

=wk01= Failed to process https://github.com/redacted/redacted/tree/redacted: 'NoneType' object is not iterable
Traceback (most recent call last):
File "/usr/local/lib/python3.4/dist-packages/jenkins_epo/workers.py", line 75, in worker
res = yield from task
File "/usr/lib/python3.4/asyncio/futures.py", line 388, in __iter__
yield self  # This tells Task to wait for completion.
File "/usr/lib/python3.4/asyncio/tasks.py", line 286, in _wakeup
value = future.result()
File "/usr/lib/python3.4/asyncio/futures.py", line 277, in result
raise self._exception
File "/usr/lib/python3.4/asyncio/tasks.py", line 235, in _step
result = coro.send(value)
File "/usr/local/lib/python3.4/dist-packages/jenkins_epo/procedures.py", line 93, in process_url
yield from bot.run(head)
File "/usr/local/lib/python3.4/dist-packages/jenkins_epo/bot.py", line 145, in run
yield from ext.run()
File "/usr/local/lib/python3.4/dist-packages/jenkins_epo/extensions/jenkins.py", line 278, in run
for action, spec in self.process_job_specs()
File "/usr/local/lib/python3.4/dist-packages/jenkins_epo/extensions/jenkins.py", line 277, in <listcomp>
loop.create_task(self.process_job(action, spec))
File "/usr/local/lib/python3.4/dist-packages/jenkins_epo/extensions/jenkins.py", line 229, in process_job_specs
if not current_job.spec.contains(spec):
File "/usr/local/lib/python3.4/dist-packages/jenkins_yml/job.py", line 195, in contains
missing = set(their['parameters']) - set(my['parameters'])
TypeError: 'NoneType' object is not iterable

It seems that either their or my have a "parameter" key at None... Strange thing is that it worked yersterday and suddenly stopped working.

I'll update the ticket if I find new interesting information.

'PayloadString' object has no attribute 'get'

Some (most ?) jobs seems not to be able to process Jenkins payload after an upgrade from 2.52 to 2.59.

An error is displayed in the logs : 'PayloadString' object has no attribute 'get'

Will try to run with verbose/debug to pinpoint the issue.

EPO is not compatible with aiohttp 2.0.0

For now we should pin it strictly under 2.0.0, and then, at some point, we should adapt the code.

$ jenkins-epo 
Traceback (most recent call last):
  File "/usr/local/bin/jenkins-epo", line 7, in <module>
    from jenkins_epo.script import entrypoint
  File "/usr/local/lib/python3.4/dist-packages/jenkins_epo/script.py", line 28, in <module>
    from .utils import post_mortem
  File "/usr/local/lib/python3.4/dist-packages/jenkins_epo/utils.py", line 18, in <module>
    import aiohttp.errors
ImportError: No module named 'aiohttp.errors'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.