Files
triggerdotdev--trigger.dev/docs/deploy-environment-variables.mdx
T
James Ritchie d6786002b2 Full Next.js guide (#1259)
* tasks no longer inside a group in the side menu (and added “cron”)

* Delay using a timezone

* Added React Not Defined error to the troubleshooting page

* Improved the React common problem

* Link to v2 docs

* New Development section and entry in Common Problems

* Concurrently running the terminal

* Fixed the .env weirdness

* Added section on creating PATs for Github actions

* Improved the Machine spec and limits page

* Quick start steps now have nice images

* Added a diagram for the lifecycle functions

* Added note about onFailure

* CRON -> cron/Cron

* WIP adding more steps to the next.js guide

* WIP next.js

* WIP adding tabbed steps for pages/app router

* References to Infisical links to their homepage so it’s clearer

* WIP updating the nextjs guide

* WIP nextjs guide

* More nextjs guide steps

* More copy

* Added rate limit trouble shooting

* Removed old prisma error title

* Added secret key step

* Added a note for logging in using a specified domain if self hosting

* typo

* App router docs copy

* Deploy copy update

* Added a favicon.png to fix a docs build error

* Removed unused snippet

* Server actions now inside a tab

* Server actions + restructured the triggering section

* Added troubleshooting snippet for react event handlers

* Added a new troubleshooting snippet for ESM

* Updated old replaying image to reflect the new UI

* Removed references to reattempting

* Updated replaying from the run page

* Added a bulk replay section

* Updated the writing tasks intro page

* Removed edge runtime code for now

* Added edge runtime – it seems to just work!

* import type
2024-08-20 14:50:39 +01:00

178 lines
5.8 KiB
Plaintext

---
title: "Environment Variables"
description: "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
<Steps>
<Step title="Go to the Environment Variables page">
In the sidebar select the "Environment Variables" page, then press the "New environment variable"
button. ![Environment variables page](/images/environment-variables-page.jpg)
</Step>
<Step title="Add your environment variables">
You can add values for your local dev environment, staging and prod. ![Environment variables
page](/images/environment-variables-panel.jpg)
</Step>
</Steps>
<Note>
Specifying Dev values is optional. They will be overriden by values in your .env file when running
locally.
</Note>
### 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.
<Steps>
<Step title="Press the action button on a variable">
![Environment variables page](/images/environment-variables-actions.png)
</Step>
<Step title="Press edit">
![Environment variables page](/images/environment-variables-edit-popover.png)
</Step>
</Steps>
### Deleting environment variables
<Warn>
Environment variables are fetched and injected before a runs begins. So if you delete one you can
cause runs to fail that are expecting variables to be set.
</Warn>
<Steps>
<Step title="Press the action button on a variable">
![Environment variables page](/images/environment-variables-actions.png)
</Step>
<Step title="Press delete">
This will immediately delete the variable. ![Environment variables
page](/images/environment-variables-delete-popover.png)
</Step>
</Steps>
## 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()](/management/envvars/list) | List all environment variables |
| [envvars.upload()](/management/envvars/import) | Upload multiple env vars. You can override existing values. |
| [envvars.create()](/management/envvars/create) | Create a new environment variable |
| [envvars.retrieve()](/management/envvars/retrieve) | Retrieve an environment variable |
| [envvars.update()](/management/envvars/update) | Update a single environment variable |
| [envvars.del()](/management/envvars/delete) | 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](https://infisical.com).
```ts /trigger.config.ts
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](/cli-dev) `resolveEnvVars()` will inject the env vars from [Infisical](https://infisical.com) into your local `process.env`.
#### Deploy
When you run the [CLI deploy command](/cli-deploy) directly or using [GitHub Actions](/github-actions) it will sync the environment variables from [Infisical](https://infisical.com) 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](https://infisical.com).
### The variables return type
You can return `variables` as an object with string keys and values, or an array of names + values.
```ts
return {
variables: {
MY_ENV_VAR: "my value",
MY_OTHER_ENV_VAR: "my other value",
},
};
```
or
```ts
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.