このページは日本語には対応しておりません。随時翻訳に取り組んでいます。翻訳に関してご質問やご意見ございましたら、お気軽にご連絡ください。

Test Optimization is not available in the selected site () at this time.

Join the Preview!

Test optimization for Go is in Preview.

Compatibility

Supported test frameworks:

  • testing package

Configuring reporting method

To report test results to Datadog, you need to configure the Datadog Go library:

GitHub Actions や CircleCI など、基盤となるワーカーノードにアクセスできないクラウド CI プロバイダーを使用している場合は、Agentless モードを使用するようにライブラリを構成します。そのためには、以下の環境変数を設定します。

DD_CIVISIBILITY_AGENTLESS_ENABLED=true (必須)
Agentless モードを有効または無効にします。
デフォルト: false
DD_API_KEY (必須)
テスト結果のアップロードに使用される Datadog API キー
デフォルト: (empty)

さらに、データを送信する Datadog サイトを構成します。

DD_SITE (必須)
結果をアップロードする Datadog サイト
デフォルト: datadoghq.com

Jenkins や自己管理型の GitLab CI など、オンプレミスの CI プロバイダーでテストを実行している場合は、Agent のインストール手順に従って、各ワーカーノードに Datadog Agent をインストールします。 これは、テスト結果をログおよび基盤となるホストのメトリクスに自動的にリンクできるため、推奨されるオプションです。

Kubernetes エグゼキュータを使用している場合は、Datadog が Datadog Operator の使用を推奨しています。 この Operator には Datadog Admission Controller が含まれており、自動的にビルドポッドにトレーサーライブラリを注入 することができます。 注: Datadog Operator を使用する場合、Admission Controller がトレーサーライブラリのダウンロードと注入を行うため、以下のステップを省略することができます。 ただし、Test Visibility を有効にするために必要な環境変数またはコマンドラインパラメーターをポッドで設定する必要があります。

Kubernetes を使用していない、または Datadog Admission Controller を使用できない場合で、CI プロバイダーがコンテナベースのエクゼキュータを使用している場合、トレーサーを実行するビルドコンテナの DD_TRACE_AGENT_URL 環境変数 (デフォルトは http://localhost:8126) を、そのコンテナ内からアクセス可能なエンドポイントに設定します。注: ビルドコンテナ内で localhost を使用すると、コンテナ自体を参照し、基盤となるワーカーノードや Container Agent が動作しているコンテナを参照しません。

DD_TRACE_AGENT_URL は、プロトコルとポート (例えば、http://localhost:8126) を含み、DD_AGENT_HOSTDD_TRACE_AGENT_PORT よりも優先され、CI Visibility のために Datadog Agent の URL を構成するために推奨される構成パラメーターです。

それでも Datadog Agent への接続に問題がある場合は、Agentless Mode を使用してください。 : この方法を使用する場合、テストはログインフラストラクチャーメトリクスと相関しません。

Installing Orchestrion

Orchestrion is a tool to process Go source code at compilation time and automatically insert instrumentation using dd-trace-go.

Install orchestrion from https://github.com/datadog/orchestrion using the command:

$ go install github.com/DataDog/orchestrion@latest
  • Optional: project go.mod registration

    You can automatically add orchestrion to your project’s dependencies by running:

    $ orchestrion pin
    

    This command has the following effects:

    1. Create a new orchestrion.tool.go file containing content similar to:
      // Code generated by `orchestrion pin`; DO NOT EDIT.
      
      // This file is generated by `orchestrion pin`, and is used to include a blank import of the
      // orchestrion package(s) so that `go mod tidy` does not remove the requirements rom go.mod.
      // This file should be checked into source control.
      
      //go:build tools
      
      package tools
      
      import _ "github.com/DataDog/orchestrion"
      
    2. Run go get github.com/DataDog/orchstrion@<current-release> to make sure the project version corresponds to the one currently being used
    3. Run go mod tidy to make sure your go.mod and go.sum files are up-to-date

    If you do not run this command, it is done automatically when required. Once done, the version of orchestrion used by this project can be controlled directly using the go.mod file, as you would control any other dependency.

Orchestrion supports the two latest releases of Go, matching Go’s official release policy. It may function correctly with older Go releases, but Datadog cannot support older releases that do not work.

In addition to this, Orchestrion only supports projects using Go modules.

Instrumenting tests

Set the following environment variables to configure the library:

DD_CIVISIBILITY_ENABLED=true (Required)
Enables the Test Optimization product.
DD_ENV (Required)
Environment where the tests are being run (for example: local when running tests on a developer workstation or ci when running them on a CI provider).

Prefix your go test command with orchestrion:

$ orchestrion go test -race ./...

If you have not run orchestrion pin, you may see a message similar to the following appear, as orchestrion pin is automatically executed:

  ╭──────────────────────────────────────────────────────────────────────────────╮
                                                                                
    Warning: github.com/DataDog/orchestrion is not present in your go.mod       
    file.                                                                       
    In order to ensure build reliability and reproductibility, orchestrion      
    will now add itself in your go.mod file by:                                 
                                                                                
        1. creating a new file named orchestrion.tool.go                        
        2. running go get github.com/DataDog/orchestrion@v0.9.4                 
        3. running go mod tidy                                                  
                                                                                
    You should commit the resulting changes into your source control system.    
                                                                                
  ╰──────────────────────────────────────────────────────────────────────────────╯

Alternative

Orchestrion at the core is a standard Go toolchain -toolexec proxy. Instead of using orchestrion go, you can also manually provide the -toolexec argument to go commands that accept it:

$ go build -toolexec 'orchestrion toolexec' .
$ go test -toolexec 'orchestrion toolexec' -race .

Further reading