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