【Vuejs】2023- Vue3 项目前端 CI/CD 体验

Vue
98
0
0
2024-09-03

1. 环境准备

➜  app-cicd node --version
v18.0.0
➜  app-cicd npm --version
9.6.6

2. 安装

2.1 初始化选项

项目初始化选择。

  app-cicd npm init vue@latest

Vue.js - The Progressive JavaScript Framework

 Project name:  app-cicd
 Add TypeScript?  No / Yes
 Add JSX Support?  No / Yes
 Add Vue Router for Single Page Application development?  No / Yes
 Add Pinia for state management?  No / Yes
 Add Vitest for Unit Testing?  No / Yes
 Add an End-to-End Testing Solution?  No
 Add ESLint for code quality?  No / Yes
 Add Prettier for code formatting?  No / Yes

Scaffolding project in /Users/UserName/GitLabProjects/app-cicd...

Done. Now run:

  cd app-cicd
  npm install
  npm run format
  npm run dev

2.2 项目运行

按照命令行指示 npm run dev

➜  app-cicd npm run dev

> app-cicd@0.0.0 dev
> vite

  VITE v4.3.5  ready in 1161 ms

  ➜  Local:   http://localhost:5173/
  ➜  Network: use --host to expose
  ➜  press h to show help
✘ [ERROR] Could not resolve "vue-demi"

    node_modules/pinia/dist/pinia.mjs:6:206:
      6 │ import { getCurrentInstance, inject, toRaw, watch, unref, markRaw, effectScope, ref, isVue2, isRef, isReactive, set, getCurrentScope, onScopeDispose, reactive, toRef, del, nextTick, computed, toRefs } from 'vue-demi';
        ╵                                                                                                                                                                                                               ~~~~~~~~~~

  You can mark the path "vue-demi" as external to exclude it from the bundle, which will remove this
  error.

出现以上错误修改,结合 vue-demi 配置说明[1] ,修改 package-lock.json,找到 vue-demi

"dependencies": {
  "@vue/devtools-api": "^6.5.0",
  "vue-demi": "latest" # “*” 改为 “latest”
},
"funding": {
  "url": "https://github.com/sponsors/posva"
},
"peerDependencies": {
  "@vue/composition-api": "^1.4.0",
  "typescript": ">=4.4.4",
  "vue": "^2.6.14 || ^3.2.0"
},
"peerDependenciesMeta": {
  "@vue/composition-api": {
    "optional": true
  },
  "typescript": {
    "optional": true
  }
},
# 新增配置
"devDependencies": {
  "vue": "^3.0.0"
}

npm run dev ,成功!

➜  app-cicd npm run dev

> app-cicd@0.0.0 dev
> vite
VITE v4.3.5  ready in 296 ms

  ➜  Local:   http://localhost:5173/
  ➜  Network: use --host to expose
  ➜  press h to show help

浏览器访问 http://localhost:5173/[2]

Untitled.png

3. 项目构建

因为要测试我们自己的网页,小小 build 一下。

➜  app-cicd npm run build

> app-cicd@0.0.0 build
> run-p type-check build-only

> app-cicd@0.0.0 build-only
> vite build

> app-cicd@0.0.0 type-check
> vue-tsc --noEmit -p tsconfig.vitest.json --composite false

vite v4.3.5 building for production...
✓ 39 modules transformed.
dist/assets/logo-277e0e97.svg        0.28 kB │ gzip:  0.20 kB
dist/index.html                      0.42 kB │ gzip:  0.28 kB
dist/assets/AboutView-4d995ba2.css   0.09 kB │ gzip:  0.10 kB
dist/assets/index-4646de73.css       3.14 kB │ gzip:  1.08 kB
dist/assets/AboutView-b87b23ac.js    0.22 kB │ gzip:  0.20 kB
dist/assets/index-f6d09a3d.js       76.05 kB │ gzip: 30.49 kB
✓ built in 586ms
node_modules/@types/node/fs/promises.d.ts:199:52 - error TS1010: 

199          * device. The specific implementation is o

Found 1 error in node_modules/@types/node/fs/promises.d.ts:199

ERROR: "type-check" exited with 2.

出现以上错误,按照提示,仔细查看发现注释符号未闭合。npm install --save @types/node 一下,再次 npm run build ,成功构建。

➜  app-cicd npm install --save @types/node
npm notice Beginning October 4, 2021, all connections to the npm registry - including for package installation - must use TLS 1.2 or higher. You are currently using plaintext http to connect. Please visit the GitHub blog for more information: https://github.blog/2021-08-23-npm-registry-deprecating-tls-1-0-tls-1-1/
npm notice Beginning October 4, 2021, all connections to the npm registry - including for package installation - must use TLS 1.2 or higher. You are currently using plaintext http to connect. Please visit the GitHub blog for more information: https://github.blog/2021-08-23-npm-registry-deprecating-tls-1-0-tls-1-1/

