首页 > 编程语言 >node前端的流水线pipline案例

node前端的流水线pipline案例

时间:2023-08-24 09:35:04浏览次数:54  
标签:node en name IMAGE value TAG env 流水线 pipline

pipeline {
  agent {
    kubernetes {
      cloud 'kubernetes-dev'
      slaveConnectTimeout 1200
      workspaceVolume hostPathWorkspaceVolume(hostPath: "/opt/jenkins/workspace", readOnly: false)
      yaml '''
apiVersion: v1
kind: Pod
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: node-role.kubernetes.io/edge
            operator: DoesNotExist
          - key: build
            operator: In
            values:
            - "true"
  tolerations:
  - key: "groups"
    operator: "Equal"
    effect: "NoExecute"
    value: "vbaas"
  containers:
  - name: jnlp
    image: \'10.1.40.69/citools/jnlp:alpine\'
    imagePullPolicy: IfNotPresent
    args: [\'$(JENKINS_SECRET)\', \'$(JENKINS_NAME)\']
    volumeMounts:
    - mountPath: "/etc/localtime"
      name: "localtime"
      readOnly: false
  - name: "build"
    image: "10.1.40.69/citools/node:16.20"
    imagePullPolicy: "IfNotPresent"
    command:
    - "cat"
    env:
    - name: "LANGUAGE"
      value: "en_US:en"
    - name: "LC_ALL"
      value: "en_US.UTF-8"
    - name: "LANG"
      value: "en_US.UTF-8"
    tty: true
    volumeMounts:
    - mountPath: "/etc/localtime"
      name: "localtime"
  - name: "sonar-scanner"
    image: "10.1.40.69/citools/sonar-scanner-cli:4.7"
    imagePullPolicy: "IfNotPresent"
    command:
    - "cat"
    env:
    - name: "LANGUAGE"
      value: "en_US:en"
    - name: "LC_ALL"
      value: "en_US.UTF-8"
    - name: "LANG"
      value: "en_US.UTF-8"
    - name: "SONAR_HOST_URL"
      value: "http://10.1.40.51:9000"
    tty: true
    volumeMounts:
    - mountPath: "/etc/localtime"
      name: "localtime"
  - name: "kubectl"
    image: "10.1.40.69/citools/kubectl:self-1.17"
    imagePullPolicy: "IfNotPresent"
    command:
    - "cat"
    env:
    - name: "LANGUAGE"
      value: "en_US:en"
    - name: "LC_ALL"
      value: "en_US.UTF-8"
    - name: "LANG"
      value: "en_US.UTF-8"
    tty: true
    volumeMounts:
    - mountPath: "/etc/localtime"
      name: "localtime"
      readOnly: false
  - name: "docker"
    image: "10.1.40.69/citools/docker:19.03.9-git"
    imagePullPolicy: "IfNotPresent"
    command:
    - "cat"
    env:
    - name: "LANGUAGE"
      value: "en_US:en"
    - name: "LC_ALL"
      value: "en_US.UTF-8"
    - name: "LANG"
      value: "en_US.UTF-8"
    tty: true
    volumeMounts:
    - mountPath: "/etc/localtime"
      name: "localtime"
      readOnly: false
    - mountPath: "/var/run/docker.sock"
      name: "dockersock"
      readOnly: false
  - name: "alpine-curl"
    image: "10.1.40.69/publics/alpine-curl:latest"
    imagePullPolicy: "IfNotPresent"
    command:
    - "/bin/sh"
    - "-c"
    - "sleep 1200"
    env:
    - name: "LANGUAGE"
      value: "en_US:en"
    - name: "LC_ALL"
      value: "en_US.UTF-8"
    - name: "LANG"
      value: "en_US.UTF-8"
    volumeMounts:
    - mountPath: "/etc/localtime"
      name: "localtime"
      readOnly: true
  restartPolicy: "Never"
  nodeSelector:
    build: "true"
  securityContext: {}
  volumes:
  - hostPath:
      path: "/var/run/docker.sock"
    name: "dockersock"
  - hostPath:
      path: "/usr/share/zoneinfo/Asia/Shanghai"
    name: "localtime"
'''
    }
  }

  environment {
    TAG = ''
    COMMIT_ID = ''
    HARBOR_ADDRESS = '10.1.40.69'
    HARBOR_USER = credentials('HARBOR_ACCOUNT')
    REGISTRY_DIR = 'dmp'
    IMAGE_NAME = 'dmp-front'
    NAMESPACE = 'dmp-dev'
    MY_KUBECONFIG = credentials('kubernetes-dev')
    REPO = 'ssh://[email protected]:22022/dmpgroup/dmp-front.git'
    REPO_HTTP = 'http://gitlab.vonechain.com:9002/dmpgroup/dmp-front.git'
    GIT_AUTH = 'gitlab-key'
    PROJECT_NAME = 'dmp-front'
    SOURCES_DIR = '.'
    LANGUAGE = 'vue'
  }
  
  parameters {
    gitParameter(
      branch: '',
      branchFilter: 'origin/(.*)', 
      defaultValue: 'dev', 
      description: 'Branch for build and deploy', 
      name: 'BRANCH', 
      quickFilterEnabled: false, 
      selectedValue: 'NONE', 
      sortMode: 'NONE', 
      tagFilter: '*', 
      type: 'PT_BRANCH'
    )
    imageTag(
      name: "IMAGE_TAG", 
      description: '需要提测的镜像版本,构建发版开发环境时请忽略该参数',
      image: "dmp/dmp-front", 
      filter: '.*', 
      defaultTag: '',
      registry: 'http://10.1.40.69', 
      credentialId: 'HARBOR_ACCOUNT', 
      tagOrder: 'DSC_VERSION'
    )
    choice(
      name: 'ACTION',
      description: '执行动作: \nbuild: 只构建镜像,不发版\ndeploy: 构建镜像并发布更新到开发环境\nsummit_the_test: 提交测试申请',
      choices: ['deploy', 'build', 'summit_the_test']
    )
    booleanParam(
      name:'INSTALL',
      defaultValue: false, 
      description: '是否安装依赖'
    )
    booleanParam(
      name:'SCANNER',
      defaultValue: false, 
      description: '是否执行代码扫描'
    )
    text(
      defaultValue: '''此次提测需要注意以下事项:''', 
      description: '提测信息说明', 
      name: 'COMMENT'
    )
  }

  stages {
    stage('Pulling Code') {
      when {
        expression { params.ACTION ==~ /(build|deploy)/ }
      }
      parallel {
        stage('Pulling Code by Jenkins') {
          when {
            expression {
              env.gitlabBranch == null
            }
          }
          steps {
            git(
              url: "${env.REPO}", 
              changelog: true, 
              poll: true, 
              branch: "${BRANCH}", 
              credentialsId: "${env.GIT_AUTH}"
            )
            script {
              COMMIT_ID = sh(
                returnStdout: true, 
                script: "git log -n 1 --pretty=format:'%h'"
              ).trim()
              TAG = BUILD_TAG + '-' + COMMIT_ID
              println "Current branch is ${BRANCH}, Commit ID is ${COMMIT_ID}, Image TAG is ${TAG}"
            }
          }
        }

        stage('Pulling Code by trigger') {
          when {
            expression {
              env.gitlabBranch != null
            }
          }
          steps {
            git(
              url: "${env.REPO}", 
              branch: env.gitlabBranch, 
              changelog: true, 
              poll: true, 
              credentialsId: "${env.GIT_AUTH}"
            )
            script {
              COMMIT_ID = sh(
                returnStdout: true,
                script: "git log -n 1 --pretty=format:'%h'"
              ).trim()
              TAG = BUILD_TAG + '-' + COMMIT_ID
              println "Current branch is ${env.gitlabBranch}, Commit ID is ${COMMIT_ID}, Image TAG is ${TAG}"
            }
          }
        }

      }
    }

    stage('Building') {
      when {
        expression { params.ACTION ==~ /(build|deploy)/ }
      }
      steps {
        container(name: 'build') {
          script {
            if (params.INSTALL) {
              sh """
                npm config set registry https://registry.npm.taobao.org
                npm install
              """
            }
            sh """
              npm run build
            """
          }
        }
      }
    }

    stage('SonarQube analysis') {
      environment {
        SONAR_TOKEN = credentials('sonar-token')
      }
      when {
        expression { return params.SCANNER }
      }

      steps {
        container("sonar-scanner") {
          sh '''
            sonar-scanner \
              -Dsonar.login=${SONAR_TOKEN} \
              -Dsonar.projectKey=${PROJECT_NAME} \
              -Dsonar.projectName=${PROJECT_NAME} \
              -Dsonar.sourceEncoding=UTF-8 \
              -Dsonar.sources=${SOURCES_DIR} \
          '''
        }
      }
    }

    stage('Docker build for creating image') {
      when {
        expression { params.ACTION ==~ /(build|deploy)/ }
      }
      steps {
        container(name: 'docker') {
          sh """
            echo ${HARBOR_USER_USR} ${HARBOR_USER_PSW} ${TAG}
            docker build -t ${HARBOR_ADDRESS}/${REGISTRY_DIR}/${IMAGE_NAME}:${TAG} .
            docker login -u ${HARBOR_USER_USR} -p ${HARBOR_USER_PSW} ${HARBOR_ADDRESS}
            docker push ${HARBOR_ADDRESS}/${REGISTRY_DIR}/${IMAGE_NAME}:${TAG}
          """
        }
      }
      post {
        always {
          container(name: 'docker') {
            sh """
              echo "清理编译文件"
              rm -rf ./dist
            """
        }
        }
      }
    }

    stage('Deploying to K8s') {
      when {
        expression { params.ACTION == 'deploy' }
      }
      steps {
        container(name: 'kubectl') {
          sh """
            /usr/local/bin/kubectl --kubeconfig ${MY_KUBECONFIG} \
              set image deploy -l \
              app=${IMAGE_NAME} \
              ${IMAGE_NAME}=${HARBOR_ADDRESS}/${REGISTRY_DIR}/${IMAGE_NAME}:${TAG} \
              -n $NAMESPACE --record
            /usr/local/bin/kubectl --kubeconfig=${MY_KUBECONFIG} \
              get pod -l app=${IMAGE_NAME} \
              -n ${NAMESPACE} -w
          """
        }
      }
    }

    stage('提交到测试') {
      when {
        expression { params.ACTION == 'summit_the_test' }
      }

      steps {
        container(name: 'alpine-curl') {
          wrap([$class: 'BuildUser']) {
            script {
              BUILD_USER = "${env.BUILD_USER}"
              IMAGE_TAG = "${params.IMAGE_TAG}"
              BUILD_TIMESTAMP = "${env.BUILD_TIMESTAMP}"
              sh """
                echo "发送提测消息到企业微信."
                curl 'https://qyapi.weixin.qq.xxxxnd?key=e4c8b75f-7c71-4916-a932-db465bc80c1b' -H 'Content-Type: application/json' -d '
                {
                  "msgtype": "markdown",
                  "markdown": {
                    "content": "`项目 <font color=\'info\'>${IMAGE_NAME}</font> 已经提测,请相关同事注意(该信息为调试,请忽略!!)。`\n> 
                               > 提测项目名称: <font color=\'info\'>${IMAGE_NAME}</font>
                               > 提测代码仓库: [${IMAGE_NAME}](${env.REPO_HTTP})
                               > 提测代码分支: <font color=\'warning\'>${BRANCH}</font>
                               > 提测镜像版本: ${IMAGE_TAG}
                               > 提测镜像标签: <font color=\'warning\'>${IMAGE_TAG_TAG}</font>
                               > 提测镜像名称: <font color=\'warning\'>${IMAGE_TAG_IMAGE}</font>
                               > 提测申请人: <font color=\'info\'>${BUILD_USER}</font>
                               > 提测申请时间: <font color=\'comment\'>${BUILD_TIMESTAMP}</font>
                               > 测试环境部署: 确保nacos配置已经同步,请点击:[发布测试环境](http://10.1.30.91:8080/)
                               > 提测注释: ${params.COMMENT}"
                  }
                }'
              """
            }
          }
        }
      }
    }
  }
}

