<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bhavesh Panchal</title>
    <description>The latest articles on DEV Community by Bhavesh Panchal (@bhavesh_panchal_554670aec).</description>
    <link>https://dev.to/bhavesh_panchal_554670aec</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3695403%2F6864d0bd-8eed-46ab-8144-de8c88f33fad.jpg</url>
      <title>DEV Community: Bhavesh Panchal</title>
      <link>https://dev.to/bhavesh_panchal_554670aec</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bhavesh_panchal_554670aec"/>
    <language>en</language>
    <item>
      <title>From Prometheus to ARMS: How We Simplified Observability for a Multi-Tier App on Alibaba Cloud</title>
      <dc:creator>Bhavesh Panchal</dc:creator>
      <pubDate>Wed, 07 Jan 2026 12:16:07 +0000</pubDate>
      <link>https://dev.to/bhavesh_panchal_554670aec/from-prometheus-to-arms-how-we-simplified-observability-for-a-multi-tier-app-on-alibaba-cloud-283d</link>
      <guid>https://dev.to/bhavesh_panchal_554670aec/from-prometheus-to-arms-how-we-simplified-observability-for-a-multi-tier-app-on-alibaba-cloud-283d</guid>
      <description>&lt;p&gt;If you’ve ever lost sleep debugging a latency spike across microservices, you know observability isn’t just about metrics—it’s about &lt;strong&gt;context&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;For months, my team ran a multi-tier SaaS application on Alibaba Cloud using Prometheus on ACK (Alibaba Cloud Container Service for Kubernetes). It worked—until scaling demands, fragmented tooling, and alert fatigue caught up with us.  &lt;/p&gt;

&lt;p&gt;We recently migrated to &lt;strong&gt;Application Real-Time Monitoring Service (ARMS)&lt;/strong&gt;, Alibaba Cloud’s managed observability platform. The result? &lt;strong&gt;40% faster incident resolution&lt;/strong&gt;, far less operational overhead, and a unified view across our entire stack.  &lt;/p&gt;

&lt;p&gt;Here’s how—and why—it worked for us.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why We Hit Prometheus’ Limits
&lt;/h2&gt;

&lt;p&gt;Prometheus is fantastic for metrics—but in a production-grade, multi-environment setup, we kept running into walls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Operational drag&lt;/strong&gt;: Managing HA Prometheus, storage, retention, and scrape configs across clusters ate up valuable engineering time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No end-to-end visibility&lt;/strong&gt;: Metrics lived in Prometheus, logs in a separate system, and traces in another. Correlating a frontend slowdown to a slow database query meant manual detective work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scaling unpredictably&lt;/strong&gt;: During traffic spikes, we either over-provisioned (wasting money) or risked metric gaps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Noisy, low-context alerts&lt;/strong&gt;: “High CPU” or “API error rate up” without knowing &lt;em&gt;which service&lt;/em&gt; or &lt;em&gt;which dependency&lt;/em&gt; was the root cause.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We needed something that gave us &lt;strong&gt;metrics + traces + logs in one place&lt;/strong&gt;, with minimal maintenance.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why We Chose ARMS
&lt;/h2&gt;

&lt;p&gt;ARMS isn’t just “Prometheus-as-a-service.” It’s a &lt;strong&gt;unified observability platform&lt;/strong&gt; that supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full Prometheus remote write/pull compatibility
&lt;/li&gt;
&lt;li&gt;Automatic discovery of cloud resources (Kubernetes workloads, load balancers, managed databases, etc.)
&lt;/li&gt;
&lt;li&gt;Built-in distributed tracing (with auto-instrumentation for Java, Python, Go, and more)
&lt;/li&gt;
&lt;li&gt;Tight integration with Alibaba Cloud services—no extra agents or complex networking
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most importantly: &lt;strong&gt;we didn’t have to throw away our existing investment&lt;/strong&gt;. ARMS ingested our existing Prometheus metrics while adding deeper context from the underlying cloud infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Our Migration Strategy: Safe and Incremental
&lt;/h2&gt;

