We have several Java projects. Each project has its own delivery pipeline.
All pipelines have the following steps in common (simplified):
You may use shared libraries which enables generating jobs, and makes code reusable in different jobs, and makes your jenkinsfiles really clean.
The shared library is formed from the folder src which will contain all the method that you are going to call in different jobs, and vars folder in which you are going to implement the logic of your Job, the files of vars folder are groovy files and you may call the logic behind each file by the name of this file in the jenkinsfile by passing the appropriate variables to your jobs, depending on whatever you have like as you mentionned (IP address, ...)
For example:
In vars you may have a deploy.groovy file in which you call a method from src folder that does the deploy thing and to which you'll pass parameters that are proper to a specific job and that you are going to define in your jenkinsfile when you call your deploy.groovy like this:
node{
deploy([ip_address : '...',
env : ''
])
}
And don't forget to import your shared lib. And configure the repo that contains this shared lib in your jenkins. For more details see the documentation for shared libraries in Jenkins