Compare commits
7 Commits
2d53123670
..
v0.0.1
| Author | SHA1 | Date | |
|---|---|---|---|
| a2d02607a7 | |||
| cf7b3ea6ac | |||
| f1529c70b9 | |||
| 2a9e6066c7 | |||
| ecc39745d7 | |||
| 1d841fc1dd | |||
| 416eb14d4e |
@@ -0,0 +1,102 @@
|
|||||||
|
pipeline {
|
||||||
|
agent any
|
||||||
|
|
||||||
|
parameters {
|
||||||
|
gitParameter(
|
||||||
|
name: 'RELEASE_TAG',
|
||||||
|
type: 'PT_TAG',
|
||||||
|
tagFilter: 'v*',
|
||||||
|
branchFilter: 'origin/(.*)',
|
||||||
|
sortMode: 'DESCENDING_SMART',
|
||||||
|
selectedValue: 'TOP',
|
||||||
|
useRepository: 'http://127.0.0.1:3001/my-project/my-resume.git',
|
||||||
|
quickFilterEnabled: false,
|
||||||
|
listSize: '10',
|
||||||
|
requiredParameter: true,
|
||||||
|
description: '请选择要部署到生产环境的 Git Tag。列表自动来自当前项目仓库,生产只能从 Tag 发布。'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
environment {
|
||||||
|
CI = 'true'
|
||||||
|
}
|
||||||
|
|
||||||
|
options {
|
||||||
|
timestamps()
|
||||||
|
disableConcurrentBuilds()
|
||||||
|
buildDiscarder(logRotator(numToKeepStr: '10'))
|
||||||
|
}
|
||||||
|
|
||||||
|
stages {
|
||||||
|
stage('Checkout Tag') {
|
||||||
|
steps {
|
||||||
|
checkout([
|
||||||
|
$class: 'GitSCM',
|
||||||
|
branches: [[name: '*/master']],
|
||||||
|
userRemoteConfigs: [[
|
||||||
|
url: 'http://127.0.0.1:3001/my-project/my-resume.git'
|
||||||
|
]]
|
||||||
|
])
|
||||||
|
sh '''
|
||||||
|
set -eu
|
||||||
|
test -n "$RELEASE_TAG"
|
||||||
|
NORMALIZED_RELEASE_TAG="$(printf '%s' "$RELEASE_TAG" | sed 's/\\^{}$//')"
|
||||||
|
case "$NORMALIZED_RELEASE_TAG" in
|
||||||
|
v[0-9A-Za-z._-]*) ;;
|
||||||
|
*) echo "Invalid release tag: $NORMALIZED_RELEASE_TAG"; exit 2 ;;
|
||||||
|
esac
|
||||||
|
if ! git ls-remote --exit-code --tags origin "refs/tags/$NORMALIZED_RELEASE_TAG" >/dev/null; then
|
||||||
|
echo "Release tag does not exist in repository: $NORMALIZED_RELEASE_TAG"
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
echo "Deploying production tag: $NORMALIZED_RELEASE_TAG"
|
||||||
|
git fetch --tags --force
|
||||||
|
git checkout -f "refs/tags/$NORMALIZED_RELEASE_TAG"
|
||||||
|
git describe --tags --exact-match HEAD
|
||||||
|
'''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Env') {
|
||||||
|
steps {
|
||||||
|
sh '''
|
||||||
|
git --version
|
||||||
|
node -v
|
||||||
|
npm -v
|
||||||
|
'''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Install') {
|
||||||
|
steps {
|
||||||
|
sh '''
|
||||||
|
npm ci
|
||||||
|
'''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Check') {
|
||||||
|
steps {
|
||||||
|
sh '''
|
||||||
|
node -v
|
||||||
|
npm -v
|
||||||
|
'''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Build') {
|
||||||
|
steps {
|
||||||
|
sh '''
|
||||||
|
npm run build:prod
|
||||||
|
test -f dist/index.html
|
||||||
|
'''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Deploy Production') {
|
||||||
|
steps {
|
||||||
|
sh 'sudo /usr/local/bin/deploy-my-resume-from-jenkins "$WORKSPACE"'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Generated
+4750
File diff suppressed because it is too large
Load Diff
@@ -6,6 +6,8 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "astro dev",
|
"dev": "astro dev",
|
||||||
"build": "astro build",
|
"build": "astro build",
|
||||||
|
"build:test": "PUBLIC_APP_ENV_LABEL=测试环境 astro build",
|
||||||
|
"build:prod": "PUBLIC_APP_ENV_LABEL=生产环境 astro build",
|
||||||
"preview": "astro preview"
|
"preview": "astro preview"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
Generated
-2976
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -6,7 +6,7 @@ export const resume = {
|
|||||||
profile:
|
profile:
|
||||||
"7 年前端与跨端开发经验,长期负责 Web、App、H5、小程序与管理后台的架构设计、工程化建设和核心业务交付。熟悉 AI 产品工程、SSE 流式通信、Next.js/Vue/React Native 跨端体系、微前端和 Monorepo 协作模式。",
|
"7 年前端与跨端开发经验,长期负责 Web、App、H5、小程序与管理后台的架构设计、工程化建设和核心业务交付。熟悉 AI 产品工程、SSE 流式通信、Next.js/Vue/React Native 跨端体系、微前端和 Monorepo 协作模式。",
|
||||||
basics: [
|
basics: [
|
||||||
{ label: "工作经验111", value: "7 年" },
|
{ label: "工作经验", value: "7 年" },
|
||||||
{ label: "技术管理", value: "2+ 年" },
|
{ label: "技术管理", value: "2+ 年" },
|
||||||
{ label: "项目用户规模", value: "千万级 MAU" },
|
{ label: "项目用户规模", value: "千万级 MAU" },
|
||||||
{ label: "教育背景", value: "电子科技大学 本科" },
|
{ label: "教育背景", value: "电子科技大学 本科" },
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { resume, resumeEn } from "../data/resume";
|
|||||||
import "../styles/global.css";
|
import "../styles/global.css";
|
||||||
|
|
||||||
const githubUrl = "https://github.com/zhanBoss";
|
const githubUrl = "https://github.com/zhanBoss";
|
||||||
|
const appEnvLabel = import.meta.env.PUBLIC_APP_ENV_LABEL || "生产环境";
|
||||||
const translations = { zh: resume, en: resumeEn };
|
const translations = { zh: resume, en: resumeEn };
|
||||||
const navIds = ["top", "proof", "skills", "projects", "experience", "contact"];
|
const navIds = ["top", "proof", "skills", "projects", "experience", "contact"];
|
||||||
const brandAssets = {
|
const brandAssets = {
|
||||||
@@ -38,7 +39,7 @@ const labels = {
|
|||||||
themeLight: "浅色",
|
themeLight: "浅色",
|
||||||
themeDark: "深色",
|
themeDark: "深色",
|
||||||
heroEyebrow: "Frontend Engineer · AI Product Systems · Cross-platform",
|
heroEyebrow: "Frontend Engineer · AI Product Systems · Cross-platform",
|
||||||
heroTitle: "把复杂前端系统做成可交付的产品",
|
heroTitle: "把复杂前端系统做成可交付的产品。",
|
||||||
viewProjects: "查看项目案例",
|
viewProjects: "查看项目案例",
|
||||||
profileAria: "候选人摘要",
|
profileAria: "候选人摘要",
|
||||||
mapAria: "项目能力地图",
|
mapAria: "项目能力地图",
|
||||||
@@ -63,7 +64,7 @@ const labels = {
|
|||||||
domainsKicker: "Featured Domains",
|
domainsKicker: "Featured Domains",
|
||||||
domainsTitle: "最近项目重点。",
|
domainsTitle: "最近项目重点。",
|
||||||
contactKicker: "Contact",
|
contactKicker: "Contact",
|
||||||
contactTitle: "可沟通前端开发工程师岗位",
|
contactTitle: "可沟通前端开发工程师岗位。",
|
||||||
sendEmail: "发送邮件",
|
sendEmail: "发送邮件",
|
||||||
footer: "Built with Astro.",
|
footer: "Built with Astro.",
|
||||||
},
|
},
|
||||||
@@ -143,6 +144,7 @@ const projectLogoFor = (id: string) => brandAssets.projects[id] ?? null;
|
|||||||
<body>
|
<body>
|
||||||
<div class="scroll-progress" id="scroll-progress"></div>
|
<div class="scroll-progress" id="scroll-progress"></div>
|
||||||
<canvas class="ambient-canvas" id="ambient-canvas" aria-hidden="true"></canvas>
|
<canvas class="ambient-canvas" id="ambient-canvas" aria-hidden="true"></canvas>
|
||||||
|
<div class="environment-badge" aria-label={`当前环境:${appEnvLabel}`}>{appEnvLabel}</div>
|
||||||
|
|
||||||
<header class="topbar">
|
<header class="topbar">
|
||||||
<a class="brand" href="#top" aria-label={`${displayNameFor(resume)} 简历首页`}>
|
<a class="brand" href="#top" aria-label={`${displayNameFor(resume)} 简历首页`}>
|
||||||
|
|||||||
@@ -101,6 +101,22 @@ a {
|
|||||||
background: linear-gradient(90deg, var(--green), var(--blue), var(--amber));
|
background: linear-gradient(90deg, var(--green), var(--blue), var(--amber));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.environment-badge {
|
||||||
|
position: fixed;
|
||||||
|
top: 72px;
|
||||||
|
right: 16px;
|
||||||
|
z-index: 61;
|
||||||
|
padding: 8px 10px;
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 750;
|
||||||
|
line-height: 1;
|
||||||
|
letter-spacing: 0;
|
||||||
|
background: rgba(20, 20, 24, 0.86);
|
||||||
|
border-radius: 999px;
|
||||||
|
box-shadow: 0 10px 24px rgba(0, 0, 0, 0.16);
|
||||||
|
}
|
||||||
|
|
||||||
.ambient-canvas {
|
.ambient-canvas {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
inset: 0;
|
inset: 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user