Jenkinsfile配置记录

pipeline {
  agent {
    node {
      label 'nodejs'
    }
  }

    parameters {
        string(name:'APP_NAME', defaultValue: 'datashow-web', description:'服务名称') //需要修改,如oauth2-server
        string(name:'APP_PORT', defaultValue: '80', description:'服务端口号') //需要修改,服务端口号
        string(name:'HEALTH_PATH', defaultValue: '/', description:'健康检查接口') //需要修改,健康检查接口
        string(name:'INITIALDELAYSECONDS',defaultValue: '3',description:'服务正常启动时间') //需要修改,服务正常启动时间
        choice(name:'NAMESPACE', choices: ['sjj-test'], description:'项目空间名') //需要修改, 项目空间名
        choice(name:'BUILD_TYPE', choices: ['sso','datashow'],description:'打包命令')
    }

    environment {
        // 默认配置,无需修改
        DOCKER_CREDENTIAL_ID = 'harbor-id'
        GITLAB_CREDENTIAL_ID = 'gitlab-id'
        SONAR_CREDENTIAL_ID = 'sonar-token'
        KUBECONFIG_PROD_CREDENTIAL_ID = "kubeconfig-prod"
        HARBOR_REGISTRY = '192.168.0.30:30002'
    }

    stages {
        stage ('拉取代码') {
            steps {
                checkout(scm)
            }
        }

        stage ('初始化环境变量') {
            steps {
                script {
                    env.IMAGE_URL = "$HARBOR_REGISTRY/$NAMESPACE/$APP_NAME:$BRANCH_NAME-$BUILD_NUMBER"
                    println(params)
                  }
                container ('nodejs') {
                    sh 'printenv'
                }
            }
        }

        stage ('前端构建') {
            steps {
                container ('nodejs') {
                  sh '''
                    source /etc/profile
                    rm -rf node_modules dist
                    nvm install 14.20.0
                    nvm use 14.20.0
                    npm install --registry=http://192.168.0.66:4873
                    sso_admin="sso"
                    if [ $BUILD_TYPE != $sso_admin ] ; then
                    npm run build
                    else
                    npm run build:sso
                    fi

                  '''
                }
            }
        }

        stage ('构建镜像 & 推送镜像') {
            steps {
                container ('nodejs') {
                    withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$DOCKER_CREDENTIAL_ID" ,)]) {
                        sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_REGISTRY -u "$DOCKER_USERNAME" --password-stdin'
                        sh 'docker build -t $IMAGE_URL -f Dockerfile .'
                        sh 'docker push $IMAGE_URL'
                    }
                }
            }
        }

        stage('开发环境部署') {
          when{
               anyOf { branch 'dev' }
          }
          steps {
                container ('nodejs') {
                    sh 'envsubst < deploy/deployment.yaml | kubectl apply -f -'
                }
          }
        }

        stage('测试环境部署') {
            when{
                  anyOf { branch 'test' }
            }
            steps {
                container ('nodejs') {
                    sh 'envsubst < deploy/deployment.yaml | kubectl apply -f -'
                }
            }
          }




        stage('生产环境部署') {
          when{
            allOf { branch 'release' }
          }
          steps {
            // input(id: 'deploy-to-production', message: 'deploy to production?', submitter: 'fusonghua')
            container("nodejs") {
              withCredentials([
                  kubeconfigFile(
                  credentialsId: env.KUBECONFIG_PROD_CREDENTIAL_ID,
                  variable: 'KUBECONFIG')
                  ]) {
                sh 'cat $KUBECONFIG && envsubst < deploy/deployment.yaml | kubectl apply -f -'
              }
            }
          }
        }

    }
}

BUILD_TYPE  需要在parameters里面配置 

Dockerfile文件配置

FROM nginx:1.20.0-alpine
COPY dist /usr/share/nginx/html/datashow-web
EXPOSE 80

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: $APP_NAME
  namespace: $NAMESPACE
  labels:
    app: $APP_NAME
    namespace: $NAMESPACE
    branch: $BRANCH_NAME
    group: $NAMESPACE-$BRANCH_NAME
  annotations:
    kubesphere.io/description: 大屏系统-前端
spec:
  replicas: 1
  selector:
    matchLabels:
      app: $APP_NAME

  template:
    metadata:
      labels:
        app: $APP_NAME
        namespace: $NAMESPACE
        branch: $BRANCH_NAME
        group: $NAMESPACE-$BRANCH_NAME
    spec:
      volumes:
        - name: host-time
          hostPath:
            path: /etc/localtime
            type: ''
      containers:
        - name: $APP_NAME
          image: $IMAGE_URL
          imagePullPolicy: IfNotPresent
          ports:
            - name: tcp-$APP_PORT
              containerPort: $APP_PORT
              protocol: TCP
          resources:
            requests:
              memory: 5Mi
              cpu: 5m
            limits:
              memory: 512Mi
              cpu: 1000m
          livenessProbe:
            httpGet:
              path: $HEALTH_PATH
              port: $APP_PORT
              scheme: HTTP
            initialDelaySeconds: $INITIALDELAYSECONDS       # 容器启动后第一次执行探测是需要等待多少秒
            periodSeconds: 15                               # 执行探测的频率
            timeoutSeconds: 2                               # 探测超时时间
          readinessProbe:
            httpGet:
              path: $HEALTH_PATH
              port: $APP_PORT
              scheme: HTTP
            initialDelaySeconds: $INITIALDELAYSECONDS
            periodSeconds: 15
            timeoutSeconds: 2
          volumeMounts:
            - name: host-time
              readOnly: true
              mountPath: /etc/localtime
      tolerations:
        - key: group
          operator: Equal
          value: $NAMESPACE-$BRANCH_NAME
      imagePullSecrets:
        - name: harbor

---
kind: Service
apiVersion: v1
metadata:
  name: $APP_NAME
  namespace: $NAMESPACE
  labels:
    app: $APP_NAME
    namespace: $NAMESPACE
    branch: $BRANCH_NAME
    group: $NAMESPACE-$BRANCH_NAME
  annotations:
    kubesphere.io/description: 大屏系统-前端
spec:
  ports:
    - name: tcp-$APP_PORT
      protocol: TCP
      port: $APP_PORT
      targetPort: $APP_PORT
  selector:
    app: $APP_NAME
  type: ClusterIP

k8s部署前台项目记录一下,仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值