先设置jenkins nodejs

项目根目录新建目录deploy

创建demo.yaml

命名空间,私有仓库地址,对外暴露端口需要改成自己的

kind: Deployment
apiVersion: apps/v1
metadata:
  labels:
    app: demo
    component: demo
    tier: backend
  name: demo
  namespace: 命名空间
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  selector:
    matchLabels:
      app: demo
      component: demo
      tier: backend
  template:
    metadata:
      labels:
        app: demo
        component: demo
        tier: backend
    spec:
      imagePullSecrets:
        - name: 私有仓库配置id
      containers:
        - name: demo
          image: $REGISTRY/$ALIYUNHUB_NAMESPACE/$PROJECT_NAME:$PROJECT_VERSION-$BRANCH_NAME-$BUILD_NUMBER
          imagePullPolicy: Always
          ports:
            - containerPort: 80
              protocol: TCP
          resources:
            limits:
              cpu: 200m
              memory: 500Mi
            requests:
              cpu: 100m
              memory: 100Mi
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      terminationGracePeriodSeconds: 30


---

apiVersion: v1
kind: Service
metadata:
  labels:
    app: demo
    component: demo
  name: demo
  namespace: 命名空间
spec:
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: 80
      nodePort: 对外暴露端口
  selector:
    app: demo
    component: demo
    tier: backend
  sessionAffinity: None
  type: NodePort

在vue项目根目录创建Jenkinsfile

pipeline {
  agent {
    node {
      label 'nodejs'
    }
  }
  parameters {
      string(name:'PROJECT_VERSION',defaultValue: '版本',description:'')
      choice(name:'PROJECT_NAME', choices: ['项目名称'],description:'运行项目')

  }
  environment {
      DOCKER_CREDENTIAL_ID = 'dockerlog(docker私有厂库配置id)'
      GITEE_CREDENTIAL_ID = 'giteeid(git账户)'
      KUBECONFIG_CREDENTIAL_ID = 'kubeconfig1'
      REGISTRY = '私有仓库地址'
      ALIYUNHUB_NAMESPACE = '私有仓库命名空间'
      GITEE_ACCOUNT = 'git账户'
      BRANCH_NAME = 'master(分支)'
  }
  stages {
     stage('拉取代码') {
      steps {
        git(credentialsId: 'giteeid', url: '代码仓库地址', changelog: true, poll: false)
      }
    }
    stage('get dependencies') {
      steps {
        container('nodejs') {
          sh 'npm install -g cnpm --registry=https://registry.npm.taobao.org'
          sh 'cnpm i --no-package-lock'
        }

      }
    }
    stage('build & push snapshot') {
      steps {
        container('nodejs') {
          sh 'npm run build'
          sh 'docker build -f Dockerfile -t $REGISTRY/$ALIYUNHUB_NAMESPACE/$PROJECT_NAME:$PROJECT_VERSION-$BRANCH_NAME-$BUILD_NUMBER .'
          withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$DOCKER_CREDENTIAL_ID" ,)]) {
           sh 'echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin'
            sh 'docker push  $REGISTRY/$ALIYUNHUB_NAMESPACE/$PROJECT_NAME:$PROJECT_VERSION-$BRANCH_NAME-$BUILD_NUMBER'
          }
        }

      }
    }

    stage('deploy to production') {
      steps {
      kubernetesDeploy(configs: "deploy/**", enableConfigSubstitution: true, kubeconfigId: "$KUBECONFIG_CREDENTIAL_ID")
      }
    }

   
  }

}

创建Dockerfile

FROM gatsbyjs/gatsby:latest
ADD dist/ /pub

创建流水线配置凭证代码仓库-扫描远程分支后,第一次运行的时候先暂停,然后在点击运行选择项目

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