Environment Variables
Any environment variables used in your tasks need to be added so the deployed code will run successfully.
An environment variable in Node.js is accessed in your code using process.env.MY_ENV_VAR
.
We deploy your tasks and scale them up and down when they are triggered. So any environment variables you use in your tasks need to accessible to us so your code will run successfully.
In the dashboard
Setting environment variables
Go to the Environment Variables page
In the sidebar select the “Environment Variables” page, then press the “New environment variable” button.
Add your environment variables
You can add values for your local dev environment, staging and prod.
Specifying Dev values is optional. They will be overriden by values in your .env file when running locally.
Editing environment variables
You can edit an environment variable’s values. You cannot edit the key name, you must delete and create a new one.
Press the action button on a variable
Press edit
Deleting environment variables
Press the action button on a variable
Press delete
This will immediately delete the variable.
In your code
You can use our SDK to get and manipulate environment variables. You can also easily sync environment variables from another service into Trigger.dev.
Directly manipulating environment variables
We have a complete set of SDK functions (and REST API) you can use to directly manipulate environment variables.
Function | Description |
---|---|
envvars.list() | List all environment variables |
envvars.upload() | Upload multiple env vars. You can override existing values. |
envvars.create() | Create a new environment variable |
envvars.retrieve() | Retrieve an environment variable |
envvars.update() | Update a single environment variable |
envvars.del() | Delete a single environment variable |
Sync env vars from another service
You could use the SDK functions above but it’s much easier to use our resolveEnvVars
function in your trigger.config
file.
In this example we’re using env vars from Infisical.
import type { TriggerConfig, ResolveEnvironmentVariablesFunction } from "@trigger.dev/sdk/v3";
//This runs when you run the deploy command or the dev command
export const resolveEnvVars: ResolveEnvironmentVariablesFunction = async ({
//the project ref (starting with "proj_")
projectRef,
//any existing env vars from a .env file or Trigger.dev
env,
//"dev", "staging", or "prod"
environment,
}) => {
//the existing environment variables from Trigger.dev (or your local .env file)
if (env.INFISICAL_CLIENT_ID === undefined || env.INFISICAL_CLIENT_SECRET === undefined) {
//returning undefined won't modify the existing env vars
return;
}
const client = new InfisicalClient({
clientId: env.INFISICAL_CLIENT_ID,
clientSecret: env.INFISICAL_CLIENT_SECRET,
});
const secrets = await client.listSecrets({
environment,
projectId: env.INFISICAL_PROJECT_ID!,
});
return {
variables: secrets.map((secret) => ({
name: secret.secretKey,
value: secret.secretValue,
})),
// this defaults to true
// override: true,
};
};
//the rest of your config file
export const config: TriggerConfig = {
project: "proj_1234567890",
//etc
};
Local development
When you develop locally resolveEnvVars()
will inject the env vars from Infisical into your local process.env
.
Deploy
When you run the CLI deploy command directly or using GitHub Actions it will sync the environment variables from Infisical to Trigger.dev. This means they’ll appear on the Environment Variables page so you can confirm that it’s worked.
This means that you need to redeploy your Trigger.dev tasks if you change the environment variables in Infisical.
The variables return type
You can return variables
as an object with string keys and values, or an array of names + values.
return {
variables: {
MY_ENV_VAR: "my value",
MY_OTHER_ENV_VAR: "my other value",
},
};
or
return {
variables: [
{
name: "MY_ENV_VAR",
value: "my value",
},
{
name: "MY_OTHER_ENV_VAR",
value: "my other value",
},
],
};
This should mean that for most secret services you won’t need to convert the data into a different format.
Using Google credential JSON files
Securely pass a Google credential JSON file to your Trigger.dev task using environment variables.
Convert the Google credential file to base64
In your terminal, run the following command and copy the resulting base64 string:
base64 path/to/your/service-account-file.json
Set up the environment variable in Trigger.dev
Follow these steps to set a new environment variable using the base64 string as the value.
GOOGLE_CREDENTIALS_BASE64="<your base64 string>"
Use the environment variable in your code
Add the following code to your Trigger.dev task:
import { google } from 'googleapis';
const credentials = JSON.parse(Buffer.from(process.env.GOOGLE_CREDENTIALS_BASE64, 'base64').toString('utf8'));
const auth = new google.auth.GoogleAuth({
credentials,
scopes: ['https://www.googleapis.com/auth/cloud-platform'],
});
const client = await auth.getClient();
Use the client in your code
You can now use the client
object to make authenticated requests to Google APIs
Was this page helpful?