&lt;p&gt;We didn’t flip a switch. Observability is too critical for that. Here’s our phased approach:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Parallel ingestion&lt;/strong&gt;: Configured ARMS to receive metrics via Prometheus remote write—same exporters, same metrics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validation period&lt;/strong&gt;: Ran both systems side-by-side for 2 weeks, comparing dashboards, alert fidelity, and data completeness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gradual cutover&lt;/strong&gt;: Shifted Grafana dashboards to use ARMS as a data source, then migrated alert rules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decommission&lt;/strong&gt;: Once confident, we scaled down our self-managed Prometheus stack and reclaimed resources.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Zero downtime. Minimal risk.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Pro tip&lt;/strong&gt;: Start with ARMS’ Prometheus Monitoring mode—it’s the gentlest on-ramp if you’re already using Prometheus.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Observability Across All Tiers—Finally
&lt;/h2&gt;

&lt;p&gt;Our stack spans:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend (CDN + static assets on OSS)
&lt;/li&gt;
&lt;li&gt;API gateway (via Application Load Balancer)
&lt;/li&gt;
&lt;li&gt;Stateless microservices (on ACK)
&lt;/li&gt;
&lt;li&gt;Caching layer (managed Redis)
&lt;/li&gt;
&lt;li&gt;Persistent storage (managed PostgreSQL)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before ARMS, answering &lt;em&gt;“Why is checkout slow?”&lt;/em&gt; meant jumping between 3+ tools.  &lt;/p&gt;

&lt;p&gt;Now, in a &lt;strong&gt;single ARMS dashboard&lt;/strong&gt;, we see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend performance (real user metrics)
&lt;/li&gt;
&lt;li&gt;API latency and error rates
&lt;/li&gt;
&lt;li&gt;Service dependency map with live traces
&lt;/li&gt;
&lt;li&gt;Slow database queries auto-linked to calling services
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s no longer about “collecting data”—it’s about &lt;strong&gt;understanding behavior&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Results That Mattered
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;40% reduction in mean time to resolution (MTTR)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;60% less time spent managing observability infrastructure&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Fewer but &lt;strong&gt;higher-signal alerts&lt;/strong&gt; (with service-level context)
&lt;/li&gt;
&lt;li&gt;Faster onboarding—new engineers explore the system through ARMS, not tribal knowledge
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  If You’re Considering a Similar Move
&lt;/h2&gt;

&lt;p&gt;Here’s what helped us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use ARMS’ &lt;strong&gt;Prometheus-compatible endpoint&lt;/strong&gt; to avoid config rewrites.&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;Application Monitoring&lt;/strong&gt; for auto-instrumentation—just add a few JVM args or SDK calls.&lt;/li&gt;
&lt;li&gt;Set up &lt;strong&gt;RAM roles&lt;/strong&gt; (Alibaba Cloud’s IAM) for secure, credential-free access.&lt;/li&gt;
&lt;li&gt;Still push custom metrics? ARMS supports OpenTelemetry and Prometheus client libraries.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;This wasn’t just a tool swap—it was a shift from &lt;strong&gt;reactive monitoring&lt;/strong&gt; to &lt;strong&gt;proactive understanding&lt;/strong&gt;. By leaning into a managed, cloud-native observability platform, we got our weekends back and our SLOs under control.&lt;/p&gt;

&lt;p&gt;If you’re running Prometheus on Kubernetes and feeling the pain of scale, it might be time to explore what a unified observability platform can do for your team—regardless of your cloud provider.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have you migrated from self-managed Prometheus to a managed solution? I’d love to hear your lessons in the comments!&lt;/em&gt;  &lt;/p&gt;




&lt;p&gt;&lt;em&gt;About the author&lt;/em&gt;: I’m a DevOps engineer and 2x Alibaba Cloud MVP. I spend my days building resilient, observable systems in the cloud—and sharing what works (and what doesn’t).&lt;/p&gt;

