DEV Community

Ben Halpern
Ben Halpern

Posted on

How does deployment work at your organization?

What is the process to get code into prod?

Oldest comments (72)

Collapse
 
jep profile image
Jim • Edited

The coolest and most frustrating thing about DevOps is there's a hundred different ways to do something. I say this in hope I won't be judged too harshly for how we do deployments.

I should first mention that we're not a company in the web app space. The company I love working for primarily creates cross-platform C++ applications that run on Linux/Windows appliances. Also, as a DevOps Engineer, my customers aren't always actual customers. More often than not, they're developers. When we deploy, we remotely update the Linux or Windows platform, then uninstall anything existing software, reboot, then install the most up to date software, license it, and verify the installation was successful.

We accomplish this primarily through Ansible playbooks that deal with the actual deployment, and use Jenkins jobs as the self-service mechanism for our developer customers. When devs want to upgrade their systems to test or do whatever, they can go to Jenkins, enter their IP and select the version to install and click 'Build'. The rest of the process is seamless to the customer, with the exception of the 'DevOps is deploying' screen we run during the deployment to let the remote user know the system is doing something.

I know we could look into Ansible Tower or FOSS alternatives, but people got used to Jenkins so I try to let that be the common interface for self-service tasks performed by our developer customers that need an automated capability.

Collapse
 
shenril profile image
Shenril • Edited

AWX should meet your needs , it s basically Tower for free and integrates with your existing ansible roles
github.com/ansible/awx

Collapse
 
nataliedeweerd profile image
𝐍𝐚𝐭𝐚π₯𝐒𝐞 𝐝𝐞 π–πžπžπ«π • Edited

Honestly - it's just FTP & manual database pushes πŸ€·β€β™€οΈ
It's not sophisticated or fancy, but it works.

Collapse
 
ben profile image
Ben Halpern

No shame in not using β€œfancy” CI tools. Whatever does the job.

Collapse
 
joelbonetr profile image
JoelBonetR πŸ₯‡

Obviously you don't have to be ashamed for not using "fancy" CI tools, but when you do, you'll see why people are using it.

I learned on last 10 years that technologies that meet a need stay, and technologies that don't, disappear or remain in legacy projects.

Git isn't something new (as you should know). CI scripts aren't new too, it only simplified the two-step task - where you were using git, svn, mercurial or wharever with a Rundeck or similar automation that needed to be fired manually - into a single step one where devs only need to push to master (if permissions) and it all rolls smooth into production and able to roll-back easily if needed.

If you are not using a version control service, then yes, you need to be ashamed.

Collapse
 
felipperegazio profile image
Felippe Regazio

I agree with Ben, "Whatever does the job". I worked on a company that had this approach too with huge legacy products. I wrote an script to automate deployments like that with ssh, maybe could be useful for you: github.com/felippe-regazio/sh-simp...

Collapse
 
nicolus profile image
Nicolas Bailly • Edited

Thank you for your answer, it's important to keep in mind that even though we read all day long about fancy new techniques and tools, most of us are working on legacy codebases and deploying manually.

That said, Continuous Deployment is not just a fad. I recently changed jobs and moved from gitlab CI/CD (which is really nice) to a mix of "git pull" on the server, SFTP, rsync, and running the migrations manually... And it's a huge pain and a huge waste of time (not to mention that if something goes wrong we don't have an easy way to rollback to the previous version).

I haven't yet setup CI/CD pipelines because we use on premise Bitbucket and it doesn't seem to offer CI/CD (so it means we'll need to install Jenkins or something and I'll have to learn that), but it's pretty high on my todo list.

Collapse
 
kbariotis profile image
Kostas Bariotis

It does, it’s called pipelines I think. It’s pretty descent.

Thread Thread
 
nicolus profile image
Nicolas Bailly

As far as I can tell pipelined is only available on bitbucket cloud, and not the self hosted version (bitbucket server) ? I'd love to be wrong though.

Thread Thread
 
kbariotis profile image
Kostas Bariotis

Ah ok, I don't know more about that.

Collapse
 
joelbonetr profile image
JoelBonetR πŸ₯‡

I used to be on BitBucket too, but i definitely changed to GitLab and I find no reason to use something different, i recommend you to take a try. I don't use self-hosted but i guess you will have same options.

Collapse
 
eleftrik profile image
Erik D'Ercole

We zero-downtime deploy our applications (mostly PHP - Laravel or WordPress - but not only) with deployer.org/.
Very easy, fast and reliable.

Collapse
 
fvaldes33 profile image
Franco Valdes

This is awesome! had never heard of it. Will give it a shot with Craft CMS (yii2) base platform.

Collapse
 
barelyhuman profile image
Reaper

Gitlab CI/CD at my β€œFinancial” Support Org.

Github Actions at BarelyHuman

Collapse
 
andrewbrown profile image
Andrew Brown πŸ‡¨πŸ‡¦

AWS CodePipeline + AWS CodeDeploy + AWS CodeBuild

Collapse
 
fvaldes33 profile image
Franco Valdes

What stack? I have run into issues using NextJS with this deployment approach. TIA

Collapse
 
andrewbrown profile image
Andrew Brown πŸ‡¨πŸ‡¦

Ruby on Rails, though the process is identical because NextJS is just a nodejs app.
I had a course I made on Udemy last year for creating a pipeline with Rails but you could just ski the Rails part. I've been meaning to release that video course for free.

Collapse
 
peiche profile image
Paul

