Abhi,
Is this "hostname" the name of the host you want Ansible to manage?
If so, why pass that through an extra variable rather than using the
limit parameter?
In Ansible Tower, you have
projects which define where your
playbooks are stored and several more parameters such as
credentials. Here's what a typical project looks like.
Each
project can have any number of job
templates,
where each template allows you to configure which hosts or Ansible
host groups to run the playbook on ("Limit" in the red box below),
what extra variables to use, what parameters to prompt for, etc.
Here's a typical job template.

Note that the nearly empty box below "Variables" would be where
extra variables are defined. This job template doesn't use any extra
variables. When editing a job template, almost any of the fields
shown above can be marked "Prompt on launch", in which case you can
override the default values at the time you launch the job.
Job templates can also be scheduled to run at regular intervals.
Parameters which normally generate prompts can be filled in by the
schedule just as if someone had manually started a job.
So, to address your question, "[H]ow can I add this hostname to [a]
playbook?" If you really want to pass an extra variable called
"hostname" that you can use in a playbook, you do that when you edit
your job template. Be sure to check "Prompt on launch" if you want
to override the default value when you run your job, like this:
In your playbook, you simply use the variable like any other:
- name: My task
ansible.builtin.debug:
msg: "My hostname variable is {{ hostname }}."
I hope this helps. Good luck.