Publish datadog-fips-proxy to the pipeline testing repositories - #54908
Conversation
Gitlab CI Configuration ChangesModified Jobsdeploy_deb_testing-a7_x64 deploy_deb_testing-a7_x64:
before_script:
- ls $OMNIBUS_PACKAGE_DIR
image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$CI_IMAGE_GITLAB_AGENT_DEPLOY_SUFFIX:$CI_IMAGE_GITLAB_AGENT_DEPLOY
needs:
- installer_deb-amd64
- agent_deb-x64-a7
- agent_deb-x64-a7-fips
- agent_heroku_deb-x64-a7
- iot_agent_deb-x64
- dogstatsd_deb-x64
- ddot_deb-x64
+ - job: deploy_fips_proxy_testing-a7_x64
+ optional: true
rules:
- allow_failure: true
if: $DEPLOY_AGENT == "false" && $DDR_WORKFLOW_ID == null && $RUN_E2E_TESTS ==
"off"
when: manual
- if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
when: never
- when: on_success
script:
- echo 'deb [signed-by=/usr/share/keyrings/datadog-archive-keyring.gpg] https://apt.datadoghq.com/
stable 7' > /etc/apt/sources.list.d/datadog.list
- touch /usr/share/keyrings/datadog-archive-keyring.gpg
- chmod a+r /usr/share/keyrings/datadog-archive-keyring.gpg
- curl https://keys.datadoghq.com/DATADOG_APT_KEY_CURRENT.public | gpg --no-default-keyring
--keyring /usr/share/keyrings/datadog-archive-keyring.gpg --import --batch
- apt-get -o Acquire::Retries="5" update
- apt-get -o Acquire::Retries="5" -o "Dir::Cache::archives=$OMNIBUS_PACKAGE_DIR"
install --download-only datadog-signing-keys
- pushd $OMNIBUS_PACKAGE_DIR
- filename=$(ls datadog-signing-keys*.deb); mv $filename datadog-signing-keys_${DD_PIPELINE_ID}.deb
- popd
- ${CI_PROJECT_DIR}/tools/ci/retry.sh aws s3 cp s3://binaries-ddbuild-io-prod/dd-source/domains/seceng/sit/apps/artifact-security/vault-gpg-client/gpg-vault/dev/gpg-vault-v1.6.2-linux-amd64.tar.gz
.
- tar -xzf gpg-vault-v1.6.2-linux-amd64.tar.gz
- mv gpg-vault-linux-amd64 /usr/bin/gpg-vault-bin
- echo '#!/usr/bin/env bash' > /usr/bin/gpg
- echo 'GPG_VAULT_COMPAT_MODE=true GPG_USER_ID="Datadog Packages" GPG_USER_EMAIL="package@datadoghq.com"
/usr/bin/gpg-vault "$@"' >> /usr/bin/gpg
- chmod +x /usr/bin/gpg
- echo '#!/usr/bin/env bash' > /usr/bin/gpg-vault
- echo 'GPG_USER_ID="Datadog Packages" GPG_USER_EMAIL="package@datadoghq.com" /usr/bin/gpg-vault-bin
"$@"' >> /usr/bin/gpg-vault
- chmod +x /usr/bin/gpg-vault
- "for package in $OMNIBUS_PACKAGE_DIR/datadog-*_7*amd64.deb; do\n tools/ci/signing/sign_deb_package.sh\
\ \"$package\" $GPG_TEST_KEY_ID out/\ndone\n"
- deb-s3 upload -c "stable-x86_64" -m 7 -b $DEB_TESTING_S3_BUCKET -a amd64 --sign=$GPG_TEST_KEY_ID
--gpg_options="--batch --digest-algo sha512" --preserve_versions --visibility
public --prefix datadog-agent/pipeline-${DD_PIPELINE_ID} out/datadog-*_7*amd64.deb
- deb-s3 upload -c "stable-x86_64" -m 7 -b $DEB_TESTING_S3_BUCKET -a x86_64 --sign=$GPG_TEST_KEY_ID
--gpg_options="--batch --digest-algo sha512" --preserve_versions --visibility
public --prefix datadog-agent/pipeline-${DD_PIPELINE_ID} out/datadog-*_7*amd64.deb
- deb-s3 upload -c "stable-x86_64" -m 7 -b $DEB_TESTING_S3_BUCKET -a amd64 --sign=$GPG_TEST_KEY_ID
--gpg_options="--batch --digest-algo sha512" --preserve_versions --visibility
public --prefix datadog-agent/pipeline-${DD_PIPELINE_ID} $OMNIBUS_PACKAGE_DIR/datadog-signing-keys_${DD_PIPELINE_ID}.deb
- deb-s3 upload -c "stable-x86_64" -m 7 -b $DEB_TESTING_S3_BUCKET -a x86_64 --sign=$GPG_TEST_KEY_ID
--gpg_options="--batch --digest-algo sha512" --preserve_versions --visibility
public --prefix datadog-agent/pipeline-${DD_PIPELINE_ID} $OMNIBUS_PACKAGE_DIR/datadog-signing-keys_${DD_PIPELINE_ID}.deb
stage: e2e_deploy
tags:
- arch:amd64
- specific:true
variables:
DD_PIPELINE_ID: $CI_PIPELINE_ID-a7deploy_rpm_testing-a7_x64 deploy_rpm_testing-a7_x64:
before_script:
- ls $OMNIBUS_PACKAGE_DIR
image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$CI_IMAGE_GITLAB_AGENT_DEPLOY_SUFFIX:$CI_IMAGE_GITLAB_AGENT_DEPLOY
needs:
- installer_rpm-amd64
- agent_rpm-x64-a7
- agent_rpm-x64-a7-fips
- iot_agent_rpm-x64
- dogstatsd_rpm-x64
- ddot_rpm-x64
+ - job: deploy_fips_proxy_testing-a7_x64
+ optional: true
rules:
- allow_failure: true
if: $DEPLOY_AGENT == "false" && $DDR_WORKFLOW_ID == null && $RUN_E2E_TESTS ==
"off"
when: manual
- if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
when: never
- when: on_success
script:
- ${CI_PROJECT_DIR}/tools/ci/retry.sh aws s3 cp s3://binaries-ddbuild-io-prod/dd-source/domains/seceng/sit/apps/artifact-security/vault-gpg-client/gpg-vault/dev/gpg-vault-v1.6.2-linux-amd64.tar.gz
.
- tar -xzf gpg-vault-v1.6.2-linux-amd64.tar.gz
- mv gpg-vault-linux-amd64 /usr/bin/gpg-vault-bin
- echo '#!/usr/bin/env bash' > /usr/bin/gpg
- echo 'GPG_VAULT_COMPAT_MODE=true GPG_USER_ID="Datadog Packages" GPG_USER_EMAIL="package@datadoghq.com"
/usr/bin/gpg-vault "$@"' >> /usr/bin/gpg
- chmod +x /usr/bin/gpg
- echo '#!/usr/bin/env bash' > /usr/bin/gpg-vault
- echo 'GPG_USER_ID="Datadog Packages" GPG_USER_EMAIL="package@datadoghq.com" /usr/bin/gpg-vault-bin
"$@"' >> /usr/bin/gpg-vault
- chmod +x /usr/bin/gpg-vault
- "for package in $OMNIBUS_PACKAGE_DIR/datadog-*-7.*x86_64.rpm; do\n tools/ci/signing/sign_rpm_package.sh\
\ \"$package\" $GPG_TEST_KEY_ID out/\ndone\n"
- python2 /opt/rpm-s3/bin/rpm-s3 --verbose --visibility public-read -c "https://s3.amazonaws.com"
-b $RPM_TESTING_S3_BUCKET -p "testing/pipeline-$DD_PIPELINE_ID/7/x86_64/" -a "x86_64"
--sign --metadata-signing-key $GPG_TEST_KEY_ID out/datadog-*-7.*x86_64.rpm
stage: e2e_deploy
tags:
- arch:amd64
- specific:true
variables:
DD_PIPELINE_ID: $CI_PIPELINE_ID-a7Added Jobsdeploy_fips_proxy_testing-a7_x64deploy_fips_proxy_testing-a7_x64:
image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$CI_IMAGE_GITLAB_AGENT_DEPLOY_SUFFIX:$CI_IMAGE_GITLAB_AGENT_DEPLOY
needs: []
rules:
- if: $DEPLOY_AGENT == "true" || $DDR_WORKFLOW_ID != null
- if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
when: never
- changes:
compare_to: $COMPARE_TO_BRANCH
paths:
- .gitlab/deploy/e2e_testing_deploy/e2e_deploy.yml
script:
- ${CI_PROJECT_DIR}/tools/ci/retry.sh aws s3 cp s3://binaries-ddbuild-io-prod/dd-source/domains/seceng/sit/apps/artifact-security/vault-gpg-client/gpg-vault/dev/gpg-vault-v1.6.2-linux-amd64.tar.gz
.
- tar -xzf gpg-vault-v1.6.2-linux-amd64.tar.gz
- mv gpg-vault-linux-amd64 /usr/bin/gpg-vault-bin
- echo '#!/usr/bin/env bash' > /usr/bin/gpg
- echo 'GPG_VAULT_COMPAT_MODE=true GPG_USER_ID="Datadog Packages" GPG_USER_EMAIL="package@datadoghq.com"
/usr/bin/gpg-vault "$@"' >> /usr/bin/gpg
- chmod +x /usr/bin/gpg
- echo '#!/usr/bin/env bash' > /usr/bin/gpg-vault
- echo 'GPG_USER_ID="Datadog Packages" GPG_USER_EMAIL="package@datadoghq.com" /usr/bin/gpg-vault-bin
"$@"' >> /usr/bin/gpg-vault
- chmod +x /usr/bin/gpg-vault
- tools/ci/retry.sh curl -fsSLO "https://yum.datadoghq.com/stable/7/x86_64/datadog-fips-proxy-${FIPS_PROXY_VERSION}.x86_64.rpm"
- tools/ci/retry.sh curl -fsSLO "https://apt.datadoghq.com/pool/d/da/datadog-fips-proxy_${FIPS_PROXY_VERSION}_amd64.deb"
- tools/ci/signing/sign_rpm_package.sh "datadog-fips-proxy-${FIPS_PROXY_VERSION}.x86_64.rpm"
$GPG_TEST_KEY_ID out/
- python2 /opt/rpm-s3/bin/rpm-s3 --verbose --visibility public-read -c "https://s3.amazonaws.com"
-b $RPM_TESTING_S3_BUCKET -p "testing/pipeline-$DD_PIPELINE_ID/7/x86_64/" -a "x86_64"
--sign --metadata-signing-key $GPG_TEST_KEY_ID "out/datadog-fips-proxy-${FIPS_PROXY_VERSION}.x86_64.rpm"
- deb-s3 upload -c "stable-x86_64" -m 7 -b $DEB_TESTING_S3_BUCKET -a amd64 --sign=$GPG_TEST_KEY_ID
--gpg_options="--batch --digest-algo sha512" --preserve_versions --visibility
public --prefix datadog-agent/pipeline-${DD_PIPELINE_ID} "datadog-fips-proxy_${FIPS_PROXY_VERSION}_amd64.deb"
- deb-s3 upload -c "stable-x86_64" -m 7 -b $DEB_TESTING_S3_BUCKET -a x86_64 --sign=$GPG_TEST_KEY_ID
--gpg_options="--batch --digest-algo sha512" --preserve_versions --visibility
public --prefix datadog-agent/pipeline-${DD_PIPELINE_ID} "datadog-fips-proxy_${FIPS_PROXY_VERSION}_amd64.deb"
stage: e2e_deploy
tags:
- arch:amd64
- specific:true
variables:
DD_PIPELINE_ID: $CI_PIPELINE_ID-a7
FIPS_PROXY_VERSION: 1.1.29-1Changes Summary
ℹ️ Diff available in the job log. |
Files inventory check summaryFile checks results against ancestor 0dcae6d8: Results for datadog-agent_7.84.0~devel.git.418.d1b64f1.pipeline.132767470-1_amd64.deb:No change detected Results for datadog-iot-agent_7.84.0~devel.git.418.d1b64f1.pipeline.132767470-1_amd64.deb:No change detected |
KevinFairise2
left a comment
There was a problem hiding this comment.
Awesome! That looks to be working fine seeing the pipelines you triggered!
We can merge that one, and then merge the revert on agent-linux-install-script once the fix is backported!
…t#446 Runs test_install_script on this PR's pipeline against the branch that re-applies the testing-variable forwarding, so the FIPS suite installs the datadog-fips-proxy published by this pipeline instead of the stable Agent. Revert before merge.
…ll-script#446" This reverts commit 89fb6f4.
|
/merge |
|
View all feedbacks in Devflow UI.
It will be processed automatically as soon as GitHub reports it as mergeable. View in MergeQueue UI.
The expected merge time in
|
Regression DetectorRegression Detector ResultsMetrics dashboard Baseline: 2924ff4 Optimization Goals: ✅ No significant changes detected
|
| perf | experiment | goal | Δ mean % | Δ mean % CI | trials | links |
|---|---|---|---|---|---|---|
| ➖ | quality_gate_logs | % cpu utilization | +2.08 | [+1.21, +2.95] | 1 | Logs bounds checks dashboard |
| ➖ | dsd_uds_10mb_3k_timestamped_contexts_memory | memory utilization | +0.63 | [+0.42, +0.84] | 1 | Logs |
| ➖ | quality_gate_security_mean_fs_load | memory utilization | +0.18 | [+0.15, +0.22] | 1 | Logs bounds checks dashboard |
| ➖ | quality_gate_security_no_fs_load | memory utilization | +0.18 | [+0.09, +0.27] | 1 | Logs bounds checks dashboard |
| ➖ | quality_gate_idle_all_features | memory utilization | +0.12 | [+0.08, +0.15] | 1 | Logs bounds checks dashboard |
| ➖ | quality_gate_idle | memory utilization | +0.10 | [+0.05, +0.14] | 1 | Logs bounds checks dashboard |
| ➖ | quality_gate_private_action_runner | memory utilization | -0.25 | [-0.37, -0.13] | 1 | Logs bounds checks dashboard |
| ➖ | quality_gate_security_idle | memory utilization | -0.29 | [-0.34, -0.23] | 1 | Logs bounds checks dashboard |
| ➖ | dsd_uds_10mb_3k_timestamped_contexts_cpu | % cpu utilization | -0.37 | [-0.61, -0.12] | 1 | Logs |
| ➖ | quality_gate_metrics_logs | memory utilization | -0.47 | [-0.70, -0.24] | 1 | Logs bounds checks dashboard |
Bounds Checks: ✅ Passed
| perf | experiment | bounds_check_name | replicates_passed | observed_value | links |
|---|---|---|---|---|---|
| ✅ | quality_gate_idle | intake_connections | 10/10 | 4 = 4 | bounds checks dashboard |
| ✅ | quality_gate_idle | memory_usage | 10/10 | 174.89MiB ≤ 178MiB | bounds checks dashboard |
| ✅ | quality_gate_idle | total_bytes_received | 10/10 | 746.17KiB ≤ 819.20KiB | bounds checks dashboard |
| ✅ | quality_gate_idle_all_features | intake_connections | 10/10 | 4 = 4 | bounds checks dashboard |
| ✅ | quality_gate_idle_all_features | memory_usage | 10/10 | 517.09MiB ≤ 538MiB | bounds checks dashboard |
| ✅ | quality_gate_idle_all_features | total_bytes_received | 10/10 | 1.14MiB ≤ 1.25MiB | bounds checks dashboard |
| ✅ | quality_gate_logs | intake_connections | 10/10 | 19 ≤ 40 | bounds checks dashboard |
| ✅ | quality_gate_logs | memory_usage | 10/10 | 214.28MiB ≤ 229MiB | bounds checks dashboard |
| ✅ | quality_gate_logs | missed_bytes | 10/10 | 0B = 0B | bounds checks dashboard |
| ✅ | quality_gate_logs | total_bytes_received | 10/10 | 263.43MiB ≤ 292MiB | bounds checks dashboard |
| ✅ | quality_gate_metrics_logs | cpu_usage | 10/10 | 363.74 ≤ 2000 | bounds checks dashboard |
| ✅ | quality_gate_metrics_logs | intake_connections | 10/10 | 19 ≤ 40 | bounds checks dashboard |
| ✅ | quality_gate_metrics_logs | memory_usage | 10/10 | 403.70MiB ≤ 453MiB | bounds checks dashboard |
| ✅ | quality_gate_metrics_logs | missed_bytes | 10/10 | 0B = 0B | bounds checks dashboard |
| ✅ | quality_gate_metrics_logs | total_bytes_received | 10/10 | 0.94GiB ≤ 1.04GiB | bounds checks dashboard |
| ✅ | quality_gate_private_action_runner | memory_usage | 10/10 | 72.28MiB ≤ 76MiB | bounds checks dashboard |
| ✅ | quality_gate_security_idle | cpu_usage | 10/10 | 29.46 ≤ 100 | bounds checks dashboard |
| ✅ | quality_gate_security_idle | memory_usage | 10/10 | 328.33MiB ≤ 335MiB | bounds checks dashboard |
| ✅ | quality_gate_security_mean_fs_load | cpu_usage | 10/10 | 60.76 ≤ 200 | bounds checks dashboard |
| ✅ | quality_gate_security_mean_fs_load | memory_usage | 10/10 | 306.01MiB ≤ 314MiB | bounds checks dashboard |
| ✅ | quality_gate_security_no_fs_load | cpu_usage | 10/10 | 22.08 ≤ 100 | bounds checks dashboard |
| ✅ | quality_gate_security_no_fs_load | memory_usage | 10/10 | 316.09MiB ≤ 343MiB | bounds checks dashboard |
Explanation
Confidence level: 90.00%
Effect size tolerance: |Δ mean %| ≥ 5.00%
Performance changes are noted in the perf column of each table:
- ✅ = significantly better comparison variant performance
- ❌ = significantly worse comparison variant performance
- ➖ = no significant change in performance
A regression test is an A/B test of target performance in a repeatable rig, where "performance" is measured as "comparison variant minus baseline variant" for an optimization goal (e.g., ingress throughput). Due to intrinsic variability in measuring that goal, we can only estimate its mean value for each experiment; we report uncertainty in that value as a 90.00% confidence interval denoted "Δ mean % CI".
For each experiment, we decide whether a change in performance is a "regression" -- a change worth investigating further -- if all of the following criteria are true:
-
Its estimated |Δ mean %| ≥ 5.00%, indicating the change is big enough to merit a closer look.
-
Its 90.00% confidence interval "Δ mean % CI" does not contain zero, indicating that if our statistical model is accurate, there is at least a 90.00% chance there is a difference in performance between baseline and comparison variants.
-
Its configuration does not mark it "erratic".
CI Pass/Fail Decision
✅ Passed. All Quality Gates passed.
- quality_gate_metrics_logs, bounds check cpu_usage: 10/10 replicas passed. Gate passed.
- quality_gate_metrics_logs, bounds check total_bytes_received: 10/10 replicas passed. Gate passed.
- quality_gate_metrics_logs, bounds check memory_usage: 10/10 replicas passed. Gate passed.
- quality_gate_metrics_logs, bounds check intake_connections: 10/10 replicas passed. Gate passed.
- quality_gate_metrics_logs, bounds check missed_bytes: 10/10 replicas passed. Gate passed.
- quality_gate_idle_all_features, bounds check intake_connections: 10/10 replicas passed. Gate passed.
- quality_gate_idle_all_features, bounds check total_bytes_received: 10/10 replicas passed. Gate passed.
- quality_gate_idle_all_features, bounds check memory_usage: 10/10 replicas passed. Gate passed.
- quality_gate_logs, bounds check memory_usage: 10/10 replicas passed. Gate passed.
- quality_gate_logs, bounds check total_bytes_received: 10/10 replicas passed. Gate passed.
- quality_gate_logs, bounds check missed_bytes: 10/10 replicas passed. Gate passed.
- quality_gate_logs, bounds check intake_connections: 10/10 replicas passed. Gate passed.
- quality_gate_security_idle, bounds check memory_usage: 10/10 replicas passed. Gate passed.
- quality_gate_security_idle, bounds check cpu_usage: 10/10 replicas passed. Gate passed.
- quality_gate_security_mean_fs_load, bounds check cpu_usage: 10/10 replicas passed. Gate passed.
- quality_gate_security_mean_fs_load, bounds check memory_usage: 10/10 replicas passed. Gate passed.
- quality_gate_idle, bounds check total_bytes_received: 10/10 replicas passed. Gate passed.
- quality_gate_idle, bounds check memory_usage: 10/10 replicas passed. Gate passed.
- quality_gate_idle, bounds check intake_connections: 10/10 replicas passed. Gate passed.
- quality_gate_private_action_runner, bounds check memory_usage: 10/10 replicas passed. Gate passed.
- quality_gate_security_no_fs_load, bounds check cpu_usage: 10/10 replicas passed. Gate passed.
- quality_gate_security_no_fs_load, bounds check memory_usage: 10/10 replicas passed. Gate passed.
What does this PR do?
Publishes the released
datadog-fips-proxypackage into the testing repositories of the pipelines whose install-script tests need it, so the install script resolves it from the same repository as the Agent packages built by that pipeline.Motivation
test_install_scripttriggers theagent-linux-install-scriptpipeline withTESTING_APT_URLandTESTING_YUM_URLso the install script installs the Agent built by the pipeline. Those variables land in the apt and yum configuration, so every Datadog package the script installs is resolved against the pipeline repository — includingdatadog-fips-proxy, which is released from another repository and is not published there. Nightly and RC pipelines failed withError: Unable to find a match: datadog-fips-proxy.The mitigation was to stop forwarding those variables for the FIPS test, which leaves it installing the latest stable Agent instead of the pipeline's packages.
Describe how you validated your changes
dda inv linter.full-gitlab-cipasses locally.The pipeline of test commit 89fb6f4 published
datadog-fips-proxy 1:1.1.29-1into both testing repositories alongside the Agent it built. Its yum index still lists the package after the Agent upload rewrote that index, confirmingrpm-s3merges rather than replaces.The job that triggers the install-script pipeline against it, on the branch that restores the testing-variable forwarding, ran the FIPS suite on all five of its platforms and passed. The Debian 11 job installed every package from the pipeline repository:
This is the configuration that previously failed with
Error: Unable to find a match: datadog-fips-proxy.Additional Notes
rpm-s3ever to replace repository metadata rather than merge into it, this order costsdatadog-fips-proxyits index entry and the FIPS test behaves as it does today; the reverse order would drop the Agent packages and break every e2e test that consumes them. A failed download now blocks the two Agent testing uploads rather than only the install-script test. Making the joballow_failure: truewould trade that for a silent index race.