instruction: Show me how to configure circleci for CI/CD automation
output: Joy Joy scales online wedding planning with CircleCI The event-planning service scales efficiently with rapid deployments The challenge The pent-up demand for weddings following the pandemic lockdown era is driving new users and plenty of traffic to Joy , the online wedding planning platform. Usage has tripled in 2022, while the development team has quintupled in size. “Our biggest challenge is scaling,” says Madhur Joshi, vice president of engineering for Joy. “We’ve grown quite a bit over the past year.” Joy was using Jenkins for CI/CD but it didn’t offer the hands-off maintenance that Joshi and other engineers needed in order to spend more time on managing growth and developing new Joy features. “We have about 30 to 40 engineers,” Joshi says. “If they end up having to manage all of the code repositories they wouldn’t have time to do anything else.” The solution Since Joy replaced Jenkins with CircleCI, the hands-on maintenance time for CI/CD has plummeted. “The infrastructure for CI/CD is fully handled with CircleCI,” Joshi says. “That wouldn’t have been possible with Jenkins. CircleCI scales up and down as we need it. We never have to spend time updating it.” There were clear high-level signs that CircleCI was supporting the surge in users and activity at Joy. Engineers don’t track builds and deployments, preferring instead to use customer-focused KPIs such as growth, retention, and revenue. After the Joy website was completely revamped using CircleCI, the company tracked a 30% increase in traffic and a 20% increase in sign-ups via the Joy mobile app. “Our website project was able to move very quickly in large part because of CircleCI,” Joshi says. “We can get new features out to customers very quickly.” “ CircleCI is integral to our entire development process.” Madhur Joshi | Vice President of Engineering at Joy How CircleCI powers Joy’s business “Speed and velocity are very important to startup survival,” Joshi says. The velocity improvements with CircleCI are evident in the number of deployments the engineering team can manage: more than 10 per day in multiple clusters and configurations. Updates and changes take effect quickly, which helps improve customer satisfaction. “When we see an uptick in photos and videos being added to the site, we can do tweaks to the media service,” Joshi says. “That change needs to be deployed across all clusters five to 10 times a day. We do all of that through CircleCI and it’s a breeze.” CircleCI also helps Joy keep up with product demand as the business scales. For example, Joy uses CircleCI to perform Kubernetes deployments for backend microservices. In addition, CircleCI offers the option to build the iOS version of the Joy mobile app. “We’re able to compete against incumbents because we can move faster, adapt quickly to change, and be very nimble,” Joshi says. “If you can’t get code out quickly and with confidence, then you won’t be successful. CircleCI is integral to our entire development process.” Benefits of using CircleCI: Hands-off maintenance Increased user engagement and sign-ups More frequent deployments About Joy Joy is a wedding company that gives couples a smarter way to plan their big day. Using Joy, couples can create a beautifully-designed wedding website and mobile app, build their All-in-One Registry, manage guest lists and RSVPs, send online or printed Save the Dates, invitations, and eCards, create a shared virtual wedding album and virtual guest book, and more. Industry Software Previous CI/CD Jenkins Company size SMB Region North America Languages JavaScript TypeScript Node.js VCS provider GitHub
  
  ## Kubernetes Deployment Example
  
  ```yaml
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    name: my-app
    labels:
      app: my-app
  spec:
    replicas: 3
    selector:
      matchLabels:
        app: my-app
    template:
      metadata:
        labels:
          app: my-app
      spec:
        containers:
        - name: my-app
          image: my-app:latest
          ports:
          - containerPort: 3000
          env:
          - name: NODE_ENV
            value: "production"
          resources:
            requests:
              memory: "128Mi"
              cpu: "100m"
            limits:
              memory: "256Mi"
              cpu: "200m"
          livenessProbe:
            httpGet:
              path: /health
              port: 3000
            initialDelaySeconds: 30
            periodSeconds: 10
          readinessProbe:
            httpGet:
              path: /ready
              port: 3000
            initialDelaySeconds: 5
            periodSeconds: 5
  ---
  apiVersion: v1
  kind: Service
  metadata:
    name: my-app-service
  spec:
    selector:
      app: my-app
    ports:
    - protocol: TCP
      port: 80
      targetPort: 3000
    type: ClusterIP
  ```