Docker安装Jenkins和Jenkins部署nextjs项目
因阿里云轻量服务器(1H2G
)性能不太行, 顾采用虚拟机编译
安装
mkdir /root/docker/jenkins
cd /root/docker/jenkins
vim 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
账号:admin
密码:cat data/secrets/initialAdminPassword
第一次启动不用安装插件, 进去后需要什么自己安装
插件
安装中文插件
manage(系统管理) -> pluginManager(插件管理)
available
搜索 中文
安装
重启jenkinsdocker-compose restart
安装插件
GitHub plugin
Git Parameter
NodeJS Plugin
Publish Over SSH
SSH server
配置Nodejs版本
系统管理 -> 全局工具配置
最下面, 起个别名, 选择版本, 保存
配置github的token
登录github, 点击头像, setting, 左侧最下面Developer settings
Personal access tokens, Tokens (classic)
创建一个(classic) token
系统管理 -> 系统配置
找到github
添加凭据,选择 Secret text
粘贴github的token
保存
系统管理 -> 全局安全配置
最下面 Git Host Key Verification Configuration
选择 No verification
保存
系统管理 -> 系统配置
Publish over SSH
SSH Servers
(配置远程服务器)
保存
docker exec -it jenkins bash
cd
ssh-keygen
回车
cat .ssh/id_rsa.pub
将这个ssh公钥配置到github的ssh上
CTRL+a+d 退出容器
创建blog
Dashboard -> 新建任务
起名blog
保存
配置blog
参数化构建
git
名称 BRANCH
类型 分支
默认值 */master
源码管理
git
Repository URL : [email protected]:w2216/xxxxxx.git
Credentials :
添加 Private Key
(这个key在jenkins容器里, 进去, cat .ssh/id_rsa)
保存, 选择这个Private Key
Branches to build
指定分支 ${BRANCH}
Build Steps
选择nodejs
执行shell
# npm cache clean --force
rm -rf node_modules
rm -rf package-lock.json
rm -rf *.tar.gz
rm -rf out
ls -alh
npm config set registry http://registry.npmmirror.com
npm install
export CI=false
npm run export
ls -alh
cd out
tar -zcvf $WORKSPACE/$BUILD_ID-$JOB_NAME.tar.gz *
Send files or execute commands over SSH
Transfer Set Source files
*.tar.gz
Remote directory
/home/wwwroot/bak/
Exec command (保存5次备份)
# 备份目录
BAKDIRNAME=/home/wwwroot/bak/
# 工作目录
WORKDIRNAME=/home/wwwroot/项目根目录地址/
rm -rf $WORKDIRNAME/*
cd $WORKDIRNAME
cp $BAKDIRNAME/$BUILD_ID-$JOB_NAME.tar.gz ./
tar -zxvf $BUILD_ID-$JOB_NAME.tar.gz
rm -rf $BUILD_ID-$JOB_NAME.tar.gz
chown -R root:root *
chmod -R 777 *
cd /home/wwwroot/bak/
echo "开始删除超过5天的旧文件"
backup_copies=5
FILENUM=`ls -lrt ./ | grep $JOB_NAME.tar.gz | wc -l`
while [ $FILENUM -gt $backup_copies ]
do
OLDEST_File=`ls -lrt ./| grep $JOB_NAME.tar.gz |awk '{print $9}' | head -1`
echo "最旧的文件夹: $OLDEST_File"
rm -rf $OLDEST_File
echo "文件夹: $OLDEST_File已删除"
let FILENUM--
done