If this is an exercise, the answer is easy if you have seen https://git-scm.com/docs/git-bisect
If this is not an exercise and you are talking about a real application. Don't use nightly builds. Just build on every commit, so it is obvious which commit breaks and which commit works.
I had tried it a while back. I didn't see any real advantages over Jenkins and the plugin ecosystem was really small. Also I found the pipeline -> stage-> job-> task structure a bit of an overkill. But this was about 5 years ago so maybe things have changed.
You should also look at concourse if you haven't already.
I don't like Jenkins. IMHO pipeline as code is required and the Jenkinsfile (pipeline as code for Jenkins) has groovy syntax :( If you can host your own CICD tool I recommend you Drone CI: https://drone.io/
I don't like Jenkins because I want to use pipeline as code and Jenkinsfile you need groovy code :( If you can host your own CICD tool you should take a look on Drone CI: https://drone.io/
You should learn the pipeline syntax if you are going to work with pipelines https://jenkins.io/doc/book/pipeline/syntax/
Parameter jobs are used in multiple scenarios
Example 1: You have a list of environments to deploy. You start a jenkins job and pass as parameter the exact environment
Example 2: You deploy for a list of customers. You start a jenkins job and pass a parameter on which customer settings will now be used.