changed 1 package in 8s

111 packages are looking for funding
  run `npm fund` for details
➜  app-cicd npm run build

> app-cicd@0.0.0 build
> run-p type-check build-only

> app-cicd@0.0.0 build-only
> vite build

> app-cicd@0.0.0 type-check
> vue-tsc --noEmit -p tsconfig.vitest.json --composite false

vite v4.3.5 building for production...
✓ 39 modules transformed.
dist/assets/logo-277e0e97.svg        0.28 kB │ gzip:  0.20 kB
dist/index.html                      0.42 kB │ gzip:  0.28 kB
dist/assets/AboutView-4d995ba2.css   0.09 kB │ gzip:  0.10 kB
dist/assets/index-4646de73.css       3.14 kB │ gzip:  1.08 kB
dist/assets/AboutView-b87b23ac.js    0.22 kB │ gzip:  0.20 kB
dist/assets/index-f6d09a3d.js       76.05 kB │ gzip: 30.49 kB
✓ built in 578ms

4. 创建 Jenkinsfile

创建 Jenkinsfile 用于 Jenkins 流水线构建。

pipeline {
    agent any
    
    options {
        buildDiscarder(logRotator(numToKeepStr: '5'))
    }

    stages {
      stage('Init') {
            steps {
              script {
                checkout scmGit(
                  branches: [[name: 'master']],
                  userRemoteConfigs: [[credentialsId: 'ab8e0508-a9f3-4ff3-aa18-0afc27a4df08',url: 'http://192.168.2.159:9080/web/app-cicd.git']])
                sh 'pwd && ls -l'
              }
                // 
            }
        }
        
        stage('Build') {
            steps {
              script {
                echo "Build project"
                sh 'node --version && npm --version'
                sh 'npm install'
                sh 'npm run build'
                sh 'ls -l'
              }
            }
        }

        stage('Test') {
            steps {
              script {
                echo "Test project"
              }
            }
        }

        stage('Deploy') { 
            steps {
              script {
                echo "Deploy project"
                if(fileExists('/Users/username/apps/app-cicd')) {
                  sh 'rm -rf /Users/username/apps/app-cicd'
                }
                echo "Deploy project inited"
                sh 'mv dist/ /Users/username/apps/app-cicd'
                sh 'ls /Users/username/apps/app-cicd'
                echo "Deploy project finished"
              }
            }
        }
    }
}

整体目录结构。

➜  app-cicd git:(master) ls -l
total 368
-rw-r--r--    1 paxtonx  staff    1432  5 13 11:26 Jenkinsfile
-rw-r--r--    1 paxtonx  staff    1763  5 12 23:56 README.md
drwxr-xr-x    5 paxtonx  staff     160  5 13 02:39 dist
-rw-r--r--    1 paxtonx  staff      38  5 12 23:56 env.d.ts
-rw-r--r--    1 paxtonx  staff     331  5 12 23:56 index.html
drwxr-xr-x  335 paxtonx  staff   10720  5 13 00:44 node_modules
-rw-r--r--    1 paxtonx  staff  140945  5 13 02:39 package-lock.json
-rw-r--r--    1 paxtonx  staff    1196  5 13 02:39 package.json
drwxr-xr-x    3 paxtonx  staff      96  5 12 23:56 public
drwxr-xr-x    9 paxtonx  staff     288  5 12 23:56 src
-rw-r--r--    1 paxtonx  staff     281  5 13 02:16 tsconfig.app.json
-rw-r--r--    1 paxtonx  staff     332  5 13 02:37 tsconfig.json
-rw-r--r--    1 paxtonx  staff     241  5 13 02:15 tsconfig.node.json
-rw-r--r--    1 paxtonx  staff     153  5 13 02:16 tsconfig.vitest.json
-rw-r--r--    1 paxtonx  staff     355  5 13 02:18 vite.config.ts
-rw-r--r--    1 paxtonx  staff     400  5 12 23:56 vitest.config.ts

5. 结语

将此项目推送到远程 GitLab 仓库中,备用。这里介绍了 Vue3 的一些基本使用,如项目安装、构建,然后介绍了 Jenkinsfile 的编写。时间关系呢,过程较为省略。毕竟大佬说 "Talk is cheap. Show me the code." - Linus Torvalds

6. 参考资料

www.jenkins.io/zh/doc/book…[3]

plugins.jenkins.io/git/#plugin…[4]

plugins.jenkins.io/nodejs/[5]