标签:node,en,name,IMAGE,value,TAG,env,流水线,pipline
From: https://www.cnblogs.com/zoujiaojiao/p/17653276.html

相关文章

  • jdk后端的流水线pipline案例
    pipeline{agent{kubernetes{cloud'kubernetes-dev'slaveConnectTimeout1200workspaceVolumehostPathWorkspaceVolume(hostPath:"/opt/jenkins/workspace",readOnly:false)yaml'''apiVersi......
  • Node.Js 13.4.18 Docker 部署后无法访问
    将项目Next.js升级后,通过Docker部署无法访问到服务,通过dockerlogsid检查日志,发现没有任何反应,甚至一个访问请求都没看到。一开始怀疑是打包的问题,将Docker容器中的服务文件全部拉下来,在本地跑..诶嘿~正常运行...排除打包问题检查启动日志:readystartedserveron......
  • nodejs 使用exec ,execFile,spawn运行子进程区别,以及如何正确的的关闭子进程
    exec,execFile,spawn都是运行一个子进程,但是在不同的操作系统上用法和表现有很大差异。linux/unixexec运行子进程需要创建一个终端环境(命令行窗口),然后在其中运行命令,execFile则不需要,因此在linux/unix上,execFile的效率更高。windows在windows平台上,运行脚本程序(如批处理.bat)必须有......
  • 无法将“node.exe”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
    node:无法将“node”项识别为cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。今天准备新建项目,发现node没了,这怎么行?问题描述:vscode提示 无法将“node.exe”项识别为cmdlet、函数、脚本文件或可运行程序的名称。......
  • Node.js安装
    Node.js安装原文章一、安装环境本教程演示的环境:系统:win1164位node.js下载地址:http://nodejs.cn/node.js版本:长期支持版本(本教程基于16.15.0)点击选中图标下载到电脑本地即可。二、安装步骤1、双击安装包,一直点击下一步。2、点击change按钮,更换到自己的指定安装位......
  • Nodejs Function遇见WorkerProcessExitException : node exited with code -107374079
    问题描述NodejsFunction,使用BlobTrigger用于处理上传到StorageBlob的文件,但是最近发现偶发报错:Exceptionwhileexecutingfunction:Functions.AzureBlobTrigger--->Microsoft.Azure.WebJobs.Script.Workers.WorkerProcessExitException:nodeexitedwithcode-1073740791......
  • 【Azure Function App】Nodejs Function遇见WorkerProcessExitException : node exite
    问题描述NodejsFunction,使用BlobTrigger用于处理上传到StorageBlob的文件,但是最近发现偶发报错:Exceptionwhileexecutingfunction:Functions.AzureBlobTrigger--->Microsoft.Azure.WebJobs.Script.Workers.WorkerProcessExitException:nodeexitedwithcode-10737407......
  • nvm 管理 Node.js 版本
    通过NVM安装、管理Node.js版本(Windows)介绍NVM可以让我们通过指令安装指定版本,并且可以切换当前Node.js版本,不用花时间在解决升版和降版。安装链接:https://github.com/coreybutler/nvm-windows选择最新版nvm-setup.exe下载下载下载完成后安装同意协议......
  • windows上多版本nodejs安装和切换
    安装nvm下载地址:https://github.com/coreybutler/nvm-windows/releases下载exe安装即可。查看nvm版本: 查看已安装的nodejs版本: 安装Nodejs,比如安装版本v14.21.3执行命令:nvminstall14.21.3然后输入:nvmuse14.21.3指定当前使用的nodejs版本 ......
  • Node.js:实现遍历文件夹下所有文件
    Node.js:实现遍历文件夹代码如下constfs=require('fs')constpath=require('path')functiontraverseFolder(folderPath){//读取文件夹列表constfiles=fs.readdirSync(folderPath)//遍历文件夹列表files.forEach(function(fileName){//拼接当......