2015-04-27 05:23:50 +08:00
# Contributing to Jenkins
2017-10-04 18:19:20 +08:00
2017-10-05 04:54:01 +08:00
This page provides information about contributing code to the Jenkins core codebase.
2017-10-04 18:19:20 +08:00
2017-10-05 04:54:01 +08:00
:exclamation: There's a lot more to the Jenkins project than just code. For information on contributing to the Jenkins project overall, check out https://jenkins.io/participate/.
2017-10-04 18:19:20 +08:00
## Getting started
1. Fork the repository on GitHub
2. Clone the forked repository to your machine
2017-10-05 04:54:01 +08:00
3. Install the development tools. In order to develop Jenkins, you need the following tools:
* Java Development Kit (JDK) 8.
- In Jenkins project we usually use [OpenJDK ](http://openjdk.java.net/ ),
2017-10-04 18:19:20 +08:00
but you can use other JDKs as well.
- Java 9 is **not supported** in Jenkins.
2017-10-05 04:54:01 +08:00
* Maven 3.3.9 or above. You can download it [here ](https://maven.apache.org/download.cgi )
* Any IDE which supports importing Maven projects
4. Setup your development environment as described in [Preparing for Plugin Development ](https://jenkins.io/doc/developer/tutorial/prepare/ )
2017-10-04 18:19:20 +08:00
2017-10-05 04:54:01 +08:00
If you want to contribute to Jenkins or just learn about the project,
you can start by fixing some easier issues.
In the Jenkins issue tracker we mark such issues as `newbie-friendly` .
You can find them
2017-10-04 18:19:20 +08:00
using [this query ](https://issues.jenkins-ci.org/issues/?jql=project%20%3D%20JENKINS%20AND%20status%20in%20(Open%2C%20%22In%20Progress%22%2C%20Reopened )%20AND%20component%20%3D%20core%20AND%20labels%20in%20(newbie-friendly)).
## Building and Debugging
2017-10-05 04:54:01 +08:00
The build flow for Jenkins core is built around Maven.
Building and debugging process is described [here ](https://jenkins.io/doc/developer/building/ ).
2017-10-04 18:19:20 +08:00
If you want simply to have the `jenkins.war` file as fast as possible without tests, run:
mvn clean package -pl war -am -DskipTests
2017-10-05 04:54:01 +08:00
The WAR file will be created in `war/target/jenkins.war` .
After that you can start Jenkins using Java CLI ([guide](https://wiki.jenkins.io/display/JENKINS/Starting+and+Accessing+Jenkins)).
2017-10-04 18:19:20 +08:00
If you want to debug this WAR file without using Maven plugins,
2017-10-05 04:54:01 +08:00
You can just start the executable with [Remote Debug Flags ](https://stackoverflow.com/questions/975271/remote-debugging-a-java-application )
2017-10-04 18:19:20 +08:00
and then attach IDE Debugger to it.
## Testing changes
2017-10-05 04:54:01 +08:00
Jenkins core includes unit and functional tests as a part of the repository.
2017-10-04 18:19:20 +08:00
Functional tests (`test` module) take a while even on server-grade machines.
2017-10-05 04:54:01 +08:00
Most of the tests will be launched by the continuous integration instance,
2017-10-04 18:19:20 +08:00
so there is no strict need to run full test suites before proposing a pull request.
2017-10-05 04:54:01 +08:00
In addition to the included tests, you can also find extra integration and UI
2017-10-04 18:19:20 +08:00
tests in the [Acceptance Test Harness (ATH) ](https://github.com/jenkinsci/acceptance-test-harness ) repository.
2017-10-05 04:54:01 +08:00
If you propose complex UI changes, you should create new ATH tests for them.
2017-10-04 18:19:20 +08:00
## Proposing Changes
2017-10-05 04:54:01 +08:00
The Jenkins project source code repositories are hosted GitHub.
All proposed changes are submitted and code reviewed using the _GitHub Pull Request_ process.
To submit a pull request:
2017-10-04 18:19:20 +08:00
2017-10-05 04:54:01 +08:00
1. Commit changes and push them to your fork on GitHub.
2017-10-04 18:19:20 +08:00
It is a good practice is to create branches instead of pushing to master.
2. In GitHub Web UI click the _New Pull Request_ button
3. Select `jenkinsci` as _base fork_ and `master` as `base` , then click _Create Pull Request_
* We integrate all changes into the master branch towards the Weekly releases
* After that the changes may be backported to the current LTS baseline by the LTS Team.
The backporting process is described [here ](https://jenkins.io/download/lts/ ).
4. Fill in the Pull Request description according to the [proposed template ](.github/PULL_REQUEST_TEMPLATE.md ).
5. Click _Create Pull Request_
6. Wait for CI results/reviews, process the feedback.
* If you do not get feedback after 3 days, feel free to ping `@jenkinsci/code-reviewers` to CC.
* Usually we merge pull requests after 2 votes from reviewers or after 1 vote and 1-week delay without extra reviews.
2017-10-05 04:54:01 +08:00
Once your Pull Request is ready to be merged,
the repository maintainers will integrate it, prepare changelogs and
2017-10-04 18:19:20 +08:00
ensure it gets released in one of incoming Weekly releases.
2017-10-05 04:54:01 +08:00
There is no additinal action required from pull request authors at this point.
2017-10-04 18:19:20 +08:00
2017-10-04 18:31:46 +08:00
## Copyright
2017-10-05 04:54:01 +08:00
Jenkins core is licensed under [MIT license ](./LICENSE.txt ), with a few exceptions in bundled classes.
2017-10-04 19:59:07 +08:00
We consider all contributions as MIT unless it's explicitly stated otherwise.
MIT-incompatible code contributions will be rejected.
2017-10-05 04:54:01 +08:00
Contributions under MIT-compatible licenses may be also rejected if they are not ultimately necessary.
2017-10-04 18:31:46 +08:00
We **Do NOT** require pull request submitters to sign the [contributor agreement ](https://wiki.jenkins.io/display/JENKINS/Copyright+on+source+code )
2017-10-05 04:54:01 +08:00
as long as the code is licensed under MIT and merged by one of the contributors with the signed agreement.
2017-10-04 18:31:46 +08:00
2017-10-05 04:54:01 +08:00
We still encourage people to sign the contributor agreement if they intend to submit more than a few pull ruquests.
Signing is also a mandatory prerequisite for getting merge/push permissions to core repositories
2017-10-04 18:31:46 +08:00
and for joining teams like [Jenkins Security Team ](https://jenkins.io/security/#team ).
2017-10-04 18:19:20 +08:00
## Continuous Integration
2017-10-05 04:54:01 +08:00
The Jenkins project has a Continuous Integration server... powered by Jenkins, of course.
It is located at [ci.jenkins.io ](https://ci.jenkins.io/ ).
2017-10-04 18:19:20 +08:00
2017-10-05 04:54:01 +08:00
The Jenkins project uses [Jenkins Pipeline ](https://jenkins.io/doc/book/pipeline/ ) to run builds.
The code for the core build flow is stored in the [Jenkinsfile ](./Jenkinsfile ) in the repository root.
If you want to update that build flow (e.g. "add more checks"),
just submit a pull request.
2015-04-27 05:23:50 +08:00
2017-10-04 18:31:46 +08:00
# Links
2017-10-05 04:54:01 +08:00
* [Jenkins Contribution Landing Page ](https://jenkins.io/paricipate/ )
* [Jenkisn IRC Channel ](https://jenkins.io/chat/ )
2017-10-04 18:31:46 +08:00
* [Beginners Guide To Contributing ](https://wiki.jenkins.io/display/JENKINS/Beginners+Guide+to+Contributing )
* [List of newbie-friendly issues in the core ](https://issues.jenkins-ci.org/issues/?jql=project%20%3D%20JENKINS%20AND%20status%20in%20(Open%2C%20%22In%20Progress%22%2C%20Reopened )%20AND%20component%20%3D%20core%20AND%20labels%20in%20(newbie-friendly))