From 0ecf3a6d22ec9ff1c79be80b3cde87a45d21a8b1 Mon Sep 17 00:00:00 2001 From: mirnawong1 Date: Tue, 17 Dec 2024 12:18:03 +0000 Subject: [PATCH 1/2] update schedule jobs language --- website/docs/docs/deploy/about-ci.md | 4 ++-- website/docs/docs/deploy/deploy-jobs.md | 15 +++++++++++---- website/docs/docs/deploy/deployment-overview.md | 2 +- website/docs/docs/deploy/jobs.md | 13 +++++++------ .../img/docs/deploy/deploy-job-completion.jpg | Bin 0 -> 61399 bytes 5 files changed, 21 insertions(+), 13 deletions(-) create mode 100644 website/static/img/docs/deploy/deploy-job-completion.jpg diff --git a/website/docs/docs/deploy/about-ci.md b/website/docs/docs/deploy/about-ci.md index 1de9365219c..e27d2e7d08e 100644 --- a/website/docs/docs/deploy/about-ci.md +++ b/website/docs/docs/deploy/about-ci.md @@ -19,9 +19,9 @@ Refer to the guide [Get started with continuous integration tests](/guides/set-u icon="dbt-bit"/> -
\ No newline at end of file +
diff --git a/website/docs/docs/deploy/deploy-jobs.md b/website/docs/docs/deploy/deploy-jobs.md index 96ec8a1932e..9a0cc3cfcfa 100644 --- a/website/docs/docs/deploy/deploy-jobs.md +++ b/website/docs/docs/deploy/deploy-jobs.md @@ -13,7 +13,7 @@ You can use deploy jobs to build production data assets. Deploy jobs make it eas - Job run details, including run timing, [model timing data](/docs/deploy/run-visibility#model-timing), and [artifacts](/docs/deploy/artifacts) - Detailed run steps with logs and their run step statuses -You can create a deploy job and configure it to run on [scheduled days and times](#schedule-days) or enter a [custom cron schedule](#cron-schedule). +You can create a deploy job and configure it to run on [scheduled days and times](#schedule-days), enter a [custom cron schedule](#cron-schedule), or [trigger the job after another job completes](#trigger-on-job-completion). ## Prerequisites @@ -115,11 +115,18 @@ Examples of cron job schedules: ### Trigger on job completion -To _chain_ deploy jobs together, enable the **Run when another job finishes** option and specify the upstream (parent) job that, when it completes, will trigger your job. You can also use the [Create Job API](/dbt-cloud/api-v2#/operations/Create%20Job) to do this. +To _chain_ deploy jobs together: +1. In the **Triggers** section, enable the **Run when another job finishes** option. +2. Select the project that has the deploy job you want to run after completion. +3. Specify the upstream (parent) job that, when completed, will trigger your job. + - You can also use the [Create Job API](/dbt-cloud/api-v2#/operations/Create%20Job) to do this. +4. In the **Completes on** option, select the job run status(es) that will [enqueue](/docs/deploy/job-scheduler#scheduler-queue) the deploy job. -You can set up a configuration where an upstream job triggers multiple downstream (child) jobs and jobs in other projects. You must have proper [permissions](/docs/cloud/manage-access/enterprise-permissions#project-role-permissions) to the project and job to configure the trigger. + -For jobs that are triggered to run by another job, a link to the upstream job run is available from your [job's run details](/docs/deploy/run-visibility#job-run-details). +5. You can set up a configuration where an upstream job triggers multiple downstream (child) jobs and jobs in other projects. You must have proper [permissions](/docs/cloud/manage-access/enterprise-permissions#project-role-permissions) to the project and job to configure the trigger. + +If another job triggers your job to run, you can find a link to the upstream job in the [run details section](/docs/deploy/run-visibility#job-run-details). ## Related docs diff --git a/website/docs/docs/deploy/deployment-overview.md b/website/docs/docs/deploy/deployment-overview.md index 9382634812f..e9c25f68c08 100644 --- a/website/docs/docs/deploy/deployment-overview.md +++ b/website/docs/docs/deploy/deployment-overview.md @@ -33,7 +33,7 @@ Learn how to use dbt Cloud's features to help your team ship timely and quality diff --git a/website/docs/docs/deploy/jobs.md b/website/docs/docs/deploy/jobs.md index 08d6cc585ef..1826836d602 100644 --- a/website/docs/docs/deploy/jobs.md +++ b/website/docs/docs/deploy/jobs.md @@ -4,21 +4,22 @@ sidebar_label: "About Jobs" description: "Learn about the different job types in dbt Cloud and what their differences are." tags: [scheduler] pagination_next: "docs/deploy/deploy-jobs" +hide_table_of_contents: true --- These are the available job types in dbt Cloud: -- [Deploy jobs](/docs/deploy/deploy-jobs) — To create and set up triggers for building production data assets -- [Continuous integration (CI) jobs](/docs/deploy/continuous-integration) — To create and set up triggers for checking code changes -- [Merge jobs](/docs/deploy/merge-jobs) — To create and set up triggers for merged pull requests +- [Deploy jobs](/docs/deploy/deploy-jobs) — Build production data assets. Runs on a schedule, by API, or after another job completes. +- [Continuous integration (CI) jobs](/docs/deploy/continuous-integration) — Test and validate code changes before merging. Triggered by commit to a PR or by API. +- [Merge jobs](/docs/deploy/merge-jobs) — Deploy merged changes into production. Runs after a successful PR merge or by API. -Below is a comparison table that describes the behaviors of the different job types: +The following comparison table describes the behaviors of the different job types: | | **Deploy jobs** | **CI jobs** | **Merge jobs** | | --- | --- | --- | --- | | Purpose | Builds production data assets. | Builds and tests new code before merging changes into production. | Build merged changes into production or update state for deferral. | -| Trigger types | Triggered by a schedule or by API. | Triggered by a commit to a PR or by API. | Triggered by a successful merge into the environment's branch or by API.| +| Trigger types | Triggered by a schedule, API, or the successful completion of another job. | Triggered by a commit to a PR or by API. | Triggered by a successful merge into the environment's branch or by API.| | Destination | Builds into a production database and schema. | Builds into a staging database and ephemeral schema, lived for the lifetime of the PR. | Builds into a production database and schema. | | Execution mode | Runs execute sequentially, so as to not have collisions on the underlying DAG. | Runs execute in parallel to promote team velocity. | Runs execute sequentially, so as to not have collisions on the underlying DAG. | | Efficiency run savings | Detects over-scheduled jobs and cancels unnecessary runs to avoid queue clog. | Cancels existing runs when a newer commit is pushed to avoid redundant work. | N/A | | State comparison | Only sometimes needs to detect state. | Almost always needs to compare state against the production environment to build on modified code and its dependents. | Almost always needs to compare state against the production environment to build on modified code and its dependents. | -| Job run duration | Limit is 24 hours. | Limit is 24 hours. | Limit is 24 hours. | \ No newline at end of file +| Job run duration | Limit is 24 hours. | Limit is 24 hours. | Limit is 24 hours. | diff --git a/website/static/img/docs/deploy/deploy-job-completion.jpg b/website/static/img/docs/deploy/deploy-job-completion.jpg new file mode 100644 index 0000000000000000000000000000000000000000..67b76950df352f1deb74e8bd07a5c365f0e78a06 GIT binary patch literal 61399 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 J&@T4D{{ji|gl7N% literal 0 HcmV?d00001 From 593fecae0362b205ca56b7c115060287b61e91ef Mon Sep 17 00:00:00 2001 From: Matt Shaver <60105315+matthewshaver@users.noreply.github.com> Date: Tue, 17 Dec 2024 18:32:40 -0500 Subject: [PATCH 2/2] Private packages beta (#6675) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What are you changing in this pull request and why? Beta docs for Private packages ## Checklist - [ ] I have reviewed the [Content style guide](https://github.com/dbt-labs/docs.getdbt.com/blob/current/contributing/content-style-guide.md) so my content adheres to these guidelines. - [ ] The topic I'm writing about is for specific dbt version(s) and I have versioned it according to the [version a whole page](https://github.com/dbt-labs/docs.getdbt.com/blob/current/contributing/single-sourcing-content.md#adding-a-new-version) and/or [version a block of content](https://github.com/dbt-labs/docs.getdbt.com/blob/current/contributing/single-sourcing-content.md#versioning-blocks-of-content) guidelines. - [ ] I have added checklist item(s) to this list for anything anything that needs to happen before this PR is merged, such as "needs technical review" or "change base branch." - [ ] The content in this PR requires a dbt release note, so I added one to the [release notes page](https://docs.getdbt.com/docs/dbt-versions/dbt-cloud-release-notes). --- 🚀 Deployment available! Here are the direct links to the updated files: - https://docs-getdbt-com-git-private-packages-dbt-labs.vercel.app/docs/build/packages --------- Co-authored-by: Mirna Wong <89008547+mirnawong1@users.noreply.github.com> Co-authored-by: Leona B. Campbell <3880403+runleonarun@users.noreply.github.com> --- website/docs/docs/build/packages.md | 63 +++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 4 deletions(-) diff --git a/website/docs/docs/build/packages.md b/website/docs/docs/build/packages.md index 9ba4ceeaff5..82ba2c3d74c 100644 --- a/website/docs/docs/build/packages.md +++ b/website/docs/docs/build/packages.md @@ -157,9 +157,57 @@ packages: Where `name: 'dbt_utils'` specifies the subfolder of `dbt_packages` that's created for the package source code to be installed within. -### Private packages +## Private packages -#### SSH Key Method (Command Line only) +### Native private packages + +dbt Cloud supports private packages from [supported](#prerequisites) Git repos leveraging an exisiting [configuration](/docs/cloud/git/git-configuration-in-dbt-cloud) in your environment. Previously, you had to configure a [token](#git-token-method) to retrieve packages from your private repos. + +#### Prerequisites + +To use native private packages, you must have one of the following Git providers configured in the **Integrations** section of your **Account settings**: +- [GitHub](/docs/cloud/git/connect-github) +- [Azure DevOps](/docs/cloud/git/connect-azure-devops) +- Support for GitLab is coming soon. + + +#### Configuration + +Use the `private` key in your `packages.yml` or `dependencies.yml` to clone package repos using your existing dbt Cloud Git integration without having to provision an access token or create a dbt Cloud environment variable: + + + +```yaml +packages: + - private: dbt-labs/awesome_repo + - package: normal packages + + [...] +``` + + + +You can pin private packages similar to regular dbt packages: + +```yaml +packages: + - private: dbt-labs/awesome_repo + revision: "0.9.5" # Pin to a tag, branch, or complete 40-character commit hash + +``` + +If you are using multiple Git integrations, disambiguate by adding the provider key: + +```yaml +packages: + - private: dbt-labs/awesome_repo + provider: "github" # GitHub and Azure are currently supported. GitLab is coming soon. + +``` + +With this method, you can retrieve private packages from an integrated Git provider without any additional steps to connect. + +### SSH key method (command line only) If you're using the Command Line, private packages can be cloned via SSH and an SSH key. When you use SSH keys to authenticate to your git remote server, you don’t need to supply your username and password each time. Read more about SSH keys, how to generate them, and how to add them to your git provider here: [Github](https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh) and [GitLab](https://docs.gitlab.com/ee/user/ssh.html). @@ -177,7 +225,14 @@ packages: If you're using dbt Cloud, the SSH key method will not work, but you can use the [HTTPS Git Token Method](https://docs.getdbt.com/docs/build/packages#git-token-method). -#### Git token method +### Git token method + +:::note + +dbt Cloud has [native support](#native-private-packages) for Git hosted private packages with GitHub and Azure DevOps (GitLab coming soon). If you are using a supported [integrated Git environment](/docs/cloud/git/git-configuration-in-dbt-cloud), you no longer need to configure Git tokens to retrieve private packages. + +::: + This method allows the user to clone via HTTPS by passing in a git token via an environment variable. Be careful of the expiration date of any token you use, as an expired token could cause a scheduled run to fail. Additionally, user tokens can create a challenge if the user ever loses access to a specific repo. @@ -246,7 +301,7 @@ Read more about creating a Personal Access Token [here](https://confluence.atlas -#### Configure subdirectory for packaged projects +## Configure subdirectory for packaged projects In general, dbt expects `dbt_project.yml` to be located as a top-level file in a package. If the packaged project is instead nested in a subdirectory—perhaps within a much larger mono repo—you can optionally specify the folder path as `subdirectory`. dbt will attempt a [sparse checkout](https://git-scm.com/docs/git-sparse-checkout) of just the files located within that subdirectory. Note that you must be using a recent version of `git` (`>=2.26.0`).