Codefresh is a modern CI/CD platform designed for Kubernetes and microservices applications. It provides developers with fast, powerful pipelines and deep integration with Kubernetes. The platform’s features, such as enhanced caching, parallelization, and flexible triggers, allow teams to optimize their continuous integration workflows.
What Is Codefresh?
Codefresh extends the Argo Project to offer a comprehensive GitOps platform for Kubernetes. GitOps helps teams automate their infrastructure and application management, using Git as the single source of truth for deployments. By leveraging Argo within Codefresh, developers can employ advanced deployment strategies such as canary releases and blue-green deployments, improving release quality and reducing risks.
Benefits of Using Codefresh and Cloudsmith Together
Integrating Cloudsmith, a cloud-native artifact management platform, with Codefresh enhances your CI/CD workflows in several significant ways. This powerful combination automates artifact handling, simplifies deployments, and enables the adoption of GitOps practices for Kubernetes deployments.
Streamlined Artifact ManagementBy automating artifact publishing within Codefresh pipelines, developers can significantly reduce manual steps, minimizing errors and ensuring artifacts are securely available for deployment. Cloudsmith’s support for multiformat repositories ensures that microservices using different package formats—such as Docker, npm, Helm, and Maven—can be managed and retrieved consistently.
Simplified DeploymentsIntegrating Cloudsmith with Codefresh streamlines deployment processes by allowing developers to pull artifacts directly into their Codefresh pipelines. Whether deploying Docker images or Helm charts, this integration ensures consistency across all environments, from development to production, reducing deployment discrepancies.
Enhanced Security and ComplianceWith Cloudsmith’s Dependency Firewall and Policy Management, developers can ensure that only approved and secure components are used in their pipelines. Features like quarantine and upstream proxying add further control over unapproved or vulnerable dependencies. This guarantees a secure, compliant software supply chain.
Adopting GitOps for Kubernetes DeploymentsCombining Cloudsmith and Codefresh enables teams to fully adopt GitOps practices for Kubernetes deployments. GitOps ensures that deployments are automated and aligned with the desired state defined in Git repositories. With Argo built into Codefresh, continuous reconciliation of your Kubernetes clusters keeps your infrastructure consistent with what’s declared in your codebase.
By integrating these platforms, you automate artifact handling, simplify deployments, and enhance security—all while adopting GitOps practices for Kubernetes deployments. This empowers your team to focus on delivering value—writing code, innovating features, and improving products—while the integration handles the complexities of artifact management and deployment.
How to Set Up a Pipeline with Codefresh and Cloudsmith
Setting up a CI/CD pipeline that integrates Codefresh and Cloudsmith is straightforward. Below is a guide to configure your pipeline for seamless artifact management and deployment using either API Key or OpenID Connect (OIDC) for authentication.
Figure: Codefresh workflow.
Prerequisites
- Cloudsmith Account: Sign up for Cloudsmith and create repositories for your artifacts.
- Codefresh Account: Sign up for Codefresh and set up your CI/CD pipelines.
- Kubernetes Cluster: Ensure you have access to a Kubernetes cluster connected to Codefresh for deployments.
- Authentication Credentials: Obtain your Cloudsmith API Key or set up OIDC for secure authentication.
Integration Steps
1. Configure Authentication
Using API Key:
- Obtain your Cloudsmith API Key or generate a new one.
- Secure Storage in Codefresh:
- Open your Codefresh pipeline and go to the Settings tab.
- Click on Environment Variables and select Add New Variable.
- Name the variable (e.g., CLOUDSMITH_API_KEY), input your API key, and toggle Encrypt Value to ensure it's stored securely.
- Reference the API key in your pipeline YAML using ${{CLOUDSMITH_API_KEY}}.
Using OpenID Connect (OIDC):
- Enable OIDC in Cloudsmith:
- Create a Service Account in Cloudsmith (required for OIDC to work with Cloudsmith).
- Configure OpenID Connect in Cloudsmith:
- Provider URL: https://oidc.codefresh.io
- Claims: For example add your Codefresh account ID to restrict access. For more information on claims consult the Codefresh documentation.
- Assign the service account you created earlier.
- Configure Codefresh as OIDC Provider:
- In Codefresh, set up OIDC authentication by configuring your pipeline to request OIDC tokens during execution.
- Add steps in your pipeline YAML to obtain and use the OIDC token for authenticating with Cloudsmith.
For detailed instructions, refer to the Cloudsmith OIDC documentation and the Codefresh OIDC integration guide.
2. Set Up Cloudsmith in Codefresh
Publish Artifacts:
Modify your pipeline YAML to include steps that push build artifacts to Cloudsmith after successful builds.
Example for Publishing a Docker Image:
NOTE: To publish Helm charts, you need to use the Cloudsmith CLI. Ensure that the CLI is installed in your pipeline environment. For more details, refer to the Cloudsmith Helm documentation.
4. Configure CD Pipelines
Deploying Artifacts from Cloudsmith Using Codefresh
Codefresh offers several ways to deploy your Docker images and Helm charts to your Kubernetes cluster using artifacts stored in Cloudsmith:
- Using the Codefresh GUI to Deploy on Demand
- Select Docker Images: Choose Docker images from your connected Cloudsmith Docker registry.
- Deploy Helm Charts: Select Helm charts from your added Cloudsmith Helm repository.
- Deploying via Codefresh Pipeline
- Reference Docker Images: Use Docker images stored in Cloudsmith within your pipeline steps.
- Helm Deployment: Utilize the Helm step in your pipeline to deploy charts from your Cloudsmith Helm repository.
- Kubernetes Templating (cf-deploy-kubernetes): Employ templated deployments for consistent configurations.
- Custom kubectl Commands: Execute custom kubectl commands within your pipeline, referencing artifacts from Cloudsmith.
- Helm Deployment to Kubernetes: Directly deploy Helm charts to your Kubernetes clusters.
- Utilizing GitOps with Argo CD
- Integrate Argo CD: For advanced GitOps deployments, integrate Argo CD with Codefresh. This allows automated deployment of applications to Kubernetes clusters using Cloudsmith as your artifact source.
Example of Pulling a Docker Image Using OIDC
Below is an example pipeline demonstrating how to authenticate with Cloudsmith using OIDC and deploy a Docker image:
Explanation of Steps:
- Obtain ID Token: Retrieves an OIDC token required for authentication.
- Authenticate with Cloudsmith: Uses the OIDC token to obtain a Cloudsmith-specific token.
- Pull Docker Image Using OIDC Token: Logs into the Cloudsmith Docker registry using the obtained OIDC token and pulls the desired Docker image.
- Check Docker Cache Status: Verifies the successful pull by checking the Docker image's history.
Note: Ensure that the Cloudsmith CLI is installed in your pipeline environment if you plan to publish Helm charts or perform other CLI-based operations. Refer to the Cloudsmith Helm documentation for more details.
Best Practices
- Use OIDC for Authentication: Prefer OIDC over API keys for enhanced security and simplified credential management.
- Read only access for Deployment: Use read-only service accounts when deploying artifacts from Cloudsmith. This ensures that deployment pipelines only have the necessary access to pull artifacts without the risk of modifying or deleting them, thus improving the security of your deployment process.
- Secure Credentials: Store sensitive information like API keys or OIDC tokens securely using Codefresh's encrypted variables or secret management features.
- Automate Deployments: Leverage Codefresh pipelines and GitOps practices to automate deployment steps, reducing manual intervention and potential errors.
- Monitor Deployments: Utilize Codefresh's dashboards and integrations to monitor deployment status and health, ensuring quick identification and resolution of issues.
- Follow GitOps Principles: Maintain your deployment manifests in Git repositories for version control, traceability, and easier collaboration.
Integrating Cloudsmith with Codefresh optimizes your CI/CD pipelines by providing secure, automated artifact management and simplifying deployments. With Cloudsmith’s support for multiple package formats and Codefresh’s robust CI/CD capabilities tailored for Kubernetes and microservices, this integration is ideal for modern, distributed applications.