My understanding of a functional test is that its an integration test checking an entire, complete segment of application functionality; minus any stubs, mocks or other test doubles. For a web app this would be, perhaps, manually checking what happens when a user tries to enter bad credentials on a login form.
My understanding of a smoke test is that its a quick series of function tests that can be used to determine if the app has started up correctly and that its major subsystems are all online. For a web app, this might be to go to a health check URL and make sure that the app is up, and that it can reach all of its dependent subsystems (its database, its message broker, etc.).
My understanding of a regression test is that its a function test that is used in the future to determine if a particular function is no longer working as expected. As function tests are written for new features or rewritten for modifications to existing features, they are added to the regression test suite. In this sense, a regression test suite is the composition of all valid function tests for a particular web app.
Before I go any further, if anything I have said thus far is mislead or just not true, please begin by correcting me!
Assuming I'm more or less on track:
Generally, Considering the automation of web-app, we have the following stages
Automate the Sanity/Smoke Tests
To do this, we need to make sure that the automation criteria for the sanity tests can be achieved using the Test Automation Tool. There is no hard rule, to use a single tool to achieve sanity automation across all the domains for a web-app. Once the sanity is stabilized, we go ahead with the next.
Automate the Release / Regression Suite
Automation of Release suite or Regression suite, must be cost-effective in manner, and the test automation framework design plays a important role over here since the tests need a long term maintenance
For your questions my response is as follows
It depends on the project strategy.
What I suggest is to opt for automated sanity test, in a way, so that automation can be done quickly. If we start full fledged Test Automation Framework Development here itself, we may be taking more time for sanity automation
And for Release Automation, carefully plan the Framework Architecture, considering all the possibilites and requirements of Framework
We can integrate the Automated Tests with any CI Server like Jenkins or Bamboo or cruise and it is all dependent on the automation strategy
Considering my experience, this is what I do if I were you