Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Product settings #1031

Open
wants to merge 23 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 21 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions _data/nav.yml
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,23 @@
- title: Pipeline definitions YAML
url: "/what-is-the-codefresh-yaml"

- title: Products
url: "/products"
pages:
- title: About Products
url: "/about-products"
- title: Create Products
url: "/create-product"
- title: Configure Product Settings
url: "/configure-product-settings"
- title: Assign applications
url: "/assign-applications"
- title: Configuring app version and promoted properties
url: "/promotion-version-properties"
- title: Configuring promotion flows
url: "/promotion-flow-triggers"



- title: Testing
url: "/testing"
Expand Down
322 changes: 311 additions & 11 deletions _docs/dashboards/gitops-products.md

Large diffs are not rendered by default.

95 changes: 95 additions & 0 deletions _docs/products/about-products.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
---
title: "About Products"
description: "Create Products to group and deploy applications"
group: products
toc: true
---



>**NOTE**
This feature is currently in Beta.

Explore the power of Products for Argo CD applications and deployments in Codefresh GitOps.

Managing complex applications across multiple environments is a common challenge faced by developers and platform engineers. The diverse nature of applications and the variety of environments they deploy to can lead to fragmented management and deployment processes.

In Codefresh GitOps, Products serve as a strategic layer that bridges this gap. Products group different yet interconnected applications based on their similarities and dependencies.
By grouping applications, Products enhance Environments, allowing complete visibility for efficient deployment across Environments.

{% include
image.html
lightbox="true"
file="/images/gitops-products/expanded-view.png"
url="/images/gitops-products/expanded-view.png"
alt="GitOps Products dashboard (expanded view)"
caption="GitOps Products dashboard (expanded view)"
max-width="70%"
%}

Read more on the world's first dashboard for GitOps Environments and Products in this [blog](https://codefresh.io/blog/introducing-the-worlds-first-dashboard-for-gitops-environments/){:target="\_blank"}.


##### What is a Product in Codefresh GitOps?
In Codefresh GitOps, a Product is a custom entity that allows you to group interconnected Argo CD applications, providing a cohesive view as the applications progress through the development and deployment lifecyle.

Consider a practical scenario of numerous applications connected to billing or payment. Instead of monitoring each application separately, creating a Product enables you to track and manage them collectively.

The diagram illustrates how Argo CD applications connected to a Product are grouped by that Product and organized by Environments. It also shows applications not assigned to any Product.

{% include
image.html
lightbox="true"
file="/images/gitops-products/apps-grouped-by-product.png"
url="/images/gitops-products/apps-grouped-by-product.png"
alt="Argo CD applications grouped by Products and organized by Environments"
caption="Argo CD applications grouped by Products and organized by Environments"
max-width="70%"
%}

##### Benefits of Products
* **Unified application management**
Managing complex Argo CD applications across multiple Environments can be challenging.
By grouping similar Argo CD applications into a unit, Products allow you to also efficiently manage them cohesively.

* **Bridging applications and environments**
Products act as a bridge between applications and their respective environments. By linking applications to Products, you can easily track their deployment across different environments, providing clarity and control over your deployment pipelines.

* **Deployment visibility**
Deploying a product generates a release that provides a comprehensive view of the entire deployment process. This includes visualization of Promotion Workflows across all environments, and detailed insights into issue tracking, Git activity, and other actions that led to the deployment, giving developers and stakeholders a clear understanding of the process.

* **Effortless creation**
As with Environments, creating a Product is equally straightforward. You can create Products from the UI, or declaratively through annotations in your application manifests.

* **Real-time insights with integrated views**
The Products dashboard offers three distinct views - Pods, Git, and Features. These views provide real-time insights into the changes in the application repo, deployment details, code changes, and feature tracking. Whether you're a developer tracking the latest commits or a project manager monitoring feature releases, these integrated views offer valuable insights tailored to your role.




