Build only master branch on Jenkins - jenkins

I have my repository on bitbucket. I am trying to build my jenkins pipeline only when the commit (or pull request) is pushed into master branch.
Here are my current configurations
Current Behavior: Whenever I commit to any branch jenkins starts building my pipeline on master branch.
Expected Behavior: Jenkins should build pipeline only when commit is pushed into (only) master branch.
Please correct me which configuration I am doing wrong?
Thanks
Note: I am using Jenkins 2.303.1

You need to create two bitbucket sections looking at the same repo. In one you will tell Jenkins to Suppress automatic SCM triggering. In the other you will define master as a special branch.
1st section under Behaviors click on Property Strategy, select All branches get the same properties, and add the property `Suppress automatic SCM triggering.
2nd section under Behaviors, add Filter by name (with regular expression), then for the regex put in master or even better ^master$, and you leave the property strategy alone.

Related

Jenkins respect HEAD or default branch when cloning repo to workspace

Jenkins provides lengthy documentation regarding how to specify which branches it will build from. https://plugins.jenkins.io/git/
None of that though answers this specific question, or if it does, I cannot seem to achieve this.
How to specify that Jenkins will use whichever branch is normally checked out when cloning, such as the default branch specified in Github
Does this even make sense or is this even possible?
EDIT: specifically what should go in the red circle to checkout the default branch in Github
Jenkins respects the default branch over HEAD. Also, it depends how you configure you Jenkins job if it's a mulit-branch pipeline then you don't need to specify which branch it should build, by default it will scan you GitHub repo and build the changes made on branch and it will trigger the build.
If it's pipeline job then you can specify which branch it should built by editing the job configuration on Jenkins job and specifying the particular branch name in the section Branches to build
I hope this is what you are looking for.

Why would a job in Jenkins multibranch pipeline gets disabled

We are using Jenkins(v2.235.1) and BitBucket cloud combination. We have BitBucket Team/Project type job which has created multi-branch pipelines. Some of the jobs corresponding to individual branches are getting disabled even these branches in the Git repo are active. Not sure why this is happening.
Can you please share some insight on this and how we can prevent this from happening.
Below are my versions
Jenkins v2.235.1
Bitbucket Branch Source plugin v2.9.7
Bitbucket plugin v1.1.27
Thank you
If there is no Jenkinsfile at the root of the repository or if the name is misspelled or is with different letters casing, like JenkinsFile, the job will be disabled.
From https://www.jenkins.io/doc/book/pipeline-as-code/
Presence of the Jenkinsfile in the root of a repository makes it eligible for Jenkins to automatically manage and execute jobs based on repository branches.
Make sure you have only one jenkinsfile in your root directory. it is not a good idea to have more than one file with the name jenkinsfile which causes jenkins to disable the job. this could be one the reason why your job is getting disabled.
In addition to previous answers.
Jobs (branches/PRs/tags) also can be marked as disabled if you first start using all available discovering options (Bitbucket Team/Project -> Configure -> Behaviors -> Within repository -> Discover ...) and after that removed one or some of them. In this situation, a Child project of Bitbucket Team/Project indexes all branches/PRs/tags first (keep them active), and after the configuration was changed, it reindexes and disables unneeded items.
Also, jobs can be marked as disabled when Bitbucket Team/Project is configured in a way when both branches and PRs are discovered, but for branches configured the "Exclude branches that are also filed as PRs" strategy. In such a case, the branch that becomes a PR (a branch from which PR has been created) will not be tracked by Jenkins.

Tell Jenkins I want to build a specific commit in a pipeline project

I have a pipeline project added to Jenkins. I would like to tell Jenkins to build a specific commit in this project by using a REST query.
The project is configured as Jenkinsfile pipeline project. I would like Jenkins to get the Jenkinsfile from this specific commit I've selected, and then the pipeline script would checkout the code and perform the build.
My problem is that I can't force Jenkins to take Jenkinsfile from my selected commit. I can configure it so it'll get Jenkinsfile from master or any other branch, but I don't know how to parametrize the place where I want Jenkins to take Jenkinsfile from.
I.e. when building commit foo, I want Jenkins to checkout the repository I've provided, switch to commit foo and use Jenkinsfile from this commit. Next build job would want to use Jenkins to build commit bar; in such case Jenkins would clone the repo, switch to the bar commit, and start the Jenkinsfile from the bar commit.
Is this action supported by Jenkins?
Duck debugging in action.
My problem was resolved by making sure the "lightweight checkout" in the Git repository settings pane was un-checked. A bug in Jenkins?

When Multibranch pipeline when job is trigged, what is stored in Jenkins workspace?

I am not sure if I am asking the question in right way.
When I am triggering the multi branch pipeline job and I do "checkout scm" in Jenkinsfile, does it checkout the pull request or Master + pull request?
It depends of your settings.
As I remember, multibranch pipeline builds pull requests in separated view and it can build as PR source branch and result of PR. It cloned your repo, checkouts target branch, merges source branch into it and runs your stages.
If you look at the logs you will see that it checks out the hash of the commit
example: git checkout 1fb651dfdcbea276627de0247bbf5047840cae4c
As for workspace, if you log in to the Jenkins machine where this is running you will see that each branch has a separated workspace. Here you will find the source code of the checked out branch. The separated workspace ensures that there is no conflict when working with multiple concurrent branch builds.

How to build the new branch pushed to github using Jenkins CI?

I've setup the Jenkins for the rails3 app to build the specs.
One can find many posts via google on how to setup the build trigger on the github push.
But what I want is to build the new remote branch pushed to Github.
e.g.
I've a repo origin/master. I cloned the repo, created a new branch, did some commits and pushed that branch to origin git push -u origin new_branch
Now I want the Jenkins to build this newly pushed branch on the origin.
If the build is successful, then Jenkins should merge it into origin/master automatically.
The Jenkins plugin has github, git plugin. But it requires to put the branch name. Instead I want to build the new_branch dynamically.
How can I setup such process?
If I remember correctly branch name is not a required entry. You need to test it, but I think if you do not fill it, Jenkins tests all new commit in the repo regardless which branch is affected.
But I recommend you do not merge automatically. You do not want that, trust me. :-)
It seems can not do that with only github and gitgub parameter plugin. If you specify branch_regex*** in Branch to build, Jenkins always build the latest commit in the bunch of branches that it saw. Must specify a branch in order Jenkins to build on the latest commit in that branch. I also see some answer with Multi Branch Pipeline but not sure how to deploy that way. There is no specific instruction at all.

Resources