{"id":2028,"date":"2024-07-02T10:25:34","date_gmt":"2024-07-02T10:25:34","guid":{"rendered":"https:\/\/www.w3computing.com\/articles\/?p=2028"},"modified":"2024-07-02T10:25:38","modified_gmt":"2024-07-02T10:25:38","slug":"how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery","status":"publish","type":"post","link":"https:\/\/www.w3computing.com\/articles\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\/","title":{"rendered":"How to Use Kubernetes with Jenkins X for Continuous Delivery"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Continuous delivery (CD) is a software engineering approach in which teams produce software in short cycles, ensuring that the software can be reliably released at any time. The goal is to build, test, and release software faster and more frequently. Kubernetes and Jenkins X are powerful tools that facilitate this process. This tutorial will guide you through the steps of using Kubernetes with Jenkins X for continuous delivery.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What is Kubernetes?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Kubernetes is an open-source platform designed to automate deploying, scaling, and operating application containers. Originally developed by Google, Kubernetes provides a robust, flexible framework for managing containerized applications across different types of infrastructures.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What is Jenkins X?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins X is an open-source project that leverages Jenkins and Kubernetes to provide automated CI\/CD (Continuous Integration\/Continuous Delivery) for cloud-native applications. Jenkins X simplifies the process of creating and managing Kubernetes environments and pipelines, making it easier for developers to deliver applications in a consistent and reliable manner.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before diving into the tutorial, ensure you have the following:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Basic understanding of Kubernetes and Jenkins<\/strong>: Familiarity with Kubernetes concepts such as Pods, Services, and Deployments, as well as Jenkins pipelines and jobs.<\/li>\n\n\n\n<li><strong>Installed tools<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Kubernetes CLI (kubectl)<\/li>\n\n\n\n<li>Jenkins X CLI (jx)<\/li>\n\n\n\n<li>Docker<\/li>\n\n\n\n<li>Helm<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>A Kubernetes cluster<\/strong>: You can use Minikube for local development or a managed Kubernetes service like GKE, EKS, or AKS for production environments.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Setting Up Your Environment<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.1 Install Kubernetes and Kubectl<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">First, ensure that Kubernetes and kubectl are installed. You can follow the official Kubernetes documentation for installation instructions based on your operating system.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.2 Install Docker<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Docker is required for building container images. Download and install Docker from the official Docker website.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.3 Install Jenkins X CLI<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The Jenkins X CLI (jx) is used to interact with Jenkins X and manage your Kubernetes cluster. Install it using the following commands:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">brew install jenkins-x\/jx\/jx<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">For Linux:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">curl -L https:\/\/github.com\/jenkins-x\/jx\/releases\/download\/v2.1.150\/jx-linux-amd64.tar.gz | tar xzv\nmv jx \/usr\/local\/bin<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">1.4 Install Helm<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Helm is a package manager for Kubernetes. Install it using the following command:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For macOS:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">brew install helm<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">For Linux:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">curl https:\/\/raw.githubusercontent.com\/helm\/helm\/master\/scripts\/get-helm-3 | bash<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 2: Creating a Kubernetes Cluster<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For this tutorial, we will use Minikube to create a local Kubernetes cluster. If you&#8217;re using a managed Kubernetes service, you can skip this step.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.1 Install Minikube<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Install Minikube using the following commands:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For macOS:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"Haml\" data-shcb-language-slug=\"haml\"><span><code class=\"hljs language-haml\">brew install minikube<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Haml<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">haml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">For Linux:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">curl -LO https:\/\/storage.googleapis.com\/minikube\/releases\/latest\/minikube-linux-amd64\nsudo install minikube-linux-amd64 \/usr\/local\/bin\/minikube<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">2.2 Start Minikube<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Start Minikube with the following command:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">minikube start --memory=4096 --cpus=4<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">2.3 Configure kubectl<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Configure kubectl to use the Minikube context:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">kubectl config use-context minikube<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 3: Installing Jenkins X<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">With your Kubernetes cluster up and running, you can now install Jenkins X.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.1 Boot Jenkins X<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins X uses the <code>jx boot<\/code> command to set up your Jenkins X environment. Run the following command to start the installation process:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">jx boot<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Follow the prompts to configure your installation. You&#8217;ll need to provide information such as your GitHub credentials and the repository where Jenkins X will store its configuration.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.2 Verify Installation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Verify that Jenkins X is installed correctly by running:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">jx status<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This command should show the status of your Jenkins X installation, including the URL of the Jenkins X console.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Creating a New Project<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">4.1 Create a New Quickstart Project<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins X provides quickstart templates for creating new projects. Run the following command to create a new quickstart project:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">jx create quickstart<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Select a language and framework from the list of available quickstarts. Jenkins X will create a new repository based on the selected template and set up the CI\/CD pipeline.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.2 Clone the Repository<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Clone the newly created repository to your local machine:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">git clone https:\/\/github.com\/&lt;your-github-username&gt;\/&lt;your-repository&gt;.git\ncd &lt;your-repository&gt;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 5: Configuring the Pipeline<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins X uses Tekton for defining and running CI\/CD pipelines. The pipeline configuration is stored in the <code>jenkins-x.yml<\/code> file.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5.1 Define the Pipeline<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Open the <code>jenkins-x.yml<\/code> file and define the stages of your pipeline. A basic pipeline might look like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"YAML\" data-shcb-language-slug=\"yaml\"><span><code class=\"hljs language-yaml\"><span class=\"hljs-attr\">buildPack:<\/span> <span class=\"hljs-string\">go<\/span>\n<span class=\"hljs-attr\">pipelineConfig:<\/span>\n  <span class=\"hljs-attr\">pipelines:<\/span>\n    <span class=\"hljs-attr\">release:<\/span>\n      <span class=\"hljs-attr\">pipeline:<\/span>\n        <span class=\"hljs-attr\">stages:<\/span>\n          <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">build<\/span>\n            <span class=\"hljs-attr\">steps:<\/span>\n              <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">build<\/span>\n                <span class=\"hljs-attr\">sh:<\/span> <span class=\"hljs-string\">make<\/span> <span class=\"hljs-string\">build<\/span>\n          <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">test<\/span>\n            <span class=\"hljs-attr\">steps:<\/span>\n              <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">test<\/span>\n                <span class=\"hljs-attr\">sh:<\/span> <span class=\"hljs-string\">make<\/span> <span class=\"hljs-string\">test<\/span>\n          <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">release<\/span>\n            <span class=\"hljs-attr\">steps:<\/span>\n              <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">release<\/span>\n                <span class=\"hljs-attr\">sh:<\/span> <span class=\"hljs-string\">make<\/span> <span class=\"hljs-string\">release<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">YAML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">yaml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">5.2 Customize the Pipeline<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Customize the pipeline to fit your project&#8217;s requirements. For example, you can add steps for linting, security scanning, and deploying to different environments.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Deploying Your Application<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">6.1 Create Environments<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins X manages different environments such as <code>staging<\/code> and <code>production<\/code> using GitOps. Create these environments using the following commands:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">jx create env --name staging\njx create env --name production<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">6.2 Promote to Staging<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">To deploy your application to the staging environment, run the following command:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">jx promote --version 0.0.1 --env staging<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This command will trigger the promotion pipeline, which builds, tests, and deploys the application to the staging environment.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6.3 Promote to Production<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Once your application is tested in staging, you can promote it to production:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">jx promote --version 0.0.1 --env production<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 7: Monitoring and Observability<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">7.1 Install Prometheus and Grafana<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins X integrates with Prometheus and Grafana for monitoring and observability. Install them using the following commands:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">jx add app prometheus\njx add app grafana<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">7.2 Access Grafana Dashboard<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Access the Grafana dashboard to visualize metrics and monitor your application:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-17\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">jx open grafana<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 8: Managing Secrets<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">8.1 Install External Secrets<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins X uses External Secrets for managing secrets. Install it using the following command:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-18\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">jx add app external-secrets<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-18\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">8.2 Create Secrets<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Create secrets using Kubernetes secrets and External Secrets. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-19\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">kubectl create secret generic my-secret --from-literal=username=my-user --from-literal=password=my-password<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-19\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 9: Advanced Pipeline Configuration<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">9.1 Parallel Steps<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">To run steps in parallel, define them in the <code>jenkins-x.yml<\/code> file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-20\" data-shcb-language-name=\"YAML\" data-shcb-language-slug=\"yaml\"><span><code class=\"hljs language-yaml\"><span class=\"hljs-attr\">pipelineConfig:<\/span>\n  <span class=\"hljs-attr\">pipelines:<\/span>\n    <span class=\"hljs-attr\">release:<\/span>\n      <span class=\"hljs-attr\">pipeline:<\/span>\n        <span class=\"hljs-attr\">stages:<\/span>\n          <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">build<\/span>\n            <span class=\"hljs-attr\">parallel:<\/span>\n              <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">build-go<\/span>\n                <span class=\"hljs-attr\">sh:<\/span> <span class=\"hljs-string\">make<\/span> <span class=\"hljs-string\">build-go<\/span>\n              <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">build-js<\/span>\n                <span class=\"hljs-attr\">sh:<\/span> <span class=\"hljs-string\">make<\/span> <span class=\"hljs-string\">build-js<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-20\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">YAML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">yaml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">9.2 Conditional Steps<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Run steps conditionally based on certain criteria:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-21\" data-shcb-language-name=\"YAML\" data-shcb-language-slug=\"yaml\"><span><code class=\"hljs language-yaml\"><span class=\"hljs-attr\">pipelineConfig:<\/span>\n  <span class=\"hljs-attr\">pipelines:<\/span>\n    <span class=\"hljs-attr\">release:<\/span>\n      <span class=\"hljs-attr\">pipeline:<\/span>\n        <span class=\"hljs-attr\">stages:<\/span>\n          <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">deploy<\/span>\n            <span class=\"hljs-attr\">steps:<\/span>\n              <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">deploy<\/span>\n                <span class=\"hljs-attr\">sh:<\/span> <span class=\"hljs-string\">make<\/span> <span class=\"hljs-string\">deploy<\/span>\n                <span class=\"hljs-attr\">when:<\/span>\n                  <span class=\"hljs-attr\">branch:<\/span>\n                    <span class=\"hljs-attr\">include:<\/span>\n                      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">main<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-21\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">YAML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">yaml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">9.3 Approval Gates<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Add approval gates to your pipeline for manual approval before proceeding to the next stage:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-22\" data-shcb-language-name=\"YAML\" data-shcb-language-slug=\"yaml\"><span><code class=\"hljs language-yaml\"><span class=\"hljs-attr\">pipelineConfig:<\/span>\n  <span class=\"hljs-attr\">pipelines:<\/span>\n    <span class=\"hljs-attr\">release:<\/span>\n      <span class=\"hljs-attr\">pipeline:<\/span>\n        <span class=\"hljs-attr\">stages:<\/span>\n          <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">approve<\/span>\n            <span class=\"hljs-attr\">steps:<\/span>\n              <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">approval<\/span>\n                <span class=\"hljs-attr\">input:<\/span>\n                  <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">Approval<\/span>\n                  <span class=\"hljs-attr\">message:<\/span> <span class=\"hljs-string\">\"Approve the deployment to production?\"<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-22\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">YAML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">yaml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 10: Cleaning Up<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">After you are done experimenting with Jenkins X, clean up your resources to avoid unnecessary costs.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">10.1 Delete Environments<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Delete the staging and production environments:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-23\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">jx delete env staging\njx delete env production<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-23\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">10.2 Uninstall Jenkins X<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Uninstall Jenkins X from your Kubernetes cluster:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-24\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">jx uninstall<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-24\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">10.3 Delete Kubernetes Cluster<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If you are using Minikube, stop and delete the cluster:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-25\" data-shcb-language-name=\"Shell Session\" data-shcb-language-slug=\"shell\"><span><code class=\"hljs language-shell\">minikube stop\nminikube delete<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-25\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Shell Session<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">shell<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In this tutorial, we covered how to use Kubernetes with Jenkins X for continuous delivery. We walked through setting up the environment, creating a Kubernetes cluster, installing Jenkins X, creating and configuring a project, deploying applications, and managing secrets. Additionally, we explored advanced pipeline configurations and monitoring with Prometheus and Grafana.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Continuous delivery (CD) is a software engineering approach in which teams produce software in short cycles, ensuring that the software can be reliably released at any time. The goal is to build, test, and release software faster and more frequently. Kubernetes and Jenkins X are powerful tools that facilitate this process. This tutorial will [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[21],"tags":[],"class_list":["post-2028","post","type-post","status-publish","format-standard","category-containers","entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to Use Kubernetes with Jenkins X for Continuous Delivery<\/title>\n<meta name=\"description\" content=\"Continuous delivery (CD) is a software engineering approach in which teams produce software in short cycles, ensuring that the software can be\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.w3computing.com\/articles\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Use Kubernetes with Jenkins X for Continuous Delivery\" \/>\n<meta property=\"og:description\" content=\"Continuous delivery (CD) is a software engineering approach in which teams produce software in short cycles, ensuring that the software can be\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.w3computing.com\/articles\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-07-02T10:25:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-07-02T10:25:38+00:00\" \/>\n<meta name=\"author\" content=\"w3compadmin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"w3compadmin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\\\/\"},\"author\":{\"name\":\"w3compadmin\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#\\\/schema\\\/person\\\/a550b3e20d78bb4f79b7c6b7b53f0561\"},\"headline\":\"How to Use Kubernetes with Jenkins X for Continuous Delivery\",\"datePublished\":\"2024-07-02T10:25:34+00:00\",\"dateModified\":\"2024-07-02T10:25:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\\\/\"},\"wordCount\":922,\"articleSection\":[\"Containers\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\\\/\",\"url\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\\\/\",\"name\":\"How to Use Kubernetes with Jenkins X for Continuous Delivery\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#website\"},\"datePublished\":\"2024-07-02T10:25:34+00:00\",\"dateModified\":\"2024-07-02T10:25:38+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#\\\/schema\\\/person\\\/a550b3e20d78bb4f79b7c6b7b53f0561\"},\"description\":\"Continuous delivery (CD) is a software engineering approach in which teams produce software in short cycles, ensuring that the software can be\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Articles Home\",\"item\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Containers\",\"item\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/containers\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How to Use Kubernetes with Jenkins X for Continuous Delivery\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#website\",\"url\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/\",\"name\":\"Developer Articles Hub\",\"description\":\"\",\"alternateName\":\"Developer Articles\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/#\\\/schema\\\/person\\\/a550b3e20d78bb4f79b7c6b7b53f0561\",\"name\":\"w3compadmin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/wp-content\\\/litespeed\\\/avatar\\\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266\",\"url\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/wp-content\\\/litespeed\\\/avatar\\\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266\",\"contentUrl\":\"https:\\\/\\\/www.w3computing.com\\\/articles\\\/wp-content\\\/litespeed\\\/avatar\\\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266\",\"caption\":\"w3compadmin\"},\"sameAs\":[\"http:\\\/\\\/w3computing.com\\\/articles\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Use Kubernetes with Jenkins X for Continuous Delivery","description":"Continuous delivery (CD) is a software engineering approach in which teams produce software in short cycles, ensuring that the software can be","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.w3computing.com\/articles\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\/","og_locale":"en_US","og_type":"article","og_title":"How to Use Kubernetes with Jenkins X for Continuous Delivery","og_description":"Continuous delivery (CD) is a software engineering approach in which teams produce software in short cycles, ensuring that the software can be","og_url":"https:\/\/www.w3computing.com\/articles\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\/","article_published_time":"2024-07-02T10:25:34+00:00","article_modified_time":"2024-07-02T10:25:38+00:00","author":"w3compadmin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"w3compadmin","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/www.w3computing.com\/articles\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\/#article","isPartOf":{"@id":"https:\/\/www.w3computing.com\/articles\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\/"},"author":{"name":"w3compadmin","@id":"https:\/\/www.w3computing.com\/articles\/#\/schema\/person\/a550b3e20d78bb4f79b7c6b7b53f0561"},"headline":"How to Use Kubernetes with Jenkins X for Continuous Delivery","datePublished":"2024-07-02T10:25:34+00:00","dateModified":"2024-07-02T10:25:38+00:00","mainEntityOfPage":{"@id":"https:\/\/www.w3computing.com\/articles\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\/"},"wordCount":922,"articleSection":["Containers"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.w3computing.com\/articles\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\/","url":"https:\/\/www.w3computing.com\/articles\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\/","name":"How to Use Kubernetes with Jenkins X for Continuous Delivery","isPartOf":{"@id":"https:\/\/www.w3computing.com\/articles\/#website"},"datePublished":"2024-07-02T10:25:34+00:00","dateModified":"2024-07-02T10:25:38+00:00","author":{"@id":"https:\/\/www.w3computing.com\/articles\/#\/schema\/person\/a550b3e20d78bb4f79b7c6b7b53f0561"},"description":"Continuous delivery (CD) is a software engineering approach in which teams produce software in short cycles, ensuring that the software can be","breadcrumb":{"@id":"https:\/\/www.w3computing.com\/articles\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.w3computing.com\/articles\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.w3computing.com\/articles\/how-to-use-kubernetes-with-jenkins-x-for-continuous-delivery\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Articles Home","item":"https:\/\/www.w3computing.com\/articles\/"},{"@type":"ListItem","position":2,"name":"Containers","item":"https:\/\/www.w3computing.com\/articles\/containers\/"},{"@type":"ListItem","position":3,"name":"How to Use Kubernetes with Jenkins X for Continuous Delivery"}]},{"@type":"WebSite","@id":"https:\/\/www.w3computing.com\/articles\/#website","url":"https:\/\/www.w3computing.com\/articles\/","name":"Developer Articles Hub","description":"","alternateName":"Developer Articles","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.w3computing.com\/articles\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.w3computing.com\/articles\/#\/schema\/person\/a550b3e20d78bb4f79b7c6b7b53f0561","name":"w3compadmin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.w3computing.com\/articles\/wp-content\/litespeed\/avatar\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266","url":"https:\/\/www.w3computing.com\/articles\/wp-content\/litespeed\/avatar\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266","contentUrl":"https:\/\/www.w3computing.com\/articles\/wp-content\/litespeed\/avatar\/bd481d404e42caa2763662a3bfe825f8.jpg?ver=1780141266","caption":"w3compadmin"},"sameAs":["http:\/\/w3computing.com\/articles"]}]}},"featured_image_src":null,"featured_image_src_square":null,"author_info":{"display_name":"w3compadmin","author_link":"https:\/\/www.w3computing.com\/articles\/author\/w3compadmin\/"},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/posts\/2028","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/comments?post=2028"}],"version-history":[{"count":1,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/posts\/2028\/revisions"}],"predecessor-version":[{"id":2029,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/posts\/2028\/revisions\/2029"}],"wp:attachment":[{"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/media?parent=2028"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/categories?post=2028"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.w3computing.com\/articles\/wp-json\/wp\/v2\/tags?post=2028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}