mirror of
https://github.com/caprover/caprover
synced 2026-07-28 19:30:55 +00:00
51 lines
2.4 KiB
Markdown
51 lines
2.4 KiB
Markdown
---
|
|
id: pre-deploy-script
|
|
title: Pre-deploy Script
|
|
sidebar_label: Pre-deploy Script
|
|
---
|
|
|
|
<br/>
|
|
This is a very advanced operation and requires attention. Otherwise, it can break the deployment for your app.
|
|
|
|
This script will run right before your container (i.e. app) gets updated due to a configuration change or app deploy. In this script, you can modify the Docker service object, invoke an HTTP call, and literally do anything. The template for this script is:
|
|
```
|
|
var preDeployFunction = function (captainAppObj, dockerUpdateObject) {
|
|
return Promise.resolve()
|
|
.then(function(){
|
|
|
|
// Do something in a Promise form
|
|
|
|
// In the end, return the "possibly-modified" dockerUpdateObject
|
|
return dockerUpdateObject;
|
|
});
|
|
};
|
|
|
|
```
|
|
|
|
Note that `captainAppObj`, is the app object as saved in `/captain/config.conf` file, and `dockerUpdateObject` is the service update object that is being passed to Docker to update the service (environmental vars, image version and etc). This object is as per [Docker docs](https://docs.docker.com/engine/api/v1.30/#operation/ServiceUpdate).
|
|
|
|
Since this script will be executed in CaptainDuckDuck process, you'll get access to all node dependecies that CaptainDuckDuck has, see [CaptainDuckDuck/app-backend/package.json](https://github.com/githubsaturn/captainduckduck/blob/master/app-backend/package.json). For example, the following script injects a UUID mapped to the deployed version to service label with every update:
|
|
|
|
```
|
|
var uuid = require('uuid/v4');
|
|
|
|
var preDeployFunction = function (captainAppObj, dockerUpdateObject) {
|
|
return Promise.resolve()
|
|
.then(function(){
|
|
|
|
dockerUpdateObject.TaskTemplate.ContainerSpec.Labels[uuid()] =
|
|
captainAppObj.deployedVersion+ '';
|
|
return dockerUpdateObject;
|
|
});
|
|
};
|
|
|
|
```
|
|
|
|
Note that this pre-deploy script, particularly Docker service update object, is complicated. Hence, it is strongly recommended to use this pre-deploy method if you are an expert user. For example, note that how an empty string is being added to the deployed version in this line:
|
|
|
|
```
|
|
dockerUpdateObject.TaskTemplate.ContainerSpec.Labels[uuid()] = captainAppObj.deployedVersion+ '';
|
|
```
|
|
|
|
Removing this causes an error. To see logs, you need to run `docker service logs captain-captain --follow`. Even the error from Docker is not very clear. All in all, this is an advanced feature and is not recommended for beginners and intermiate users.
|