![]() |
VOOZH | about |
Datadog Agent v7.35.0 or later is required.
If you have APM set up already, navigate to Integrations > Link Source Code and configure the source code integration for your backend services.
Your telemetry must be tagged with Git information that ties the running application version with a particular repository and commit.
For supported languages, Datadog recommends embedding Git information in the deployed artifacts, which is then extracted by the Datadog SDKs automatically.
For other languages and configurations, you can configure telemetry tagging yourself.
You can embed the repository URL and commit hash in your build artifact. The Datadog SDKs use this information to automatically add the right tags to your APM service telemetry.
Select one of the following languages that supports embedding git information:
If you are using Docker containers, you have three options: using Docker, using the Datadog SDK, or configuring your application with DD_GIT_* environment variables.
You can embed git information in your Docker image using either build arguments with environment variables, or image labels.
Add the following lines to your application’s Dockerfile:
ARG DD_GIT_REPOSITORY_URLARG DD_GIT_COMMIT_SHAENV DD_GIT_REPOSITORY_URL=${DD_GIT_REPOSITORY_URL} ENV DD_GIT_COMMIT_SHA=${DD_GIT_COMMIT_SHA}Add the following arguments to your Docker build command:
docker build . \
-t my-application \
--build-arg DD_GIT_REPOSITORY_URL=<git-provider.example/me/my-repo> \
--build-arg DD_GIT_COMMIT_SHA=$(git rev-parse HEAD)
This approach requires Docker, or containerd >= 1.5.6. It doesn’t support containers running on AWS Fargate.
Datadog can extract source code information directly from your images’ Docker labels. During build time, follow the Open Containers standard to add the git commit SHA and repository URL as Docker labels:
docker build . \
-t my-application \
--label org.opencontainers.image.revision=$(git rev-parse HEAD) \
--label org.opencontainers.image.source=$(git config --get remote.origin.url)
Go embeds version control information in binaries since version 1.18. The Datadog tracing library uses this information to tag your telemetry with the latest commit SHA and repository URL.
Ensure your service meets the following requirements to use this approach:
DD_GIT_* environment variablesConfigure your application with the DD_GIT_* environment variables:
exportDD_GIT_COMMIT_SHA="<commitSha>"exportDD_GIT_REPOSITORY_URL="<git-provider.example/me/my-repo>"Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables.
If you are using Serverless, you have three options depending on your serverless application’s setup.
datadog-ci client version 2.10.0 or later. You must run the CLI tool in the same directory as the code repository.datadog-cdk-constructs version 0.8.5 or later for AWS CDK v1.datadog-cdk-constructs version 1.4.0 or later for AWS CDK v2.Go embeds version control information in binaries since version 1.18. The Datadog tracing library uses this information to tag your telemetry with the latest commit SHA and repository URL.
Ensure your service meets the following requirements to use this approach:
DD_GIT_* environment variablesConfigure your application with the DD_GIT_* environment variables:
exportDD_GIT_COMMIT_SHA="<commitSha>"exportDD_GIT_REPOSITORY_URL="<git-provider.example/me/my-repo>"Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables.
If you are using a host, you have two options.
Go embeds version control information in binaries since version 1.18. The Datadog tracing library uses this information to tag your telemetry with the latest commit SHA and repository URL.
Ensure your service meets the following requirements to use this approach:
DD_GIT_* environment variablesConfigure your application with the DD_GIT_* environment variables:
exportDD_GIT_COMMIT_SHA="<commitSha>"exportDD_GIT_REPOSITORY_URL="<git-provider.example/me/my-repo>"Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables.
If you are using Docker containers, you have three options: using Docker, using Setuptools, or configuring your application with DD_GIT_* environment variables.
You can embed git information in your Docker image using either build arguments with environment variables, or image labels.
Add the following lines to your application’s Dockerfile:
ARG DD_GIT_REPOSITORY_URLARG DD_GIT_COMMIT_SHAENV DD_GIT_REPOSITORY_URL=${DD_GIT_REPOSITORY_URL} ENV DD_GIT_COMMIT_SHA=${DD_GIT_COMMIT_SHA}Add the following arguments to your Docker build command:
docker build . \
-t my-application \
--build-arg DD_GIT_REPOSITORY_URL=<git-provider.example/me/my-repo> \
--build-arg DD_GIT_COMMIT_SHA=$(git rev-parse HEAD)
This approach requires Docker, or containerd >= 1.5.6. It doesn’t support containers running on AWS Fargate.
Datadog can extract source code information directly from your images’ Docker labels. During build time, follow the Open Containers standard to add the git commit SHA and repository URL as Docker labels:
docker build . \
-t my-application \
--label org.opencontainers.image.revision=$(git rev-parse HEAD) \
--label org.opencontainers.image.source=$(git config --get remote.origin.url)
If your application is packaged with setuptools:
dd-trace package.import ddtrace.sourcecode.setuptools_auto as the first import to the setup.py file.DD_MAIN_PACKAGE environment variable as the name of the primary Python package.If your application is using a unified Python project settings file:
hatch-datadog-build-metadata plugin and configure it to embed git metadata. If a project already has URLs, reconfigure them as dynamic and move them to another configuration section. For more information, see the plugin source code.DD_MAIN_PACKAGE environment variable as the name of the primary Python package.DD_GIT_* environment variablesConfigure your application with the DD_GIT_* environment variables:
exportDD_GIT_COMMIT_SHA="<commitSha>"exportDD_GIT_REPOSITORY_URL="<git-provider.example/me/my-repo>"Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables.
If you are using Serverless, you have three options depending on your serverless application’s setup.
datadog-ci client version 2.10.0 or later. You must run the CLI tool in the same directory as the code repository.datadog-cdk-constructs version 0.8.5 or later for AWS CDK v1.datadog-cdk-constructs version 1.4.0 or later for AWS CDK v2.If your application is packaged with setuptools:
dd-trace package.import ddtrace.sourcecode.setuptools_auto as the first import to the setup.py file.DD_MAIN_PACKAGE environment variable as the name of the primary Python package.If your application is using a unified Python project settings file:
hatch-datadog-build-metadata plugin and configure it to embed git metadata. If a project already has URLs, reconfigure them as dynamic and move them to another configuration section. For more information, see the plugin source code.DD_MAIN_PACKAGE environment variable as the name of the primary Python package.DD_GIT_* environment variablesConfigure your application with the DD_GIT_* environment variables:
exportDD_GIT_COMMIT_SHA="<commitSha>"exportDD_GIT_REPOSITORY_URL="<git-provider.example/me/my-repo>"Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables.
If you are using a host, you have two options.
If your application is packaged with setuptools:
dd-trace package.import ddtrace.sourcecode.setuptools_auto as the first import to the setup.py file.DD_MAIN_PACKAGE environment variable as the name of the primary Python package.If your application is using a unified Python project settings file:
hatch-datadog-build-metadata plugin and configure it to embed git metadata. If a project already has URLs, reconfigure them as dynamic and move them to another configuration section. For more information, see the plugin source code.DD_MAIN_PACKAGE environment variable as the name of the primary Python package.DD_GIT_* environment variablesConfigure your application with the DD_GIT_* environment variables:
exportDD_GIT_COMMIT_SHA="<commitSha>"exportDD_GIT_REPOSITORY_URL="<git-provider.example/me/my-repo>"Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables.
As a first step, ensure that your .pdb files are deployed alongside your .NET assemblies (.dll or .exe) in the same folder.
Then, follow the rest of the instructions based on your specific deployment model:
If you are using Docker containers, you have three options: using Docker, using Microsoft SourceLink, or configuring your application with DD_GIT_* environment variables.
You can embed git information in your Docker image using either build arguments with environment variables, or image labels.
Add the following lines to your application’s Dockerfile:
ARG DD_GIT_REPOSITORY_URLARG DD_GIT_COMMIT_SHAENV DD_GIT_REPOSITORY_URL=${DD_GIT_REPOSITORY_URL} ENV DD_GIT_COMMIT_SHA=${DD_GIT_COMMIT_SHA}Add the following arguments to your Docker build command:
docker build . \
-t my-application \
--build-arg DD_GIT_REPOSITORY_URL=<git-provider.example/me/my-repo> \
--build-arg DD_GIT_COMMIT_SHA=$(git rev-parse HEAD)
This approach requires Docker, or containerd >= 1.5.6. It doesn’t support containers running on AWS Fargate.
Datadog can extract source code information directly from your images’ Docker labels. During build time, follow the Open Containers standard to add the git commit SHA and repository URL as Docker labels:
docker build . \
-t my-application \
--label org.opencontainers.image.revision=$(git rev-parse HEAD) \
--label org.opencontainers.image.source=$(git config --get remote.origin.url)
If you are using Microsoft SourceLink, Datadog can extract the git commit SHA and repository URL from your .NET assembly.
.csproj) in an IDE and add a reference to one of the following NuGet packages, depending on where your git repository is hosted:| Provider | Microsoft SourceLink |
|---|---|
| GitHub | Microsoft.SourceLink.GitHub |
| Bitbucket | Microsoft.SourceLink.Bitbucket.Git |
| GitLab | Microsoft.SourceLink.GitLab |
| Azure DevOps | Microsoft.SourceLink.AzureRepos.Git |
| Azure DevOps Server | Microsoft.SourceLink.AzureDevOpsServer.Git |
DD_GIT_* environment variablesConfigure your application with the DD_GIT_* environment variables:
exportDD_GIT_COMMIT_SHA="<commitSha>"exportDD_GIT_REPOSITORY_URL="<git-provider.example/me/my-repo>"Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables.
If you are using Serverless, you have three options depending on your serverless application’s setup.
datadog-ci client version 2.10.0 or later. You must run the CLI tool in the same directory as the code repository.datadog-cdk-constructs version 0.8.5 or later for AWS CDK v1.datadog-cdk-constructs version 1.4.0 or later for AWS CDK v2.If you are using Microsoft SourceLink, Datadog can extract the git commit SHA and repository URL from your .NET assembly.
.csproj) in an IDE and add a reference to one of the following NuGet packages, depending on where your git repository is hosted:| Provider | Microsoft SourceLink |
|---|---|
| GitHub | Microsoft.SourceLink.GitHub |
| Bitbucket | Microsoft.SourceLink.Bitbucket.Git |
| GitLab | Microsoft.SourceLink.GitLab |
| Azure DevOps | Microsoft.SourceLink.AzureRepos.Git |
| Azure DevOps Server | Microsoft.SourceLink.AzureDevOpsServer.Git |
DD_GIT_* environment variablesConfigure your application with the DD_GIT_* environment variables:
exportDD_GIT_COMMIT_SHA="<commitSha>"exportDD_GIT_REPOSITORY_URL="<git-provider.example/me/my-repo>"Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables.
If you are using a host, you have two options: using Microsoft SourceLink or configuring your application with DD_GIT_* environment variables.
If you are using Microsoft SourceLink, Datadog can extract the git commit SHA and repository URL from your .NET assembly.
.csproj) in an IDE and add a reference to one of the following NuGet packages, depending on where your git repository is hosted:| Provider | Microsoft SourceLink |
|---|---|
| GitHub | Microsoft.SourceLink.GitHub |
| Bitbucket | Microsoft.SourceLink.Bitbucket.Git |
| GitLab | Microsoft.SourceLink.GitLab |
| Azure DevOps | Microsoft.SourceLink.AzureRepos.Git |
| Azure DevOps Server | Microsoft.SourceLink.AzureDevOpsServer.Git |
DD_GIT_* environment variablesConfigure your application with the DD_GIT_* environment variables:
exportDD_GIT_COMMIT_SHA="<commitSha>"exportDD_GIT_REPOSITORY_URL="<git-provider.example/me/my-repo>"Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables.
--enable-source-maps flag. Otherwise, code links and snippets will not work.If you are using Docker containers, you have three options: using a bundler plugin, using Docker, or configuring your application with DD_GIT_* environment variables.
If you’re bundling your application from a Git directory, you can use plugins to inject Git metadata into the runtime bundle.
Use the dd-trace/esbuild plugin to automatically inject DD_GIT_REPOSITORY_URL and DD_GIT_COMMIT_SHA in your runtime bundle. See the plugin documentation.
Install dd-trace v5.68.0 or later for automatic Git tag injection.
const esbuild = require('esbuild');
+ const ddPlugin = require('dd-trace/esbuild');
esbuild.build({
entryPoints: ['index.js'],
bundle: true,
platform: 'node',
target: ['node20'],
format: 'cjs',
outfile: 'dist/bundle.js',
packages: 'external',
external: ['dd-trace', 'express']
+ plugins: [ddPlugin],
}).catch((e) => {
console.error(e);
process.exit(1);
});
Use rollup-plugin-inject-process-env to inject DD_GIT_REPOSITORY_URL and DD_GIT_COMMIT_SHA in your runtime bundle. Run the bundle step inside a Git repository so the script can read .git/ information.
+ const injectProcessEnv = require('rollup-plugin-inject-process-env');
+ const { DD_GIT_REPOSITORY_URL, DD_GIT_COMMIT_SHA } = getGitInfo();
module.exports = {
input: 'index.js',
output: {
file: 'dist/bundle.js',
format: 'cjs'
},
external: [
'express',
'dd-trace'
],
plugins: [
nodeResolve(),
commonjs()
+ injectProcessEnv({
+ DD_GIT_REPOSITORY_URL,
+ DD_GIT_COMMIT_SHA
+ })
]
};
The getGitInfo() function executes git commands to return DD_GIT_REPOSITORY_URL and DD_GIT_COMMIT_SHA variables. It needs to be executed in the git repository.
const { execSync } = require('child_process');
function getGitInfo() {
try {
const commitSha = execSync('git rev-parse HEAD', { encoding: 'utf8' }).trim();
const repositoryUrl = execSync('git config --get remote.origin.url', { encoding: 'utf8' }).trim();
console.log('Build-time Git metadata:', {
commitSha,
repositoryUrl,
});
return {
DD_GIT_REPOSITORY_URL: repositoryUrl,
DD_GIT_COMMIT_SHA: commitSha,
};
} catch (error) {
console.warn('Could not get Git metadata at build time:', error.message);
return {
DD_GIT_REPOSITORY_URL: '',
DD_GIT_COMMIT_SHA: '',
};
}
}
Use the BannerPlugin to inject DD_GIT_REPOSITORY_URL and DD_GIT_COMMIT_SHA in your runtime bundle. Run the bundle step inside a Git repository so the script can read .git/ information.
+ const webpack = require('webpack');
+ const { DD_GIT_REPOSITORY_URL, DD_GIT_COMMIT_SHA } = getGitInfo();
module.exports = {
target: 'node',
entry: './index.js',
mode: 'production',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
libraryTarget: 'commonjs2'
},
externals: [
'express',
'dd-trace'
],
plugins: [
+ new webpack.BannerPlugin({
+ raw: true,
+ entryOnly: true,
+ banner:
+ `process.env.DD_GIT_REPOSITORY_URL=${JSON.stringify(DD_GIT_REPOSITORY_URL)};` +
+ `process.env.DD_GIT_COMMIT_SHA=${JSON.stringify(DD_GIT_COMMIT_SHA)};`,
+ }),
]
};
The getGitInfo() function executes git commands to return DD_GIT_REPOSITORY_URL and DD_GIT_COMMIT_SHA variables. It needs to be executed in the git repository.
const { execSync } = require('child_process');
function getGitInfo() {
try {
const commitSha = execSync('git rev-parse HEAD', { encoding: 'utf8' }).trim();
const repositoryUrl = execSync('git config --get remote.origin.url', { encoding: 'utf8' }).trim();
console.log('Build-time Git metadata:', {
commitSha,
repositoryUrl,
});
return {
DD_GIT_REPOSITORY_URL: repositoryUrl,
DD_GIT_COMMIT_SHA: commitSha,
};
} catch (error) {
console.warn('Could not get Git metadata at build time:', error.message);
return {
DD_GIT_REPOSITORY_URL: '',
DD_GIT_COMMIT_SHA: '',
};
}
}
You can embed git information in your Docker image using either build arguments with environment variables, or image labels.
Add the following lines to your application’s Dockerfile:
ARG DD_GIT_REPOSITORY_URLARG DD_GIT_COMMIT_SHAENV DD_GIT_REPOSITORY_URL=${DD_GIT_REPOSITORY_URL} ENV DD_GIT_COMMIT_SHA=${DD_GIT_COMMIT_SHA}Add the following arguments to your Docker build command:
docker build . \
-t my-application \
--build-arg DD_GIT_REPOSITORY_URL=<git-provider.example/me/my-repo> \
--build-arg DD_GIT_COMMIT_SHA=$(git rev-parse HEAD)
This approach requires Docker, or containerd >= 1.5.6. It doesn’t support containers running on AWS Fargate.
Datadog can extract source code information directly from your images’ Docker labels. During build time, follow the Open Containers standard to add the git commit SHA and repository URL as Docker labels:
docker build . \
-t my-application \
--label org.opencontainers.image.revision=$(git rev-parse HEAD) \
--label org.opencontainers.image.source=$(git config --get remote.origin.url)
DD_GIT_* environment variablesConfigure your application with the DD_GIT_* environment variables:
exportDD_GIT_COMMIT_SHA="<commitSha>"exportDD_GIT_REPOSITORY_URL="<git-provider.example/me/my-repo>"Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables.
If you are using Serverless, you have several options depending on your serverless application’s setup.
If you’re bundling your application from a Git directory, you can use plugins to inject Git metadata into the runtime bundle.
Use the dd-trace/esbuild plugin to automatically inject DD_GIT_REPOSITORY_URL and DD_GIT_COMMIT_SHA in your runtime bundle. See the plugin documentation.
Install dd-trace v5.68.0 or later for automatic Git tag injection.
const esbuild = require('esbuild');
+ const ddPlugin = require('dd-trace/esbuild');
esbuild.build({
entryPoints: ['index.js'],
bundle: true,
platform: 'node',
target: ['node20'],
format: 'cjs',
outfile: 'dist/bundle.js',
packages: 'external',
external: ['dd-trace', 'express']
+ plugins: [ddPlugin],
}).catch((e) => {
console.error(e);
process.exit(1);
});
Use rollup-plugin-inject-process-env to inject DD_GIT_REPOSITORY_URL and DD_GIT_COMMIT_SHA in your runtime bundle. Run the bundle step inside a Git repository so the script can read .git/ information.
+ const injectProcessEnv = require('rollup-plugin-inject-process-env');
+ const { DD_GIT_REPOSITORY_URL, DD_GIT_COMMIT_SHA } = getGitInfo();
module.exports = {
input: 'index.js',
output: {
file: 'dist/bundle.js',
format: 'cjs'
},
external: [
'express',
'dd-trace'
],
plugins: [
nodeResolve(),
commonjs()
+ injectProcessEnv({
+ DD_GIT_REPOSITORY_URL,
+ DD_GIT_COMMIT_SHA
+ })
]
};
The getGitInfo() function executes git commands to return DD_GIT_REPOSITORY_URL and DD_GIT_COMMIT_SHA variables. It needs to be executed in the git repository.
const { execSync } = require('child_process');
function getGitInfo() {
try {
const commitSha = execSync('git rev-parse HEAD', { encoding: 'utf8' }).trim();
const repositoryUrl = execSync('git config --get remote.origin.url', { encoding: 'utf8' }).trim();
console.log('Build-time Git metadata:', {
commitSha,
repositoryUrl,
});
return {
DD_GIT_REPOSITORY_URL: repositoryUrl,
DD_GIT_COMMIT_SHA: commitSha,
};
} catch (error) {
console.warn('Could not get Git metadata at build time:', error.message);
return {
DD_GIT_REPOSITORY_URL: '',
DD_GIT_COMMIT_SHA: '',
};
}
}
Use the BannerPlugin to inject DD_GIT_REPOSITORY_URL and DD_GIT_COMMIT_SHA in your runtime bundle. Run the bundle step inside a Git repository so the script can read .git/ information.
+ const webpack = require('webpack');
+ const { DD_GIT_REPOSITORY_URL, DD_GIT_COMMIT_SHA } = getGitInfo();
module.exports = {
target: 'node',
entry: './index.js',
mode: 'production',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
libraryTarget: 'commonjs2'
},
externals: [
'express',
'dd-trace'
],
plugins: [
+ new webpack.BannerPlugin({
+ raw: true,
+ entryOnly: true,
+ banner:
+ `process.env.DD_GIT_REPOSITORY_URL=${JSON.stringify(DD_GIT_REPOSITORY_URL)};` +
+ `process.env.DD_GIT_COMMIT_SHA=${JSON.stringify(DD_GIT_COMMIT_SHA)};`,
+ }),
]
};
The getGitInfo() function executes git commands to return DD_GIT_REPOSITORY_URL and DD_GIT_COMMIT_SHA variables. It needs to be executed in the git repository.
const { execSync } = require('child_process');
function getGitInfo() {
try {
const commitSha = execSync('git rev-parse HEAD', { encoding: 'utf8' }).trim();
const repositoryUrl = execSync('git config --get remote.origin.url', { encoding: 'utf8' }).trim();
console.log('Build-time Git metadata:', {
commitSha,
repositoryUrl,
});
return {
DD_GIT_REPOSITORY_URL: repositoryUrl,
DD_GIT_COMMIT_SHA: commitSha,
};
} catch (error) {
console.warn('Could not get Git metadata at build time:', error.message);
return {
DD_GIT_REPOSITORY_URL: '',
DD_GIT_COMMIT_SHA: '',
};
}
}
datadog-ci client version 2.10.0 or later. You must run the CLI tool in the same directory as the code repository.datadog-cdk-constructs version 0.8.5 or later for AWS CDK v1.datadog-cdk-constructs version 1.4.0 or later for AWS CDK v2.DD_GIT_* environment variablesConfigure your application with the DD_GIT_* environment variables:
exportDD_GIT_COMMIT_SHA="<commitSha>"exportDD_GIT_REPOSITORY_URL="<git-provider.example/me/my-repo>"Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables.
For host-based environments, you have two options based on your build and deploy configuration.
If you’re bundling your application from a Git directory, you can use plugins to inject Git metadata into the runtime bundle.
Use the dd-trace/esbuild plugin to automatically inject DD_GIT_REPOSITORY_URL and DD_GIT_COMMIT_SHA in your runtime bundle. See the plugin documentation.
Install dd-trace v5.68.0 or later for automatic Git tag injection.
const esbuild = require('esbuild');
+ const ddPlugin = require('dd-trace/esbuild');
esbuild.build({
entryPoints: ['index.js'],
bundle: true,
platform: 'node',
target: ['node20'],
format: 'cjs',
outfile: 'dist/bundle.js',
packages: 'external',
external: ['dd-trace', 'express']
+ plugins: [ddPlugin],
}).catch((e) => {
console.error(e);
process.exit(1);
});
Use rollup-plugin-inject-process-env to inject DD_GIT_REPOSITORY_URL and DD_GIT_COMMIT_SHA in your runtime bundle. Run the bundle step inside a Git repository so the script can read .git/ information.
+ const injectProcessEnv = require('rollup-plugin-inject-process-env');
+ const { DD_GIT_REPOSITORY_URL, DD_GIT_COMMIT_SHA } = getGitInfo();
module.exports = {
input: 'index.js',
output: {
file: 'dist/bundle.js',
format: 'cjs'
},
external: [
'express',
'dd-trace'
],
plugins: [
nodeResolve(),
commonjs()
+ injectProcessEnv({
+ DD_GIT_REPOSITORY_URL,
+ DD_GIT_COMMIT_SHA
+ })
]
};
The getGitInfo() function executes git commands to return DD_GIT_REPOSITORY_URL and DD_GIT_COMMIT_SHA variables. It needs to be executed in the git repository.
const { execSync } = require('child_process');
function getGitInfo() {
try {
const commitSha = execSync('git rev-parse HEAD', { encoding: 'utf8' }).trim();
const repositoryUrl = execSync('git config --get remote.origin.url', { encoding: 'utf8' }).trim();
console.log('Build-time Git metadata:', {
commitSha,
repositoryUrl,
});
return {
DD_GIT_REPOSITORY_URL: repositoryUrl,
DD_GIT_COMMIT_SHA: commitSha,
};
} catch (error) {
console.warn('Could not get Git metadata at build time:', error.message);
return {
DD_GIT_REPOSITORY_URL: '',
DD_GIT_COMMIT_SHA: '',
};
}
}
Use the BannerPlugin to inject DD_GIT_REPOSITORY_URL and DD_GIT_COMMIT_SHA in your runtime bundle. Run the bundle step inside a Git repository so the script can read .git/ information.
+ const webpack = require('webpack');
+ const { DD_GIT_REPOSITORY_URL, DD_GIT_COMMIT_SHA } = getGitInfo();
module.exports = {
target: 'node',
entry: './index.js',
mode: 'production',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
libraryTarget: 'commonjs2'
},
externals: [
'express',
'dd-trace'
],
plugins: [
+ new webpack.BannerPlugin({
+ raw: true,
+ entryOnly: true,
+ banner:
+ `process.env.DD_GIT_REPOSITORY_URL=${JSON.stringify(DD_GIT_REPOSITORY_URL)};` +
+ `process.env.DD_GIT_COMMIT_SHA=${JSON.stringify(DD_GIT_COMMIT_SHA)};`,
+ }),
]
};
The getGitInfo() function executes git commands to return DD_GIT_REPOSITORY_URL and DD_GIT_COMMIT_SHA variables. It needs to be executed in the git repository.
const { execSync } = require('child_process');
function getGitInfo() {
try {
const commitSha = execSync('git rev-parse HEAD', { encoding: 'utf8' }).trim();
const repositoryUrl = execSync('git config --get remote.origin.url', { encoding: 'utf8' }).trim();
console.log('Build-time Git metadata:', {
commitSha,
repositoryUrl,
});
return {
DD_GIT_REPOSITORY_URL: repositoryUrl,
DD_GIT_COMMIT_SHA: commitSha,
};
} catch (error) {
console.warn('Could not get Git metadata at build time:', error.message);
return {
DD_GIT_REPOSITORY_URL: '',
DD_GIT_COMMIT_SHA: '',
};
}
}
DD_GIT_* environment variablesConfigure your application with the DD_GIT_* environment variables:
exportDD_GIT_COMMIT_SHA="<commitSha>"exportDD_GIT_REPOSITORY_URL="<git-provider.example/me/my-repo>"Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables.
If you are using Docker containers, you have two options: using Docker or configuring your application with the DD_TAGS environment variable.
You can embed git information in your Docker image using either build arguments with environment variables, or image labels.
Add the following lines to your application’s Dockerfile:
ARG DD_GIT_REPOSITORY_URLARG DD_GIT_COMMIT_SHAENV DD_TAGS="git.repository_url:${DD_GIT_REPOSITORY_URL},git.commit.sha:${DD_GIT_COMMIT_SHA}"Add the following arguments to your Docker build command:
docker build . \
-t my-application \
--build-arg DD_GIT_REPOSITORY_URL=<git-provider.example/me/my-repo> \
--build-arg DD_GIT_COMMIT_SHA=$(git rev-parse HEAD)
This approach requires Docker, or containerd >= 1.5.6. It doesn’t support containers running on AWS Fargate.
Datadog can extract source code information directly from your images’ Docker labels. During build time, follow the Open Containers standard to add the git commit SHA and repository URL as Docker labels:
docker build . \
-t my-application \
--label org.opencontainers.image.revision=$(git rev-parse HEAD) \
--label org.opencontainers.image.source=$(git config --get remote.origin.url)
DD_TAGS environment variableConfigure your application with the DD_TAGS environment variable:
export DD_TAGS="git.commit.sha:<commitSha>,git.repository_url:<git-provider.example/me/my-repo>"
Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables.
If you are using Serverless, you have two options depending on your serverless application’s setup.
datadog-ci client version 2.10.0 or later. You must run the CLI tool in the same directory as the code repository.datadog-cdk-constructs version 0.8.5 or later for AWS CDK v1.datadog-cdk-constructs version 1.4.0 or later for AWS CDK v2.DD_TAGS environment variableConfigure your application with the DD_TAGS environment variable:
export DD_TAGS="git.commit.sha:<commitSha>,git.repository_url:<git-provider.example/me/my-repo>"
Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables.
If you are using a host, configure your application with the DD_TAGS environment variable.
Configure your application with the DD_TAGS environment variable:
export DD_TAGS="git.commit.sha:<commitSha>,git.repository_url:<git-provider.example/me/my-repo>"
Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables.
If you are using Docker containers, you have three options: embedding git properties in your build artifact, using Docker, or configuring your application with DD_GIT_* environment variables.
If you use Spring Boot, add a build plugin to embed git information in your JAR. The Datadog Java tracer reads the git.properties file that Spring Boot Actuator generates at startup.
Maven
Add the following plugin to your pom.xml:
<plugin>
<groupId>io.github.git-commit-id</groupId>
<artifactId>git-commit-id-maven-plugin</artifactId>
<version>9.0.2</version>
<executions>
<execution>
<id>get-the-git-infos</id>
<goals>
<goal>revision</goal>
</goals>
<phase>initialize</phase>
</execution>
</executions>
<configuration>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
<generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>
<commitIdGenerationMode>full</commitIdGenerationMode>
</configuration>
</plugin>
Gradle
Add the following to your build.gradle.kts:
plugins {
id("org.springframework.boot") version "2.5.7" // required
// ...
id("com.gorylenko.gradle-git-properties") version "2.5.7"
}
.git folder at build time.You can embed git information in your Docker image using either build arguments with environment variables, or image labels.
Add the following lines to your application’s Dockerfile:
ARG DD_GIT_REPOSITORY_URLARG DD_GIT_COMMIT_SHAENV DD_GIT_REPOSITORY_URL=${DD_GIT_REPOSITORY_URL} ENV DD_GIT_COMMIT_SHA=${DD_GIT_COMMIT_SHA}Add the following arguments to your Docker build command:
docker build . \
-t my-application \
--build-arg DD_GIT_REPOSITORY_URL=<git-provider.example/me/my-repo> \
--build-arg DD_GIT_COMMIT_SHA=$(git rev-parse HEAD)
This approach requires Docker, or containerd >= 1.5.6. It doesn’t support containers running on AWS Fargate.
Datadog can extract source code information directly from your images’ Docker labels. During build time, follow the Open Containers standard to add the git commit SHA and repository URL as Docker labels:
docker build . \
-t my-application \
--label org.opencontainers.image.revision=$(git rev-parse HEAD) \
--label org.opencontainers.image.source=$(git config --get remote.origin.url)
DD_GIT_* environment variablesConfigure your application with the DD_GIT_* environment variables:
exportDD_GIT_COMMIT_SHA="<commitSha>"exportDD_GIT_REPOSITORY_URL="<git-provider.example/me/my-repo>"Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables.
If you are using Serverless, you have three options depending on your serverless application’s setup.
If you use Spring Boot, add a build plugin to embed git information in your JAR. The Datadog Java tracer reads the git.properties file that Spring Boot Actuator generates at startup.
Maven
Add the following plugin to your pom.xml:
<plugin>
<groupId>io.github.git-commit-id</groupId>
<artifactId>git-commit-id-maven-plugin</artifactId>
<version>9.0.2</version>
<executions>
<execution>
<id>get-the-git-infos</id>
<goals>
<goal>revision</goal>
</goals>
<phase>initialize</phase>
</execution>
</executions>
<configuration>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
<generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>
<commitIdGenerationMode>full</commitIdGenerationMode>
</configuration>
</plugin>
Gradle
Add the following to your build.gradle.kts:
plugins {
id("org.springframework.boot") version "2.5.7" // required
// ...
id("com.gorylenko.gradle-git-properties") version "2.5.7"
}
.git folder at build time.datadog-ci client version 2.10.0 or later. You must run the CLI tool in the same directory as the code repository.datadog-cdk-constructs version 0.8.5 or later for AWS CDK v1.datadog-cdk-constructs version 1.4.0 or later for AWS CDK v2.DD_GIT_* environment variablesConfigure your application with the DD_GIT_* environment variables:
exportDD_GIT_COMMIT_SHA="<commitSha>"exportDD_GIT_REPOSITORY_URL="<git-provider.example/me/my-repo>"Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables.
If you are using a host, you have two options.
If you use Spring Boot, add a build plugin to embed git information in your JAR. The Datadog Java tracer reads the git.properties file that Spring Boot Actuator generates at startup.
Maven
Add the following plugin to your pom.xml:
<plugin>
<groupId>io.github.git-commit-id</groupId>
<artifactId>git-commit-id-maven-plugin</artifactId>
<version>9.0.2</version>
<executions>
<execution>
<id>get-the-git-infos</id>
<goals>
<goal>revision</goal>
</goals>
<phase>initialize</phase>
</execution>
</executions>
<configuration>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
<generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>
<commitIdGenerationMode>full</commitIdGenerationMode>
</configuration>
</plugin>
Gradle
Add the following to your build.gradle.kts:
plugins {
id("org.springframework.boot") version "2.5.7" // required
// ...
id("com.gorylenko.gradle-git-properties") version "2.5.7"
}
.git folder at build time.DD_GIT_* environment variablesConfigure your application with the DD_GIT_* environment variables:
exportDD_GIT_COMMIT_SHA="<commitSha>"exportDD_GIT_REPOSITORY_URL="<git-provider.example/me/my-repo>"Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables.
If you are using Docker containers, you have two options: using Docker or configuring your application with DD_GIT_* environment variables.
You can embed git information in your Docker image using either build arguments with environment variables, or image labels.
Add the following lines to your application’s Dockerfile:
ARG DD_GIT_REPOSITORY_URLARG DD_GIT_COMMIT_SHAENV DD_GIT_REPOSITORY_URL=${DD_GIT_REPOSITORY_URL} ENV DD_GIT_COMMIT_SHA=${DD_GIT_COMMIT_SHA}Add the following arguments to your Docker build command:
docker build . \
-t my-application \
--build-arg DD_GIT_REPOSITORY_URL=<git-provider.example/me/my-repo> \
--build-arg DD_GIT_COMMIT_SHA=$(git rev-parse HEAD)
This approach requires Docker, or containerd >= 1.5.6. It doesn’t support containers running on AWS Fargate.
Datadog can extract source code information directly from your images’ Docker labels. During build time, follow the Open Containers standard to add the git commit SHA and repository URL as Docker labels:
docker build . \
-t my-application \
--label org.opencontainers.image.revision=$(git rev-parse HEAD) \
--label org.opencontainers.image.source=$(git config --get remote.origin.url)
DD_GIT_* environment variablesConfigure your application with the DD_GIT_* environment variables:
exportDD_GIT_COMMIT_SHA="<commitSha>"exportDD_GIT_REPOSITORY_URL="<git-provider.example/me/my-repo>"Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables.
If you are using a host, configure your application with DD_GIT_* environment variables.
Configure your application with the DD_GIT_* environment variables:
exportDD_GIT_COMMIT_SHA="<commitSha>"exportDD_GIT_REPOSITORY_URL="<git-provider.example/me/my-repo>"Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables.
If your build process is executed in CI within a Docker container, use a named context to make your .git folder available at build time:
Add your .git folder as a named build context:
docker build [...] --build-context dotgit=<path to your local .git folder>
In your Dockerfile, mount the .git folder before running your build:
RUN --mount=from=dotgit,target=<path to where you expect .git to be in your build container> <your build command>If your language is not listed in the Embed Git information section, you can manually tag your telemetry with Git information by setting environment variables in the environment where your application runs.
Set the DD_GIT_COMMIT_SHA and DD_GIT_REPOSITORY_URL environment variables on your application’s deployment:
export DD_GIT_COMMIT_SHA="<commitSha>"
export DD_GIT_REPOSITORY_URL="<git-provider.example/me/my-repo>"
Replace <commitSha> with the commit SHA used to build your application. You can retrieve this by running git rev-parse HEAD at build time, and it needs to be passed into the runtime environment variables. Replace <git-provider.example/me/my-repo> with your repository URL.
These environment variables add git.commit.sha and git.repository_url tags to your APM spans, linking your service to a specific commit in your source code repository.
Additional helpful documentation, links, and articles:
| |