I’m currently working on a large project that consists of several git repos. One of the repos is a static HTML project, and three of them are Node.js projects. I’m struggling to get a decent setup that allows me to easily deploy my latest builds to my server, without any difficult ways of setting it up or me having to manually clear the builds at a later stage.
Right now, I have all my projects in one repository (which I intend to change), with the following
# Check if the project properly installs and builds all dependencies build_job: stage: build script: - cd src/server - npm install # Deploy the API and place config file deploy_api_job: stage: deploy only: - production script: - cp -r . /var/www/$CI_BUILD_REF - ln -s ./$CI_BUILD_REF /var/www/templink - mv -Tf /var/www/templink /var/www/production - cp /var/www/production.json /var/www/production/src/server/config/production.json # Install all dependencies and restart the process install_api_job: stage: dependencies only: - production script: - cd /var/www/production/src/server - npm install --production # Install email_templates project dependencies install_email_templates_job: stage: dependencies only: - production script: - cd /var/www/production/src/email_templates - npm install --production # Reboot the process reboot_job: stage: reboot only: - production script: - cd /var/www/production/src/server - pm2 stop api - pm2 delete api - NODE_ENV=production pm2 start --name api index.js stages: - build - deploy - dependencies - reboot
The issues I’m running into are the following:
- I end up with a lot of “expired” builds, builds that I no longer use, but remain there anyway
- I have to run all the projects as the
gitlab-runneruser, otherwise I have to do a hell lot of file permission setups
Preferably, I’d have a different setup, where Gitlab Runner just has a folder with all my repos, on a new deployment, just pulls the latest code, leaves the files that shouldn’t be removed (such as
config/production.json) where they are, and restarts the process, without creating a new folder for every build, installing all dependencies again for every build, and the list may go on.
Does anyone else here have experience with deploying Node.js apps, and if you do, is Gitlab-CI the right way to go, or should I move to something different such as webhooks?