I would love to get to this point with my job.

Collapse
 
rinzler profile image
Rinzler

Same here, only our stack is HTML/JS/CSS + Python/Django + MongoDB/MariaDB. Every code merged into develop branch on Github Repo is immediately deployed to our dev/staging environment also on AWS, same process on master -> production counterparts.

Collapse
 
ryantenorio profile image
Ryan

Jenkins with GitFlow for larger, high-risk products that require more gates to be crossed, and plain ol' jenkins plus github hooks to automatically build and deploy for smaller products and products with less risk.

Whatever works for you, the tool chain should match the need!

Collapse
 
leoat12 profile image
Leonardo Teteo

We use GoCD to handle the deployment, from Bitbucket, our repository, to our Docker clusters on AWS.

Collapse
 
highcenburg profile image
Vicente G. Reyes

Just the netlify cli for static sites and heroku cli for dynamic sites.

Collapse
 
kildareflare profile image
Rich Field

At the day job we have several projects that are deployed independently using BuildKite.

For a freelance client I use CodeShip to handle the deployment of a Firebase hosted site, Firebase Functions and Firebase Database migrations - triggered by a push to the repo. Each branch in the repo deploys separate site/functions/db.

For most small personal projects I use react-static and Netlify; so it's simply a push to the repo.

Collapse
 
elisealcala profile image
Elizabeth AlcalΓ‘

AWS Amplify for the frontend app and our serverless backend.

Collapse
 
htnguy profile image
Hieu Nguyen • Edited

It depends on which environment you are trying to deploy to. At my company, we have multiple environments of the same application. One for Dev, QA, and Production.

For the sake of brevity, lets take a deployment from QA to Production. Note:
Local Machine -> Dev (Do it as many time as your heart's wish πŸ˜„)
Dev-> QA (OK with some restrictions) ,
QA-> Production (OK with a lot more restrictions),
Dev->Production ( A BIG NO NO, could get me fired!).

  1. Once the code has been peer reviewed and QA Tested, we create a deployment folder that contains all project files and dependencies that are needed to perform the deployment.
  2. We create a deployment ticket in TFS with instructions for the DevOp team on how to deploy it. Install this and delete that.
  3. I sit and cross my finger. If all things goes well, they reply back with some feedback.
  4. If the deployment fails, I usually have to work with DevOps on figuring out why and attempt to redeploy.

This process is very cumbersome at time and deployments can often span days. However, I have heard talks of going fully automated deployments πŸ˜„, but they are still trying set up the bolts and nuts for the whole operation.

Collapse
 
jessekphillips profile image
Jesse Phillips • Edited

instructions for the DevOp team on how to deploy it. Install this and delete that.

So, you have an operations team which is named devops?

I bet everyone at the company is annoyed at how "devops" has made things more complicated for little benefit.

It seems one of the biggest challenges with these new development processes is that it requires a true collaboration, something not heavily prioritized and actively avoiding. It is so much easier to create definitions for interface handoff. We do it in good software architecture all the time.

Collapse
 
dizveloper profile image
Edvin

As a consultant, we’ve implemented and worked with a lot of different CI/CD stacks. But most of them are a variant of..

  • I push to Git
  • CI (probably Jenkins) builds and does all the checks and pushes the artifact to the respective artifactory
  • Jenkins pushes the artifact/container image to whatever implementation of k8s

Bunch of auxiliary tasks and checks on top of that basic setup.

Collapse
 
yo profile image
Yogi

Sad to say!

People here just edit the files directly from WinSCP πŸ€·β€β™€οΈ, But I'm insisting all to implement CI/CD via GitHub actions and use SSH/SFTP based deployment to Production / Canary / Staging.

Collapse
 
chathula profile image
Chathula Sampath • Edited

We use jenkins. Everytime someone create a branch and push something jenkins run all the tests and build that branch independently. and if everything is okay. We create a artifact as gzip and upload it to aws S3.

Then everytime someone want to check the changes on that branch, we have a separate page in jenkins that we can say which environment you need to deploy specific branch. You can select a environment by a dropdown and need to type banch name. Then it will download the changes from S3 and extract it and copy changes with rsync. Then it will restart the process. Within 5-10 seconds. You are ready! We only allow prod to deploy master branch! Within this approch we can test any branch at any test env. So you don't want to have staging, dev etc branches other than the master!

Collapse
 
aghost7 profile image
Jonathan Boudreau • Edited

There's more than one application which we serve at my company.

The first application uses a dated deployment, which goes like this:

  1. Bring up the maintenance page.
  2. Bring down all running web servers.
  3. Migrate the database schema.
  4. Bring up the web servers with the new release.
  5. Remove the maintenance page.

There's a couple of issues with this kind of deployment. For some customers we incur business loss because they've got people around the globe working at different hours.

The second application uses a rolling deployment, which goes like this:

  1. Migrate the database schema.
  2. Bring up the new web servers.
  3. Add the new web servers to the load balancer.
  4. Remove the old web servers from the load balancer.

There are some special considerations with regards to how migrations need to be written since the old application will still be running. For example removing a column needs to be split into two releases instead of one.

To answer your second question, our SDLC (software development life-cycle) looks for the most part like this:

  1. Open a PR.
  2. CI runs tests.
  3. Code review.
  4. Deploy to QA environment.
  5. Changes are tested internally.
  6. Deploy to UAT (user acceptance testing) environment.
  7. Customer validates that changes are OK for production.
  8. Deploy to production.