本文目录导读:

Shell脚本(Linux/Mac)
基础构建脚本示例
#!/bin/bash
# build.sh - 项目自动构建脚本
set -e # 出错立即停止
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
echo -e "${YELLOW}开始构建项目...${NC}"
# 1. 清理旧文件
echo "清理旧构建文件..."
rm -rf dist/
rm -rf build/
# 2. 安装依赖
echo "安装依赖..."
npm install
# 3. 运行测试
echo "运行测试..."
npm test
# 4. 构建项目
echo "构建项目..."
npm run build
# 5. 生成文档
if [ -f "README.md" ]; then
echo "生成文档..."
npx jsdoc src/
fi
echo -e "${GREEN}构建成功!${NC}"
JavaScript/Node.js (npm scripts)
package.json配置
{
"name": "my-project",
"version": "1.0.0",
"scripts": {
"clean": "rimraf dist",
"lint": "eslint src/**/*.js",
"test": "jest",
"build": "npm run lint && npm run clean && babel src -d lib",
"docs": "jsdoc -c jsdoc.json",
"deploy": "npm run build && npm run docs && scp -r dist/ user@server:/var/www/",
"prepublishOnly": "npm test && npm run build"
},
"devDependencies": {
"babel-cli": "^6.26.0",
"eslint": "^8.0.0",
"jest": "^29.0.0",
"rimraf": "^5.0.0"
}
}
Python项目
Makefile方式
# Makefile - Python项目构建
.PHONY: help install clean test build deploy
help:
@echo "可用命令:"
@echo " make install - 安装依赖"
@echo " make test - 运行测试"
@echo " make build - 构建项目"
@echo " make clean - 清理文件"
@echo " make deploy - 部署项目"
install:
pip install -r requirements.txt
pip install -r requirements-dev.txt
test:
pytest tests/ -v --cov=src
clean:
rm -rf build/ dist/ *.egg-info
find . -type d -name __pycache__ -exec rm -rf {} +
find . -type f -name "*.pyc" -delete
build: clean
python setup.py sdist bdist_wheel
python -m pip install --upgrade pip
deploy: build
twine upload dist/*
Python构建脚本
#!/usr/bin/env python3
# build.py - Python构建脚本
import os
import shutil
import subprocess
import sys
from datetime import datetime
class ProjectBuilder:
def __init__(self):
self.project_root = os.path.dirname(os.path.abspath(__file__))
self.build_dir = os.path.join(self.project_root, 'dist')
self.log_file = os.path.join(self.project_root, 'build.log')
def log(self, message):
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
log_message = f"[{timestamp}] {message}"
print(log_message)
with open(self.log_file, 'a') as f:
f.write(log_message + '\n')
def clean(self):
self.log("清理构建目录...")
if os.path.exists(self.build_dir):
shutil.rmtree(self.build_dir)
os.makedirs(self.build_dir)
def install_dependencies(self):
self.log("安装依赖...")
subprocess.run([sys.executable, "-m", "pip", "install", "-r",
"requirements.txt"], check=True)
def run_tests(self):
self.log("运行测试...")
subprocess.run([sys.executable, "-m", "pytest", "tests/", "-v"],
check=True)
def build(self):
self.log("构建项目...")
subprocess.run([sys.executable, "setup.py", "sdist", "bdist_wheel"],
check=True)
def deploy(self, environment='staging'):
self.log(f"部署到{environment}环境...")
# 实际部署逻辑
if environment == 'production':
subprocess.run(["rsync", "-av", "dist/", "user@server:/var/www/"],
check=True)
else:
subprocess.run(["rsync", "-av", "dist/", "user@staging-server:/var/www/"],
check=True)
def run(self, command='all'):
commands = {
'clean': self.clean,
'install': self.install_dependencies,
'test': self.run_tests,
'build': self.build,
'deploy': self.deploy,
}
if command == 'all':
for cmd in ['clean', 'install', 'test', 'build']:
commands[cmd]()
else:
if command in commands:
commands[command]()
else:
self.log(f"未知命令: {command}")
sys.exit(1)
if __name__ == "__main__":
builder = ProjectBuilder()
if len(sys.argv) > 1:
command = sys.argv[1]
else:
command = 'all'
try:
builder.run(command)
builder.log("构建成功!")
except Exception as e:
builder.log(f"构建失败: {str(e)}")
sys.exit(1)
CI/CD集成脚本
GitHub Actions
# .github/workflows/build.yml
name: Build and Deploy
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '18'
- name: Cache dependencies
uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.OS }}-npm-cache-${{ hashFiles('**/package-lock.json') }}
- name: Install dependencies
run: npm ci
- name: Run lint
run: npm run lint
- name: Run tests
run: npm test
env:
CI: true
- name: Build project
run: npm run build
- name: Upload build artifacts
uses: actions/upload-artifact@v2
with:
name: dist
path: dist/
- name: Deploy to server
if: github.ref == 'refs/heads/main'
run: |
echo "部署到生产服务器..."
# 添加部署命令
Jenkins pipeline
// Jenkinsfile
pipeline {
agent any
environment {
NODE_ENV = 'production'
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Install Dependencies') {
steps {
sh 'npm install'
}
}
stage('Run Tests') {
steps {
sh 'npm test'
}
post {
always {
junit 'test-results/**/*.xml'
}
}
}
stage('Build') {
steps {
sh 'npm run build'
}
}
stage('Deploy') {
when {
branch 'main'
}
steps {
sh 'npm run deploy'
}
}
}
post {
success {
echo '构建成功!'
}
failure {
echo '构建失败!'
}
always {
archiveArtifacts artifacts: 'dist/**', fingerprint: true
}
}
}
最佳实践建议
版本控制
# 添加版本号 echo "构建版本: $(git describe --tags --always)" echo "构建时间: $(date '+%Y-%m-%d %H:%M:%S')" > version.txt
环境配置
#!/bin/bash
# 根据环境选择配置
ENV=${1:-staging}
case $ENV in
staging)
export API_URL="https://staging-api.example.com"
;;
production)
export API_URL="https://api.example.com"
;;
esac
echo "使用环境: $ENV"
错误处理
#!/bin/bash
# 带错误处理的构建脚本
PROGRESS_FILE=".build_progress"
echo "build_started" > $PROGRESS_FILE
handle_error() {
echo "构建失败: $1"
echo "build_failed" > $PROGRESS_FILE
exit 1
}
# 使用trap捕获错误
trap 'handle_error $?' ERR
# 构建步骤
echo "step1"
[ -f package.json ] || handle_error "package.json不存在"
npm install || handle_error "依赖安装失败"
echo "build_completed" > $PROGRESS_FILE
echo "构建成功"
一键构建脚本模板
#!/bin/bash
# 全功能一键构建脚本
set -e
# 配置
PROJECT_NAME="my-project"
BUILD_DIR="build"
DIST_DIR="dist"
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}
log_error() {
echo "[ERROR] $(date '+%Y-%m-%d %H:%M:%S') $1" >&2
}
# 检查依赖
check_requirements() {
log "检查构建环境..."
if ! command -v node &> /dev/null; then
log_error "Node.js未安装"
exit 1
fi
if ! command -v npm &> /dev/null; then
log_error "npm未安装"
exit 1
fi
}
# 主构建函数
main() {
check_requirements
log "开始构建 ${PROJECT_NAME}"
# 清理
rm -rf ${BUILD_DIR} ${DIST_DIR}
mkdir -p ${BUILD_DIR}
# 依赖安装
log "安装依赖..."
npm install
# 测试
if [ -f "package.json" ]; then
if grep -q '"test"' "package.json"; then
log "运行测试..."
npm test
fi
fi
# 构建
log "编译代码..."
npm run build
# 输出结果
if [ -d "${DIST_DIR}" ]; then
log "构建成功!输出目录: ${DIST_DIR}"
du -sh ${DIST_DIR}
else
log_error "构建失败:输出目录不存在"
exit 1
fi
}
main "$@"
这个脚本模板包含:
- 完整的错误处理
- 日志记录
- 环境检查
- 模块化设计
- 可配置选项
建议根据项目实际需求选择适合的构建工具和脚本方式,并逐步优化完善。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播