At my day-job workplace we're primarily building Windows client/server software. The codebase is stored in SVN. We have a Jenkins installation and several dedicated build machines. SVN commit hooks trigger a Jenkins CI build.
In my freelance work, code is stored on BitBucket (git). Half of my work is Windows desktop/service work that does not use CI. The other half of my work, which is relevant to the question, is the JavaScript/TypeScript work.
Each repo is hooked up to CircleCI (which is free if your usage is low enough). The builds are controlled through a circle.yml file at the root of each repository. And then each repo also has deploy scripts written in JavaScript (only because I'm more comfortable writing JS than bash shell scripts).
The deploy scripts are invoked by CircleCI after a successful build. They zip the ./dist directory and use the AWS SDK to push the application package to Elastic Beanstalk or Lambda, depending on the project.