{"componentChunkName":"component---src-templates-doc-tsx","path":"/product/releases/release-automation/travis-ci/","result":{"data":{"file":{"id":"8cbdc693-2d27-56ef-88f4-01aab42b1976","relativePath":"product/releases/release-automation/travis-ci/index.mdx","sourceInstanceName":"docs","childMarkdownRemark":null,"childMdx":{"body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Travis CI\",\n  \"redirect_from\": [\"/workflow/releases/release-automation/travis-ci/\"]\n};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar CodeTabs = makeShortcode(\"CodeTabs\");\nvar CodeBlock = makeShortcode(\"CodeBlock\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"This guide walks you through the process of automating Sentry release management and deploy notifications in Travis CI. After deploying in Travis CI, you\\u2019ll be able to identify suspect commits that are likely the culprit for new errors. You\\u2019ll also be able to apply source maps to see the original code in Sentry.\"), mdx(\"p\", null, \"Before starting, confirm that your Sentry project is properly set up to track commit metadata by \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/product/releases/#install-repo-integration\"\n  }), \"installing a repository integration\"), \". Once that's installed, and you've added your repository, come back to this guide. If you've already installed a repository integration, you're ready to go.\"), mdx(\"h2\", {\n    \"id\": \"create-a-sentry-internal-integration\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", _extends({\n    parentName: \"h2\"\n  }, {\n    \"href\": \"#create-a-sentry-internal-integration\",\n    \"aria-label\": \"create a sentry internal integration permalink\",\n    \"className\": \"anchor before\"\n  }), mdx(\"svg\", _extends({\n    parentName: \"a\"\n  }, {\n    \"viewBox\": \"0 0 24 24\",\n    \"xmlns\": \"http://www.w3.org/2000/svg\"\n  }), mdx(\"path\", _extends({\n    parentName: \"svg\"\n  }, {\n    \"d\": \"M10.879 6.05L15 1.93A5.001 5.001 0 0 1 22.071 9l-4.121 4.121a1 1 0 0 1-1.414-1.414l4.12-4.121a3 3 0 1 0-4.242-4.243l-4.121 4.121a1 1 0 1 1-1.414-1.414zm2.242 11.9L9 22.07A5 5 0 1 1 1.929 15l4.121-4.121a1 1 0 0 1 1.414 1.414l-4.12 4.121a3 3 0 1 0 4.242 4.243l4.121-4.121a1 1 0 1 1 1.414 1.414zm-8.364-.122l13.071-13.07a1 1 0 0 1 1.415 1.414L6.172 19.242a1 1 0 1 1-1.415-1.414z\",\n    \"fill\": \"currentColor\"\n  })))), \"Create a Sentry Internal Integration\"), mdx(\"p\", null, \"For Travis CI to communicate securely with Sentry, you'll need to create a new internal integration. In Sentry, navigate to \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Settings > Developer Settings > New Internal Integration\"), \".\"), mdx(\"p\", null, \"Give your new integration a name (for example, \\u201CTravis CI Deploy Integration\\u201D) and specify the necessary permissions. In this case, you need Admin access for \\u201CRelease\\u201D and Read access for \\u201COrganization\\u201D.\"), mdx(\"p\", null, \"For more details about scopes and API endpoints, see the full documentation on \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/api/permissions/\"\n  }), \"API Permissions\"), \".\"), mdx(\"p\", null, mdx(\"span\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1200px\"\n    }\n  }), \"\\n      \", mdx(\"a\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/7db283b3cefe98abc19cc2a421bc17a4/aa440/internal-integration-permissions.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }), \"\\n    \", mdx(\"span\", _extends({\n    parentName: \"a\"\n  }, {\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"50.66666666666667%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAAsSAAALEgHS3X78AAAA4klEQVQoz3VR7ZIDIQjb93/Tm961q66IIHrBdlr7xeSHAwRC3C7ncPr5o8yV5QouD1RWqbpmHmDZYogpHq01FXWojiW4MKrWrFtfgUxrtlEuXKqIb9Dq/NHHDWNUrjkT+l6iediWDypUnHOPJ7IcyXV9IKttMR6zbE1dOSStZMjG8g6lH8nYHPZIBHMUe17IYNKUvQIHq67kPMlVUFgNQwa6vhqWYv49nUHGMLkZjqkOs14IvyffZSeKe0KHuuEi86vxgGDMxgNn23v4ATAspP0SZlPFtvEcpTAaXMU89Y6rtH+Qw0u0ckR40QAAAABJRU5ErkJggg==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  })), \"\\n  \", mdx(\"img\", _extends({\n    parentName: \"a\"\n  }, {\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"View of internal integration permissions.\",\n    \"title\": \"View of internal integration permissions.\",\n    \"src\": \"/static/7db283b3cefe98abc19cc2a421bc17a4/c1b63/internal-integration-permissions.png\",\n    \"srcSet\": [\"/static/7db283b3cefe98abc19cc2a421bc17a4/5a46d/internal-integration-permissions.png 300w\", \"/static/7db283b3cefe98abc19cc2a421bc17a4/0a47e/internal-integration-permissions.png 600w\", \"/static/7db283b3cefe98abc19cc2a421bc17a4/c1b63/internal-integration-permissions.png 1200w\", \"/static/7db283b3cefe98abc19cc2a421bc17a4/aa440/internal-integration-permissions.png 1500w\"],\n    \"sizes\": \"(max-width: 1200px) 100vw, 1200px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  })), \"\\n  \"), \"\\n    \")), mdx(\"p\", null, \"Click \\\"Save\\\", then record your token, which you'll need in the next section.\"), mdx(\"h2\", {\n    \"id\": \"setting-environment-variables-in-travis-ci\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", _extends({\n    parentName: \"h2\"\n  }, {\n    \"href\": \"#setting-environment-variables-in-travis-ci\",\n    \"aria-label\": \"setting environment variables in travis ci permalink\",\n    \"className\": \"anchor before\"\n  }), mdx(\"svg\", _extends({\n    parentName: \"a\"\n  }, {\n    \"viewBox\": \"0 0 24 24\",\n    \"xmlns\": \"http://www.w3.org/2000/svg\"\n  }), mdx(\"path\", _extends({\n    parentName: \"svg\"\n  }, {\n    \"d\": \"M10.879 6.05L15 1.93A5.001 5.001 0 0 1 22.071 9l-4.121 4.121a1 1 0 0 1-1.414-1.414l4.12-4.121a3 3 0 1 0-4.242-4.243l-4.121 4.121a1 1 0 1 1-1.414-1.414zm2.242 11.9L9 22.07A5 5 0 1 1 1.929 15l4.121-4.121a1 1 0 0 1 1.414 1.414l-4.12 4.121a3 3 0 1 0 4.242 4.243l4.121-4.121a1 1 0 1 1 1.414 1.414zm-8.364-.122l13.071-13.07a1 1 0 0 1 1.415 1.414L6.172 19.242a1 1 0 1 1-1.415-1.414z\",\n    \"fill\": \"currentColor\"\n  })))), \"Setting Environment Variables in Travis CI\"), mdx(\"p\", null, \"Next, you'll need a few environment variables to configure the Sentry CLI:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"SENTRY_AUTH_TOKEN\"), \"\\xA0- Your\\xA0internal integration token\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"SENTRY_ORG\"), \"\\xA0- Your Sentry organization slug\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"SENTRY_PROJECT\"), \"\\xA0- Your Sentry project slug\")), mdx(\"p\", null, \"To access your internal integration token securely, store it as an \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://docs.travis-ci.com/user/environment-variables/#defining-variables-in-repository-settings\"\n  }), \"environment variable on your repository\"), \":\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"In the Travis CI application, go to your repository's settings by clicking \\\"Settings\\\" from the \\\"More options\\\" menu.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Find the \\\"Environment Variables\\\" section.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Add a new variable with \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"SENTRY_AUTH_TOKEN\"), \" as the name and your internal integration token as the value.\")), mdx(\"p\", null, mdx(\"span\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1200px\"\n    }\n  }), \"\\n      \", mdx(\"a\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/1d9191b6c13916470590433c8b00bcd9/aa440/travis-env-vars.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }), \"\\n    \", mdx(\"span\", _extends({\n    parentName: \"a\"\n  }, {\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"33%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAIAAACHqfpvAAAACXBIWXMAAAsSAAALEgHS3X78AAAAvUlEQVQY022Q4Q6DIAyEef839I+JiVsckqDUyQSHOzg1M9uXSI7aXltUL2JkejhnRNYv3gd/IymlbdvURETKkU/nHAUjrrALkXEch2GARS4+Xddr37VEQggxxnCFEZQotLDWdl2ntYalLei+v93vEMuyeO9nfK8dX4DIxakQDxDiFd6o5Hh5vx+QpmBz5j3BPMMVA+M316Yj94LG8jibpmnbVvEx8Ay0gMC0qIcxsuHGCTkLOhljUFJVVV3XHzialfT4dY0EAAAAAElFTkSuQmCC')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  })), \"\\n  \", mdx(\"img\", _extends({\n    parentName: \"a\"\n  }, {\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"View of Travis CI environment variables.\",\n    \"title\": \"View of Travis CI environment variables.\",\n    \"src\": \"/static/1d9191b6c13916470590433c8b00bcd9/c1b63/travis-env-vars.png\",\n    \"srcSet\": [\"/static/1d9191b6c13916470590433c8b00bcd9/5a46d/travis-env-vars.png 300w\", \"/static/1d9191b6c13916470590433c8b00bcd9/0a47e/travis-env-vars.png 600w\", \"/static/1d9191b6c13916470590433c8b00bcd9/c1b63/travis-env-vars.png 1200w\", \"/static/1d9191b6c13916470590433c8b00bcd9/aa440/travis-env-vars.png 1500w\"],\n    \"sizes\": \"(max-width: 1200px) 100vw, 1200px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  })), \"\\n  \"), \"\\n    \")), mdx(\"p\", null, \"The other variables do not contain sensitive information, so you'll use the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"env\"), \" key to define them as environment variables in your .travis.yml file.\"), mdx(\"h2\", {\n    \"id\": \"create-release-and-notify-sentry-of-deployment\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", _extends({\n    parentName: \"h2\"\n  }, {\n    \"href\": \"#create-release-and-notify-sentry-of-deployment\",\n    \"aria-label\": \"create release and notify sentry of deployment permalink\",\n    \"className\": \"anchor before\"\n  }), mdx(\"svg\", _extends({\n    parentName: \"a\"\n  }, {\n    \"viewBox\": \"0 0 24 24\",\n    \"xmlns\": \"http://www.w3.org/2000/svg\"\n  }), mdx(\"path\", _extends({\n    parentName: \"svg\"\n  }, {\n    \"d\": \"M10.879 6.05L15 1.93A5.001 5.001 0 0 1 22.071 9l-4.121 4.121a1 1 0 0 1-1.414-1.414l4.12-4.121a3 3 0 1 0-4.242-4.243l-4.121 4.121a1 1 0 1 1-1.414-1.414zm2.242 11.9L9 22.07A5 5 0 1 1 1.929 15l4.121-4.121a1 1 0 0 1 1.414 1.414l-4.12 4.121a3 3 0 1 0 4.242 4.243l4.121-4.121a1 1 0 1 1 1.414 1.414zm-8.364-.122l13.071-13.07a1 1 0 0 1 1.415 1.414L6.172 19.242a1 1 0 1 1-1.415-1.414z\",\n    \"fill\": \"currentColor\"\n  })))), \"Create Release and Notify Sentry of Deployment\"), mdx(\"p\", null, \"To automate your Sentry release management process, you'll need to add the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Create release and notify Sentry of deploy\"), \" job below after your deploy step:\"), mdx(\"div\", {\n    \"className\": \"code-tabs-wrapper\"\n  }, mdx(CodeTabs, {\n    mdxType: \"CodeTabs\"\n  }, mdx(CodeBlock, {\n    language: \"yaml\",\n    title: \"\",\n    filename: \"\",\n    mdxType: \"CodeBlock\"\n  }, mdx(\"div\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"yaml\"\n  }), mdx(\"pre\", _extends({\n    parentName: \"div\"\n  }, {\n    \"className\": \"language-yaml\"\n  }), mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-yaml\"\n  }), mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token key atrule\"\n  }), \"jobs\"), mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token punctuation\"\n  }), \":\"), \"\\n  \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token key atrule\"\n  }), \"include\"), mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token punctuation\"\n  }), \":\"), \"\\n    \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token comment\"\n  }), \"# ...\"), \"\\n    \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token punctuation\"\n  }), \"-\"), \" \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token key atrule\"\n  }), \"name\"), mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token punctuation\"\n  }), \":\"), \" Create release and notify Sentry of deploy\\n      \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token key atrule\"\n  }), \"env\"), mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token punctuation\"\n  }), \":\"), \" SENTRY_ORG=sample\", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token punctuation\"\n  }), \"-\"), \"organization\", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token punctuation\"\n  }), \"-\"), \"slug SENTRY_PROJECT=sample\", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token punctuation\"\n  }), \"-\"), \"project\", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token punctuation\"\n  }), \"-\"), \"slug SENTRY_ENVIRONMENT=production\\n      \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token key atrule\"\n  }), \"script\"), mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token punctuation\"\n  }), \":\"), \" \", mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token punctuation\"\n  }), \"|\"), mdx(\"span\", _extends({\n    parentName: \"code\"\n  }, {\n    \"className\": \"token scalar string\"\n  }), \"\\n        curl -sL https://sentry.io/get-cli/ | bash\\n        export SENTRY_RELEASE=$(sentry-cli releases propose-version)\\n        sentry-cli releases new -p $SENTRY_PROJECT $SENTRY_RELEASE\\n        sentry-cli releases set-commits $SENTRY_RELEASE --auto\\n        sentry-cli releases files $SENTRY_RELEASE upload-sourcemaps path-to-sourcemaps-if-applicable\\n        sentry-cli releases finalize $SENTRY_RELEASE\\n        sentry-cli releases deploys $SENTRY_RELEASE new -e $SENTRY_ENVIRONMENT\"))))))), mdx(\"p\", null, \"For more details about the release management concepts in the snippet above, see the full documentation on \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/product/cli/releases/\"\n  }), \"release management\"), \".\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Notes\"), \":\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"If you\\u2019re not deploying a JavaScript project or have sent source maps to Sentry using another method, omit the\\xA0\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"upload-sourcemaps\"), \"\\xA0line.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"If you can\\u2019t install a repository integration, send commit metadata via the \", mdx(\"a\", _extends({\n    parentName: \"li\"\n  }, {\n    \"href\": \"/product/releases/#alternatively-without-a-repository-integration\"\n  }), \"create release endpoint\"), \" or omit the\\xA0\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"set-commits\"), \"\\xA0line (\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"set-commits\"), \" is required for suspect commits).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"sentry-cli releases propose-version\"), \"\\xA0defaults to the commit SHA of the commit being deployed (recommended). To set this to a different version, modify\\xA0\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"SENTRY_RELEASE\"), \"\\xA0to the preferred version.\")));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#create-a-sentry-internal-integration","title":"Create a Sentry Internal Integration"},{"url":"#setting-environment-variables-in-travis-ci","title":"Setting Environment Variables in Travis CI"},{"url":"#create-release-and-notify-sentry-of-deployment","title":"Create Release and Notify Sentry of Deployment"}]},"internal":{"type":"Mdx"}}}},"pageContext":{"excerpt":"This guide walks you through the process of automating Sentry release management and deploy notifications in Travis CI. After deploying in Travis CI, you’ll be able to identify suspect commits that are likely the culprit for new errors. You’ll also be able to apply source maps to see the original code in Sentry. Before starting, confirm that your Sentry project is properly set up to track commit metadata by  installing a repository integration . Once that's installed, and you've added your repository, come back to this guide. If you've already installed a repository integration, you're ready to go. Create a Sentry Internal Integration For Travis CI to communicate securely with Sentry, you'll need to create a new internal integration. In Sentry, navigate to  Settings > Developer Settings > New Internal Integration . Give your new integration a name (for example, “Travis CI Deploy Integration”) and specify the necessary permissions. In this case, you need Admin access for “Release” and Read access for “Organization”. For more details about scopes and API endpoints, see the full documentation on  API Permissions . Click \"Save\", then record your token, which you'll need in the next section. Setting Environment Variables in Travis CI Next, you'll need a few environment variables to configure the Sentry CLI: SENTRY_AUTH_TOKEN  - Your internal integration token SENTRY_ORG  - Your Sentry organization slug SENTRY_PROJECT  - Your Sentry project slug To access your internal integration token securely, store it as an  environment variable on your repository : In the Travis CI application, go to your repository's settings by clicking \"Settings\" from the \"More options\" menu. Find the \"Environment Variables\" section. Add a new variable with  SENTRY_AUTH_TOKEN  as the name and your internal integration token as the value. The other variables do not contain sensitive information, so you'll use the  env  key to define them as environment variables in your .travis.yml file. Create Release and Notify Sentry of Deployment To automate your Sentry release management process, you'll need to add the  Create release and notify Sentry of deploy  job below after your deploy step: For more details about the release management concepts in the snippet above, see the full documentation on  release management . Notes : If you’re not deploying a JavaScript project or have sent source maps to Sentry using another method, omit the  upload-sourcemaps  line. If you can’t install a repository integration, send commit metadata via the  create release endpoint  or omit the  set-commits  line ( set-commits  is required for suspect commits). sentry-cli releases propose-version  defaults to the commit SHA of the commit being deployed (recommended). To set this to a different version, modify  SENTRY_RELEASE  to the preferred version.","title":"Travis CI","description":null,"draft":null,"noindex":null,"notoc":null,"sidebar_order":null,"redirect_from":["/workflow/releases/release-automation/travis-ci/"],"keywords":null,"id":"8cbdc693-2d27-56ef-88f4-01aab42b1976","legacy":false}},"staticQueryHashes":["1218203755","1222113826","1222113826","1766336459","2158593473","2764967025","3345802723","3818502851","3990806462","4015007367","4192517163","4264099332","518019976"]}