From 3cdd288f9f9413e738ee20564b0e8f3ee1379402 Mon Sep 17 00:00:00 2001 From: Juri Date: Mon, 19 Aug 2024 16:45:23 +0200 Subject: [PATCH] docs(nx-cloud): improve nx agents feature page --- .../features/distribute-task-execution.md | 120 +++++++++++------- .../shared/features/nx-agents-live-chart.avif | Bin 0 -> 37430 bytes 2 files changed, 75 insertions(+), 45 deletions(-) create mode 100644 docs/shared/features/nx-agents-live-chart.avif diff --git a/docs/shared/features/distribute-task-execution.md b/docs/shared/features/distribute-task-execution.md index 9ea4abb4731794..d7a894e6cd5dc3 100644 --- a/docs/shared/features/distribute-task-execution.md +++ b/docs/shared/features/distribute-task-execution.md @@ -3,54 +3,95 @@ {% youtube src="https://youtu.be/XS-exYYP_Gg" title="Nx Agents Walkthrough" - /%} +/%} -**Nx Agents** let you distribute your CI across many machines with minimal configuration. It also comes with the following features: +Applying [Nx Affected](/ci/features/affected) and [remote caching](/ci/features/remote-cache) can significantly speed up your CI pipeline, but you might still hit limits. As your monorepo grows, the most effective way to maintain low CI times is by combining them with a **smart strategy for parallelizing work across multiple machines**. Manually setting up such distribution can be challenging, though, often resulting in suboptimal performance or requiring high maintenance over time. -- [Dynamically allocate the number and size of agents](/ci/features/dynamic-agents) based on the size of the PR -- [Re-run flaky tasks](/ci/features/flaky-tasks) automatically whenever they fail in CI -- Automatically [split large e2e tasks](/ci/features/split-e2e-tasks) into smaller tasks that can be distributed more efficiently +![Nx Cloud visualization of how tasks are being distributed with Nx Agents](/shared/features/nx-agents-live-chart.avif) -## Making a Distributed CI Pipeline Is Hard +Nx Agents offers several key advantages: -The only way to speed up your CI pipeline while still running all the necessary tasks is to distribute those tasks across multiple machines. Unfortunately, doing distribution right is hard to set up and hard to maintain. These are just some concerns you have to account for: +- **Declarative Configuration:** No maintenance is required as your monorepo evolves, thanks to a declarative setup. +- **Efficient Task Replay:** By leveraging [remote caching](/ci/features/remote-cache), tasks can be replayed efficiently across machines, enhancing distribution speed. +- **Intelligent Task Distribution:** Tasks are distributed based on historical run times and dependencies, ensuring correct and optimal execution. +- **Dynamic Resource Allocation:** Agents are [allocated dynamically based on the size of the PR](/ci/features/dynamic-agents), balancing cost and speed. +- **Seamless CI Integration:** Easily adopt Nx Agents with your [existing CI provider](/ci/recipes/set-up), requiring minimal setup changes. +- **Simple Activation:** Enable distribution with just a [single line of code](#enable-nx-agents) in your CI configuration. -- Choose how many machines to set up -- Set up each machine so that it is ready to execute tasks -- Ensure that tasks are run in the correct order -- Copy the output of certain tasks to the machines where those outputs are needed -- Shut down machines when there are no more tasks to run -- Shut down all the machines when the whole pipeline hits an error -- Make sure sensitive information is being handled securely on all machines +## Enable Nx Agents -And each of these concerns will need to be reconsidered whenever the codebase changes. It would actually be best if they were reconsidered for every PR, because small PRs may not need as much distribution as large PRs. +To enable task distribution with Nx Agents, make sure your Nx workspace is connected to Nx Cloud. If you haven't connected your workspace to Nx Cloud yet, run the following command: -## Nx Agents Make Distributing Tasks Simple +```shell +npx nx connect +``` -Nx Agents take care of all these concerns with a small initial configuration that does not need to be modified as your codebase changes. Your CI pipeline sends your tasks to be run on agent machines that Nx Cloud creates for you. All you need to do is specify how many agents and the type of agent. Then, when the pipeline is finished, your initial CI pipeline will contain all the logs and artifacts as if the tasks all ran on your main CI machine - but completed in a fraction of the time. +Also, check [connect to Nx Cloud recipe](/ci/intro/connect-to-nx-cloud) for all the details. -![Distribute Task Execution with Nx Agents](/shared/images/dte/nx-agents-orchestration-diagram.svg) +Then, adjust your CI pipeline configuration to **enable task distribution**. If you don't have a CI config yet, you can generate a new one using the following command: -For a more thorough explanation of how Nx Agents optimizes your CI pipeline, read this [guide to parallelization and distribution in CI](/ci/concepts/parallelization-distribution). +```shell +npx nx g ci-workflow +``` -## Enable Nx Agents +The key line in your CI config is the `start-ci-run` command: -To enable task distribution with Nx Agents, there are two requirements: +```yaml {% fileName=".github/workflows/ci.yml" highlightLines=[13] %} +name: CI +... -1. Enable version control system integration. The integrations currently available are [GitHub](/ci/recipes/source-control-integration/github), [GitLab](/ci/recipes/source-control-integration/gitlab), [Bitbucket](/ci/recipes/source-control-integration/bitbucket) and [Azure DevOps](/ci/recipes/source-control-integration/azure-devops). These integrations can be enabled from your [Nx Cloud dashboard](https://nx.app). -2. Add a single line to your CI pipeline configuration. +jobs: + main: + runs-on: ubuntu-latest + steps: + ... + - uses: actions/checkout@v4 + with: + fetch-depth: 0 -Add the `start-ci-run` command to your CI pipeline configuration after checking out the repository and before installing `node_modules`: + - run: pnpm dlx nx-cloud start-ci-run --distribute-on="3 linux-medium-js" --stop-agents-after="build" -```yaml {% fileName=".github/workflows/main.yaml" %} -# After checkout repository -- name: Start CI run - run: 'npx nx-cloud start-ci-run --distribute-on="8 linux-medium-js"' -# Before install node_modules -# Run any nx commands as if running on a single machine + # Cache node_modules + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + ... + + # Nx Affected runs only tasks affected by the changes in this PR/commit. Learn more: https://nx.dev/ci/features/affected + - run: pnpm exec nx affected -t lint test build ``` -The `--distribute-on` flag instructs Nx Cloud to distribute tasks across 8 agents of type `linux-medium-js`. `linux-medium-js` is the name of the launch template that will be used to provision the agent. Use on of the [default launch templates](https://github.com/nrwl/nx-cloud-workflows/blob/main/launch-templates/linux.yaml) or create your own [custom launch template](/ci/reference/launch-templates). +This command tells Nx Cloud to: + +- start a CI run `start-ci-run` +- take all Nx commands that are being issued (e.g., `pnpm exec nx affected -t lint test build`) and +- distribute them across 3 agents (`3 linux-medium-js`) where `linux-medium-js` is a predefined agent [launch template](/ci/reference/launch-templates). + +### Configure Nx Agents on your CI Provider + +Every organization manages their CI/CD pipelines differently, so the guides don't cover org-specific aspects of CI/CD (e.g., deployment). They mainly focus on configuring Nx correctly using Nx Agents and [Nx Replay](/ci/features/remote-cache). + +- [Azure Pipelines](/ci/recipes/set-up/monorepo-ci-azure) +- [Circle CI](/ci/recipes/set-up/monorepo-ci-circle-ci) +- [GitHub Actions](/ci/recipes/set-up/monorepo-ci-github-actions) +- [Jenkins](/ci/recipes/set-up/monorepo-ci-jenkins) +- [GitLab](/ci/recipes/set-up/monorepo-ci-gitlab) +- [Bitbucket Pipelines](/ci/recipes/set-up/monorepo-ci-bitbucket-pipelines) + +## How Nx Agents Work + +![Distribute Task Execution with Nx Agents](/shared/images/dte/nx-agents-orchestration-diagram.svg) + +**Nx Agents is declarative** in that you only specify the number of agents and the type of agent you want to use. Nx Cloud then automatically picks up the Nx commands that are being issued on your CI and distributes them automatically. This results in **low maintenance and a much more efficient distribution**. A non-declarative approach would be one where you define which tasks or projects get executed on which machine, requiring you to adjust the configuration as your codebase changes. + +**Nx Agents uses a task-centric approach** to distribution. Instead of defining which tasks run on which machine upfront, Nx Agents dynamically processes tasks based on availability and task dependencies/ordering. Imagine a stack of tasks that agents pick up based on their required processing time (from historical data) and task dependency/ordering (from the Nx graph). Not only is this more resource efficient, but it is also more resilient to failures since any other agent can pick up work if one agent fails during bootup. This method contrasts with traditional VM-centric approaches, where tasks must be predefined for specific machines, often leading to inefficiencies as your codebase grows. Read more [on our blog post](/blog/reliable-ci-a-new-execution-model-fixing-both-flakiness-and-slowness). + +**Nx Agents is cost and resource-efficient** as it automatically distributes tasks **optimizing for speed while also ensuring resource utilization is high** and idle time is low. You can also [dynamically adjust the number of agents](/ci/features/dynamic-agents) based on the size of the PR, and we're working on [some more AI-powered features](/ci/concepts/nx-cloud-ai) to optimize this even further. In addition, [remote caching](/ci/features/remote-cache) guarantees tasks are not run twice, and artifacts are shared efficiently among agents. + +**Nx Agents is non-invasive** in that you don't need to completely overhaul your existing CI configuration or your Nx workspace to use it. You can start using it with your existing CI provider by adding the `nx-cloud start-ci-run...` command mentioned previously. In addition, all artifacts and logs are played back to the main job so you can keep processing them as if they were run on the main job. Hence, your existing post-processing steps should still keep working as before. + +For a more thorough explanation of how Nx Agents optimize your CI pipeline, read this [guide to parallelization and distribution in CI](/ci/concepts/parallelization-distribution). ## Nx Agents Features @@ -66,21 +107,10 @@ The `--distribute-on` flag instructs Nx Cloud to distribute tasks across 8 agent {% /cards %} -## CI/CD Guides - -Every organization manages their CI/CD pipelines differently, so the guides don't cover org-specific aspects of -CI/CD (e.g., deployment). They mainly focus on configuring Nx correctly using Nx Agents and [Nx Replay](/ci/features/remote-cache). - -- [Azure Pipelines](/ci/recipes/set-up/monorepo-ci-azure) -- [Circle CI](/ci/recipes/set-up/monorepo-ci-circle-ci) -- [GitHub Actions](/ci/recipes/set-up/monorepo-ci-github-actions) -- [Jenkins](/ci/recipes/set-up/monorepo-ci-jenkins) -- [GitLab](/ci/recipes/set-up/monorepo-ci-gitlab) -- [Bitbucket Pipelines](/ci/recipes/set-up/monorepo-ci-bitbucket-pipelines) - -Note that only cacheable operations can be distributed because they have to be replayed on the main job. - ## Relevant Repositories and Examples +By integrating Nx Agents into your CI pipeline, you can significantly reduce build times, optimize resource use, and maintain a scalable, efficient development workflow. + +- [Reliable CI: A New Execution Model Fixing Both Flakiness and Slowness](https://nx.dev/blog/reliable-ci-a-new-execution-model-fixing-both-flakiness-and-slowness) - [Nx: On how to make your CI 16 times faster with a small config change](https://github.com/vsavkin/interstellar) - ["Lerna & Distributed Task Execution" Example](https://github.com/vsavkin/lerna-dte) diff --git a/docs/shared/features/nx-agents-live-chart.avif b/docs/shared/features/nx-agents-live-chart.avif new file mode 100644 index 0000000000000000000000000000000000000000..29a1835cdf06ea3bd5b598e9e25fa4142dad3f99 GIT binary patch literal 37430 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 literal 0 HcmV?d00001