Jenkins-Build when a change is pushed to GitHub op

2019-01-10 20:42发布

问题:

Jenkins is running on localhost. I have my repository in GitHub. I have the option to 'Build when a change is pushed to GitHub' checked.

When I click 'Build Now', build is done successfully, no issues there. But when am committing code to my repository, auto build is not happening. I can access GitHub from my system as the repository is public and I believe even Jenkins should be able to detect it. I know there is a polling option but I want Jenkins to build when change is detected in repository(as this is what we have been trying to achieve).

Configuration:

Jenkins 1.615

Git Plugin 2.3.5

Git Client Plugin 1.17.1

————————————————————————————————————————————

EDIT: "Build when a change is pushed to GitHub" option has been renamed to "GitHub hook trigger for GITScm polling" in most recent version of GitHub plugin. (thanks to @smrubin's feedback.)

回答1:

I suspect you missed the webhook url.

Besides checking the Build when a change is pushed to GitHub option, you should also add the webhook url into your Github repository to get the Auto trigger mechanism to work and here is how:

Go to your Github repository:

Settings--> Webhooks&Services-->Service--> Add Services--> Choose "Jenkins (GitHub plugin)"

Then fill in the Jenkins hook url with your jenkins url like this: http://your_jenkins_url/github-webhook/


And, VERY IMPORTANT, since you are installing your jenkins server in your localhost, please be aware that you shouldn't fill in above Jenkins hook url like http://localhost:8080/github-webhook/ because Github is not able to recognize localhost or 127.0.0.1 or 192.168.*.*.

Either you should use an externally accessible DNS name or an IP address, which can be recognized by Github.



回答2:

I had the same problem and solved it. The problem was that the URL had to end with a /. Meaning:

http://<jenkinsurl>:8080/github-webhook/ worked.

http://<jenkinsurl>:8080/github-webhook didn't. (Notice the missing / at the end.)



回答3:

Actually if you do the webhook settings from Jenkins -> Github plugin configuration (mentioned above), you will still see webhooks get created in github. So, above two approaches basically doing the same thing.

I personally like it to create webhook from Github, because in this way you don't have to share or store github user info in jenkins.

Steps :

  1. Login into Github (with Admin)

  2. Go to the repository you want to hook with jenkins

  3. Click on settings tab -> webhooks & services
  4. Click on Add Webhook.
  5. Enter payload url : like : http://:8080/github-webhook/
  6. Select content type as json.
  7. you are done.

Now you do the changes and commit , you will see jenkins build get trigger automatically. Don't forget to do the settings in jenkins jobs to start the build when push code in github.



回答4:

The GitHub plugin (https://wiki.jenkins-ci.org/display/JENKINS/GitHub+Plugin) mentioned two ways: manual mode and automatic mode. mainframer gives the answer to the manual mode. Today I found something new. mainframer's add to the service doesn't allow me to add multiple Jenkins's instance, so I add the others add the Webhook as shown below. It also works fine.

I wanted to include a picture here but my id doesn't have the right to do so.