Question

How to run script pre-deployment on AppPlatform

Hi,

I have an app on App Platform. It is gathering custom logs on local files. Every time I deploy the app, the log files are destroyed (I know this is expected behavior).

I do not want to forward my logs (to Papertrail, Datadog, or Logtail). Instead, I just want to upload them to an online storage service anytime the app redeploys, and I need this to happen BEFORE the redeploy starts and the local files are destroyed. I have coded all the upload functionality into a script that can be called from npm.

My question: Is there a way of telling App Platform to run a certain command before it destroys the local files on a redeploy? I can do it manually via the console but it’s extremely tedious to have to do it every time I merge in a PR or redeploy the app.

A.K.A is there a way of adding a pre-deploy step to the “deploy” pipeline that uses the currently deployed app?

I was looking into Workers, but it seems like they need a separate source, whereas I just want to run a command from within my existing main app component (so it can access the logs).

Thanks for your help!


Submit an answer
Answer a question...

This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Sign In or Sign Up to Answer

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

Jon Friesen
DigitalOcean Employee
DigitalOcean Employee badge
August 15, 2022

👋 Hi @jhappy77

You can run some cleanup code by monitoring for a termination signal. For example, in a node.js app you could have:

process.on('SIGTERM', () => {
    console.info('SIGTERM signal received.');

    /**
     * This is where cleanup code can be run. For example, closing down the http server.
     */
    console.log('Closing http server.');
    server.close(() => {
        console.log('Http server closed.');
    });

    process.exit(0)
});

For more information on shutdown sequences in App Platform (which runs on Kubernetes), checkout this article: Kubernetes best practices: terminating with grace

Some additional notes:

  • By the time this signal is given, traffic will no longer be reaching this instance of your app.
  • This cleanup code should execute fairly quickly before the process will be terminated within 30 seconds.
Bobby Iliev
Site Moderator
Site Moderator badge
August 15, 2022

Hi there,

This is not currently an option with the App Platform, but what you could do is to use GitHub actions to run specific actions on every pull request for example:

https://github.com/features/actions

That way, before merging your pull request, which triggers the deployment on the App Platform side, the GitHub action will run and execute the specific steps that you need. You could for example have an API endpoint that the GitHub action triggers which then starts the upload process of your files.

Hope that this helps!

Best,

Bobby

Want to learn more? Join the DigitalOcean Community!

Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in Q&A, subscribe to topics of interest, and get courses and tools that will help you grow as a developer and scale your project or business.