服务器性能不足时,可在虚拟机编译,再通过 SSH 推送到服务器。
安装 Jenkins
mkdir -p /root/docker/jenkins && cd /root/docker/jenkins
docker-compose.yml:
version: "2"
services:
jenkins:
image: jenkins/jenkins:lts
container_name: jenkins
restart: always
ports:
- 19280:8080
- 19281:50000
volumes:
- ./data:/var/jenkins_home
- /etc/localtime:/etc/localtime
docker-compose up -d
初始密码:cat data/secrets/initialAdminPassword
安装插件
中文插件:Manage → Plugin Manager → Available → 搜索"中文" → 安装 → 重启
docker-compose restart
必装插件:
- GitHub plugin
- Git Parameter
- NodeJS Plugin
- Publish Over SSH
- SSH server
配置
Node.js 版本:Manage → Global Tool Configuration → 底部 NodeJS → 填写别名和版本
GitHub Token:
- GitHub → Settings → Developer settings → Personal access tokens → New classic token
- Manage → System → GitHub → 添加凭据(Secret text)→ 粘贴 token
- Manage → Security → Git Host Key Verification → No verification
- Manage → System → Publish over SSH → 配置远程服务器
配置 SSH Key:
docker exec -it jenkins bash
ssh-keygen # 一路回车
cat .ssh/id_rsa.pub # 复制公钥到 GitHub SSH Keys
创建流水线
- Dashboard → New Item → 输入名称 → Freestyle project
- 参数化构建:Git Parameter,名称
BRANCH,类型"分支",默认值*/master - 源码管理:Git → 填写仓库地址和 SSH 凭据(私钥在容器
~/.ssh/id_rsa) - Build Steps:Execute shell
rm -rf node_modules package-lock.json *.tar.gz out
npm config set registry https://registry.npmmirror.com
npm install
npm run export
cd out && tar -zcvf $WORKSPACE/$BUILD_ID-$JOB_NAME.tar.gz *
- Send files over SSH:
- Source files:
*.tar.gz - Remote directory:
/home/wwwroot/bak/
- Source files:
Exec command(保留最近 5 次备份):
BAKDIR=/home/wwwroot/bak/
WORKDIR=/home/wwwroot/项目目录/
rm -rf $WORKDIR/*
cd $WORKDIR
cp $BAKDIR/$BUILD_ID-$JOB_NAME.tar.gz ./
tar -zxvf $BUILD_ID-$JOB_NAME.tar.gz
rm -f $BUILD_ID-$JOB_NAME.tar.gz
chown -R root:root * && chmod -R 777 *
cd $BAKDIR
FILENUM=$(ls -lrt ./ | grep $JOB_NAME.tar.gz | wc -l)
while [ $FILENUM -gt 5 ]; do
OLDEST=$(ls -lrt ./ | grep $JOB_NAME.tar.gz | awk '{print $9}' | head -1)
rm -rf $OLDEST
let FILENUM--
done