##### How do you view applications by Product?
In two simple steps:

1. [Create the Product](#create-products)
Begin by creating a Product, and assigning a meaningful name based on your use case. You can do this in the UI, or through annotations in app manifests.

1. [Connect applications to the Product](#assigning-applications-to-products)
Bring your applications into the picture. Link applications to the Products you've created to create the associations you need.

Codefresh seamlessly identifies and organizes the applications in the correct [Environments]({{site.baseurl}}/docs/dashboards/gitops-environments/).


##### How do you deploy a Product?

By configuring the promotion flows and settings for the product and its applications:

Configure Promotion Flows
Define the steps and criteria for promoting applications in the product through different stages of deployment. Select and customize the conditions to trigger specific flows, automating and controlling when and how applications are promoted.

Promotion Settings
and specifying the precise attributes to be promoted within applications. This ensures that the right versions and components are consistently advanced through your deployment stages.

By utilizing these configuration options, you can optimize your CI/CD processes and maintain a


Read more about how to [work with Products](#working-with-products), and with [applications in Products](#working-with-applications-in-products).
170 changes: 170 additions & 0 deletions _docs/products/assign-applications.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
---
title: "Assigning applications to Products"
description: "Manually or declaratively connect applications to Products"
group: products
toc: true
---

After creating products, the next step is to assign applications to it.
Assigning applications to products groups these applications into a single cohesive entity, enabling efficient maintenance and easier deployments.

There are two methods of assigning applications to a Product:

* Manual assignment
A one-click action for quick assignment within Product Settings.
Unlike other UI actions, manual assignment does not require a commit action. Applications assigned to a product are not stored in the product's resource definition.
Recommended for testing purposes and not as the preferred method.
For how-to instructions, see [Connect applications to products with annotations]({{site.baseurl}}/docs/products/configure-product-settings/#connect-applications-to-product-with-annotations).


* Declarative assignment
Defines an annotation with the Product name in the application's manifest. If the Product doesn’t exist, Codefresh automatically creates it for you.
The annotation is committed and saved in Git as part of the application definition.
Fully GitOps-compatible, this is the preferred method.
For how-to instructions, see [Manually assign unassigned applications]({{site.baseurl}}/docs/products/configure-product-settings/#manually-assign-unassigned-applications).

You can always unassign an application from a product, from [Product Settings](#unassign-application-from-product-settings) for manually assigned applications, and by [removing the annotation](#unassign-application-by-removing-annotation) for declaratively assigned applications.

<!---- ## Manually assign applications to Products

Manually assign an application through the Product's settings.

This is one of two methods for assigning applications to Products. The other method involves adding annotations to the application's manifest, as described in [Use annotations to connect applications to Products](#use-annotations-to-connect-applications-to-products).


1. In the Codefresh UI, from the sidebar, select **Products**.
1. If needed, search for the application, or filter by Application or Environment.
1. Do one of the following:
* Mouse over the row with the Product to which to assign the application, and click {::nomarkdown}<img src="../../../images/icons/settings.png?display=inline-block">{:/}.
* Click the name of the Product for which to assign application.
The list of Unassigned apps is displayed in **Settings > Manage Applications**.

{% include
image.html
lightbox="true"
file="/images/gitops-products/unassigned-apps-in-product.png"
url="/images/gitops-products/unassigned-apps-in-product.png"
alt="Unassigned applications in Product"
caption="Unassigned applications in Product"
max-width="60%"
%}

{:start="4"}
1. If needed, again search for applications or filter unassigned applications by **Environment**.
1. To assign an application, click {::nomarkdown}<img src="../../../images/icons/runtime-topology-add-cluster.png?display=inline-block">{:/}.
1. To confirm the assignment, click **Save**.
If you have defined an Environment for the application, the application is automatically added to the Environment defined for it.


{% include
image.html
lightbox="true"
file="/images/gitops-products/assign-app-to-env.png"
url="/images/gitops-products/assign-app-to-env.png"
alt="Application assigned to Product in defined Environment"
caption="Application assigned to Product in defined Environment"
max-width="60%"
%}




## Use annotations to connect applications to Products
Connect an application to a Product declaratively by adding the predefined annotation to the application's manifest.

This is one of two methods for assigning applications to Products. The other method is to manually assign them from the product's [Settings](#manually-assign-applications-to-products).

1. Copy the Product's annotation:
1. In the Codefresh UI, from the sidebar, select **Products**.
1. Do one of the following:
* Mouse over the row with the Product to which to assign the application, and click {::nomarkdown}<img src="../../../images/icons/edit.png?display=inline-block">{:/}.
* Click the Product for which to assign applications.
The **General** section in the Settings tab is displayed.
1. Below Connect Applications, copy the annotation to add to the application's manifest.


{% include
image.html
lightbox="true"
file="/images/gitops-products/settings/general-copy-annotation.png"
url="/images/gitops-products/settings/general-copy-annotation.png"
alt="Copy annotation for Product"
caption="Copy annotation for Product"
max-width="60%"
%}

{:start="2"}
1. Add the annotation to the application's manifest:
1. Click the **Product Dashboard** tab.
1. From the context menu of the application, select **Application Info > Go to application**.
1. Click the **Configuration** tab, and switch to **YAML** mode.
1. Paste below `metadata.annotations`.

{% include
image.html
lightbox="true"
file="/images/gitops-products/app-with-annotation.png"
url="/images/gitops-products/app-with-annotation.png"
alt="Add annotation to application manifest"
caption="Add annotation to application manifest"
max-width="60%"
%}

{:start="7"}
1. Commit to save the changes.

If you return to the GitOps Products dashboard and expand the Product, you'll now see that the application is part of the Product.


-->


## Unassign application from Product Settings
Unassign an application manually assigned to a Product directly from its settings.

1. In the Codefresh UI, from the sidebar, select **Products**.
1. Do one of the following:
* Mouse over the row with the Product from which to unassign the application, and click {::nomarkdown}<img src="../../../images/icons/settings.png?display=inline-block">{:/}.
* Click the Product from which to unassign applications.
The **General** section in the Settings tab is displayed.
1. In the environment with the application to unassign, click {::nomarkdown}<img src="../../../images/icons/unassign-app.png?display=inline-block">{:/}.
You can see that the Unassign icon is disabled for the `guestbook-app-prod` indicating that it is connected through an annotation.

{% include
image.html
lightbox="true"
file="/images/gitops-products/unassign-app-from-product.png"
url="/images/gitops-products/unassign-app-from-product.png"
alt="Unassign application from Product"
caption="Unassign application from Product"
max-width="60%"
%}

{:start="4"}
1. To confirm, click **Save**.
The application reappears in the list of Unassigned apps.

{% include
image.html
lightbox="true"
file="/images/gitops-products/unassigned-app-example.png"
url="/images/gitops-products/unassigned-app-example.png"
alt="Unassigned application in list"
caption="Unassigned application in list"
max-width="60%"
%}

## Unassign application by removing annotation

1. In the Codefresh UI, from the sidebar, select **Products**.
1. Click the product from which to unassign the application, and then click the **Product Dashboard** tab.
1. From the context menu of the application, select **Application Info > Go to application**.
1. Click the **Configuration** tab, and switch to **YAML** mode.
1. Below `metadata.annotations`, remove the product annotation.
1. Commit to save the changes.

## Related articles
[Configuring promotion flows and triggers for products]({{site.baseurl}}/docs/products/manage-products/promotion-flow-triggers/)
[Configuring version and promotable properties for products]({{site.baseurl}}/docs/products/manage-products/promotion-version-properties/)
[Tracking deployments for products]({{site.baseurl}}/docs/products/product-releases/)
[Creating products]({{site.baseurl}}/docs/products/create-product/)
Loading