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]