</description>
      <category>alibabacloud</category>
      <category>arms</category>
      <category>prometheus</category>
      <category>observability</category>
    </item>
    <item>
      <title>I Set Up a Real CI/CD Pipeline in 20 Minutes Using Alibaba Cloud—Here’s How</title>
      <dc:creator>Bhavesh Panchal</dc:creator>
      <pubDate>Tue, 06 Jan 2026 07:12:26 +0000</pubDate>
      <link>https://dev.to/bhavesh_panchal_554670aec/i-set-up-a-real-cicd-pipeline-in-20-minutes-using-alibaba-cloud-heres-how-3a4f</link>
      <guid>https://dev.to/bhavesh_panchal_554670aec/i-set-up-a-real-cicd-pipeline-in-20-minutes-using-alibaba-cloud-heres-how-3a4f</guid>
      <description>&lt;p&gt;A few weeks ago, I was tired of manually building, testing, and deploying a little side project every time I made a change. You know the drill:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Did I push the right image?”&lt;br&gt;&lt;br&gt;
“Wait, is this the staging or prod cluster?”&lt;br&gt;&lt;br&gt;
“Why did it work locally but fail in the cloud?!”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I decided to finally set up a proper CI/CD pipeline. But I didn’t want to wrestle with Jenkins or stitch together five different services. I wanted something simple, integrated, and—ideally—free to start.&lt;/p&gt;

&lt;p&gt;That’s when I gave &lt;strong&gt;Alibaba Cloud DevOps&lt;/strong&gt; a shot. And honestly? It surprised me.&lt;/p&gt;

&lt;p&gt;In under 20 minutes, I had a working pipeline that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Builds a Docker image on every &lt;code&gt;git push&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Runs tests&lt;/li&gt;
&lt;li&gt;Deploys to Kubernetes (ACK) with zero manual intervention&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No YAML nightmares. No self-hosted runners. Just… it worked.&lt;/p&gt;

&lt;p&gt;Here’s how I did it—and how you can too.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why I Chose Alibaba Cloud DevOps (And Why You Might Like It)
&lt;/h3&gt;

&lt;p&gt;I’m already using Alibaba Cloud for hosting, so I figured: &lt;em&gt;why not keep everything in one place?&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;Turns out, their DevOps platform comes with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A built-in Git repo (like GitHub, but inside Alibaba Cloud)&lt;/li&gt;
&lt;li&gt;Visual + YAML pipeline editor&lt;/li&gt;
&lt;li&gt;Direct integration with their Kubernetes service (ACK), container registry (ACR), and monitoring tools&lt;/li&gt;
&lt;li&gt;Free tier that’s generous enough for personal projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No extra accounts. No secret management headaches. Just code → build → deploy.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 1: Create a Project (Takes 30 Seconds)
&lt;/h3&gt;

&lt;p&gt;Log into the &lt;a href="https://home.console.aliyun.com/" rel="noopener noreferrer"&gt;Alibaba Cloud Console&lt;/a&gt;, go to &lt;strong&gt;Application Services → DevOps&lt;/strong&gt;, and click &lt;strong&gt;Create Project&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I named mine &lt;code&gt;my-tiny-api&lt;/code&gt; and chose &lt;strong&gt;“Create a new code repository.”&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Boom—now I had a Git URL like &lt;code&gt;https://code.aliyun.com/yourname/my-tiny-api.git&lt;/code&gt;.&lt;/p&gt;


&lt;h3&gt;
  
  
  Step 2: Throw in a Simple App
&lt;/h3&gt;

&lt;p&gt;I used a bare-bones Node.js server—nothing fancy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// index.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createServer&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello from CI/CD land! 🌍&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And a minimal &lt;code&gt;package.json&lt;/code&gt; with a fake test script (hey, it’s a demo!):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node index.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"echo '✅ All good!'"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Hello, pipeline!"&lt;/span&gt;
git push origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Step 3: Build the Pipeline (The Fun Part)
&lt;/h3&gt;

