Jenkins Job: Build and Deploy App remotely - ShoppinPal/gcp-scripts GitHub Wiki

Configure a build

Create Jenkins Job

  1. Create a new job. The link to get started looks something like: https://<jenkins-server>/view/All/newJob

  2. Type: free style

  3. Check This build is parameterized Give default values for all parameters, otherwise build triggered via git will fail.

  4. Add String Parameter

  5. Name: VM_EXTERNAL_IP

  6. Default Value: <jenkins-server> * ex: jenkins-staging.shoppinpal.com

  7. Add File Parameter

  8. File location: <File Location> * ex: server/boot/seed.json

  9. Description: <description>

  10. Add String Parameter

  11. Name: IW_STOCK_ORDER_WORKER_NAME

  12. Default Value: <default_IW_STOCK_ORDER_WORKER_NAME>

  13. Add String Parameter

  14. Name: IW_OAUTH_TOKEN

  15. Default Value: <default_IW_OAUTH_TOKEN >

  16. Add String Parameter

  17. Name: IW_URL

  18. Default Value: <default_ IW_URL>

  19. Add String Parameter

  20. Name: VEND_CLIENT_ID

  21. Default Value: <default_VEND_CLIENT_ID>

  22. Add String Parameter

  23. Name: VEND_CLIENT_SECRET

  24. Default Value: <default_VEND_CLIENT_SECRET>

  25. In Source Code Management choose Git

  26. Repository URL: https://github.com/ShoppinPal/warehouse

  27. Branch: develop

  28. Repository Browser select AUTO

  29. In Build Triggers check Build when a change is pushed to GitHub

  30. In Build Add Build Step Execute Shell and give following commands as build steps

sanity check VM_EXTERNAL_IP by spitting it out in the logs

echo $VM_EXTERNAL_IP

add a configuration file which should never be checked in to source

rather it should be controlled by the build process, like we do here

echo '{ "restApiRoot": "/api", "host": "0.0.0.0", "port": 3000, "aclErrorStatus": 403, "remoting": { "json": { "limit": "50mb" } }, "site": { "baseUrl":"https://'"${VM_EXTERNAL_IP}"'", "proxyUrl": "" }, "logging": { "console": true, "file": false }, "prestashop":{ "apiKey":"" }, "vend":{ "auth_endpoint":"https://secure.vendhq.com/connect", "token_service":".vendhq.com/api/1.0/token", "client_id":"'"${VEND_CLIENT_ID}"'", "client_secret":"'"${VEND_CLIENT_SECRET}"'" }, "ironWorkersUrl":"'"${IW_URL}"'", "ironWorkersOauthToken":"'"${IW_OAUTH_TOKEN}"'", "stockOrderWorker":"'"${IW_STOCK_ORDER_WORKER_NAME}"'" }' > server/config.staging.json

sanity check configuration by spitting it out in the logs

cat server/config.staging.json

install dependencies

npm install npm install grunt-cli npm install bower node_modules/bower/bin/bower install

use the "grunt" tool to perform a build that prepares the bits,

that may be deployed to a "staging" environment

node_modules/grunt-cli/bin/grunt deploy:staging ```

  1. Add Post-build Actions as Send build artifacts over ssh
  2. Select the ssh server where your application should be deployed
  3. Add Transfer Set
  4. Provide the following Exec Commands and leave rest of the fields empty:
```

cd /apps if [ ! -d /apps/ ]; then mkdir /apps fi if [ ! -d /apps/warehouse ]; then git clone https://github.com/ShoppinPal/warehouse --branch develop fi cd /apps/warehouse git pull

sanity check VM_EXTERNAL_IP on remote server by spitting it out in the logs

echo $VM_EXTERNAL_IP

add a configuration file which should never be checked in to source

rather it should be controlled by the build process, like we do here

echo '{ "restApiRoot": "/api", "host": "0.0.0.0", "port": 3000, "aclErrorStatus": 403, "remoting": { "json": { "limit": "50mb" } }, "site": { "baseUrl":"https://'"${VM_EXTERNAL_IP}"'", "proxyUrl": "" }, "logging": { "console": true, "file": false }, "prestashop":{ "apiKey":"" }, "vend":{ "auth_endpoint":"https://secure.vendhq.com/connect", "token_service":".vendhq.com/api/1.0/token", "client_id":"'"${VEND_CLIENT_ID}"'", "client_secret":"'"${VEND_CLIENT_SECRET}"'" }, "ironWorkersUrl":"'"${IW_URL}"'", "ironWorkersOauthToken":"'"${IW_OAUTH_TOKEN}"'", "stockOrderWorker":"'"${IW_STOCK_ORDER_WORKER_NAME}"'" }' > server/config.staging.json

sanity check configuration by spitting it out in the logs

cat server/config.staging.json

install dependencies

npm install npm install grunt-cli npm install bower node_modules/bower/bin/bower install --allow-root

use the "grunt" tool to perform a build that prepares the bits,

that may be deployed to a "staging" environment

node_modules/grunt-cli/bin/grunt deploy:staging ```

  1. Add Transfer Set

  2. Select Source files given in File Parameter and leave rest of fields empty.

  3. Add Transfer Set

  4. Provide the following Exec Commands and leave rest of the fields empty:

```

cd /apps/warehouse if forever list | grep '/apps/warehouse/server/server.js' ; then echo 'stopping /apps/warehouse/server/server.js' forever stop /apps/warehouse/server/server.js fi if forever list | grep 'server/server.js' ; then echo 'stopping server/server.js' forever stop server/server.js

fi NODE_ENV=staging DEBUG=shoppinpal:,loopback:boot,boot:create-model-instances,boot:create-role-resolver,common:models:* forever start server/server.js

```
  1. Save Job