&lt;p&gt;In the DevOps dashboard, I clicked &lt;strong&gt;Pipelines → Create Pipeline&lt;/strong&gt; and picked &lt;strong&gt;Custom Pipeline&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of clicking through a UI (though you can!), I switched to &lt;strong&gt;YAML mode&lt;/strong&gt; and pasted this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.1"&lt;/span&gt;
&lt;span class="na"&gt;stages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;stage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build&lt;/span&gt;
      &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;step&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;build@docker&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build Docker image&lt;/span&gt;
          &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;dockerfile&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
              &lt;span class="s"&gt;FROM node:18-alpine&lt;/span&gt;
              &lt;span class="s"&gt;WORKDIR /app&lt;/span&gt;
              &lt;span class="s"&gt;COPY . .&lt;/span&gt;
              &lt;span class="s"&gt;RUN npm ci --only=production&lt;/span&gt;
              &lt;span class="s"&gt;CMD ["npm", "start"]&lt;/span&gt;
            &lt;span class="na"&gt;imageName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;registry.cn-hangzhou.aliyuncs.com/my-namespace/my-tiny-api&lt;/span&gt;
            &lt;span class="na"&gt;imageTag&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${BUILD_NUMBER}&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;stage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Test&lt;/span&gt;
      &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;step&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;script&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run tests&lt;/span&gt;
          &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;commands&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;npm&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;test"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;stage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deploy&lt;/span&gt;
      &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;step&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deploy@kubernetes&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Ship it!&lt;/span&gt;
          &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;clusterId&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cls-xxxxxx"&lt;/span&gt;  &lt;span class="c1"&gt;# ← your ACK cluster ID&lt;/span&gt;
            &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;default"&lt;/span&gt;
            &lt;span class="na"&gt;manifests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="c1"&gt;# Your Deployment + Service YAML goes here&lt;/span&gt;
              &lt;span class="c1"&gt;# (see full example in the expanded version)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;🛠️ &lt;strong&gt;Gotchas I hit&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make sure your &lt;strong&gt;Container Registry namespace&lt;/strong&gt; exists&lt;/li&gt;
&lt;li&gt;Grant your DevOps project &lt;strong&gt;permissions to ACK and ACR&lt;/strong&gt; (it prompts you!)&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;npm ci&lt;/code&gt;, not &lt;code&gt;npm install&lt;/code&gt;, for reproducible builds&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;I clicked &lt;strong&gt;Run&lt;/strong&gt;, held my breath… and watched it build, test, and deploy—successfully!&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 4: Automate It
&lt;/h3&gt;

&lt;p&gt;Back in pipeline settings, I turned on &lt;strong&gt;“Trigger on push to main”&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;Now, every time I &lt;code&gt;git push&lt;/code&gt;, magic happens:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Code lands in the repo&lt;/li&gt;
&lt;li&gt;Pipeline starts automatically&lt;/li&gt;
&lt;li&gt;New version is live in my cluster in ~2 minutes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It feels like cheating. In a good way.&lt;/p&gt;




&lt;h3&gt;
  
  
  Bonus: It’s Not Just for Alibaba Fans
&lt;/h3&gt;

&lt;p&gt;Even if you’re used to GitHub Actions or GitLab CI, give this a look if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You’re already on Alibaba Cloud&lt;/li&gt;
&lt;li&gt;You want less context-switching&lt;/li&gt;
&lt;li&gt;You value “it just works” over maximum flexibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Is it as customizable as Jenkins? No.&lt;br&gt;&lt;br&gt;
Do I care for a small project? Also no.&lt;/p&gt;

&lt;p&gt;Sometimes, simplicity is the real superpower.&lt;/p&gt;




&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;I walked in expecting complexity. I walked out with a working CI/CD pipeline and time to spare.&lt;/p&gt;

&lt;p&gt;If you’ve been putting off automating your deployments—especially on Alibaba Cloud—&lt;strong&gt;just try it&lt;/strong&gt;. You might be done before your coffee gets cold.&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;Get started&lt;/strong&gt;: &lt;a href="https://www.alibabacloud.com/product/devops" rel="noopener noreferrer"&gt;Alibaba Cloud DevOps&lt;/a&gt;&lt;br&gt;&lt;br&gt;
(Yes, there’s a free tier!)&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Have you tried Alibaba Cloud DevOps?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Or do you swear by another CI/CD tool? I’d love to hear your take in the comments! 👇&lt;/p&gt;

&lt;p&gt;—&lt;br&gt;&lt;br&gt;
&lt;em&gt;Built something cool with cloud automation? Share it! We’re all learning.&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;#devops #cicd #alibabacloud #kubernetes #webdev #beginners #programming #automation&lt;/p&gt;




&lt;p&gt;&lt;em&gt;P.S. No, I don’t work for Alibaba—I’m just a dev who hates manual deploys.&lt;/em&gt; 😅&lt;/p&gt;

</description>
      <category>cicd</category>
      <category>cloud</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
