安装

Docker

https://www.jenkins.io/doc/book/installing/docker/ 宿主机目录:/var/lib/docker/volumes/jenkins-data/_data

  1. $ docker run -u root --rm -d -p 8080:8080 -p 50000:50000 -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean
  2. $ docker exec -it boring_margulis /bin/bash
  3. $ cat /var/jenkins_home/secrets/initialAdminPassword

image.png

Ubuntu

https://www.jenkins.io/doc/book/installing/linux/

  1. # Java SDK
  2. sudo apt-get install openjdk-8-jdk
  3. wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
  4. sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > \
  5. /etc/apt/sources.list.d/jenkins.list'
  6. sudo apt-get update
  7. sudo apt-get install jenkins
  8. # 验证是否安装成功及相关命令
  9. # 使用 systemctl启动Jenkins
  10. sudo systemctl start jenkins
  11. # 使用其status命令来验证是否成功启动
  12. sudo systemctl status jenkins
  13. # 安装成功会显示以下
  14. wuchendi@WuChendi:~/下载$ sudo systemctl status jenkins
  15. jenkins.service - LSB: Start Jenkins at boot time
  16. Loaded: loaded (/etc/init.d/jenkins; generated)
  17. Active: active (exited) since Mon 2020-10-19 22:00:52 CST; 12h ago
  18. Docs: man:systemd-sysv-generator(8)
  19. Tasks: 0 (limit: 18959)
  20. Memory: 0B
  21. CGroup: /system.slice/jenkins.service
  22. # 重启Jenkins
  23. sudo systemctl restart jenkins

2020-10-20 10-09-59 的屏幕截图.png

配置Jenkins

默认初始本地地址

  1. // ip:8080 (默认为8080端口,可修改)
  2. 192.168.xx.xxx:8080
  3. // 重启Jenkins
  4. 192.168.xx.xxx:8080/restart
  1. 解锁 Jenkins

image.png

  1. 安装插件

install suggestes plugins(安装建议插件)
image.png

  1. 创建用户

    安装完成后,系统将提示设置一个管理员用户。可以跳过,使用上面使用的初始化密码作为admin登录。

image.png

  1. 配置 URL

image.png

  1. 重启

image.png

  1. 初始化页面

image.png

修改时区

验证的话可以在 [http://ip:808](http://ip:8081)0/systemInfo中查看 user.timezone 因为 Jenkins 容器使用的是 UTC 时间,和我们的北京时间差了正好 8 个小时,针对我们是 Docker 部署的,解决方法如下

  1. # 推荐(已验证)
  2. # 容器修改完时间后需要重新启动容器
  3. mkdir -p /usr/share/zoneinfo/Asia
  4. touch /etc/timezone
  5. ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  6. echo "Asia/Shanghai" > /etc/timezone
  7. docker restart practical_khayyam
  8. # 未验证
  9. # 猜想可以设置时区的方式
  10. docker run -u root --rm -d -p 8080:8080 -p 50000:50000 -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai

构建参数化

  1. 添加选项参数

image.png

  1. 添加字符参数

image.png

  1. 最终页面显示

image.png

  1. 构建 - 执行shell ```bash

    !/bin/bash

    DATE=$(date “+%Y%m%d-%H%M%S”)

备份目录

FileDir=”/fe_release_history/$JOB_NAME”

创建每次要备份的目录

PATH=”$FileDir/$BUILD_NUMBER”

回滚目录文件

ROLLBACK_FILEDIR=$FileDir/$VERSION

保留备份个数

BUILD_SAVE=5

case $METHOD in deploy) echo “$DATE — $JOB_NAME项目部署 - $METHOD”

  1. # 进入备份目录
  2. cd $FileDir
  3. # 获取目录个数
  4. FileNum=$(ls -l | grep '^d' | wc -l)
  5. while (($FileNum > $BUILD_SAVE)); do
  6. # 获取排序最小的文件夹
  7. OldFile=$(ls -rt | head -1)
  8. echo $DATE "Delete File:"$OldFile
  9. rm -rf $FileDir/$OldFile
  10. let "FileNum--"
  11. done
  12. if [ -d $PATH ]; then
  13. echo "The file already exists"
  14. else
  15. mkdir -p $PATH
  16. fi
  17. # 进入项目目录-执行构建命令
  18. cd $WORKSPACE
  19. npm install
  20. npm run build
  21. # 将打包好的资源备份到相应目录,覆盖已存在的目标
  22. cp -rf ${WORKSPACE}/dist/* $PATH
  23. echo "备份完成"
  24. echo "Completing!!!"
  25. ;;

rollback) if [ -n “$VERSION” ]; then echo “$DATE — $JOB_NAME项目回滚版本: $VERSION”

  1. if [ -d $ROLLBACK_FILEDIR ]; then
  2. # 删除当前构建产物
  3. rm -rf dist*
  4. if [ -d 'dist' ]; then
  5. echo "The file already exists"
  6. else
  7. mkdir -p dist
  8. fi
  9. # 进入回滚版本目录
  10. cd $ROLLBACK_FILEDIR
  11. # TODO: 这里需要调整,生产环境的包不需要复制到项目目录下,发到cos上(或资源服务器)
  12. # 将备份拷贝到程序打包目录中,并覆盖之前的资源
  13. cp -rf * ${WORKSPACE}/dist/
  14. echo "Completing!!!"
  15. else
  16. echo "找不到备份目录, 请检查输入版本是否存在构建失败任务. tip: 设置保留备份个数最大值:5, 请检查恢复版本是否存在!!!"
  17. exit 1
  18. fi
  19. else
  20. echo "当前回滚版本为空, 请输入需要回滚的版本号!!!"
  21. exit 1
  22. fi
  23. ;;

*) exit ;; esac

```

  1. 构建成功会保存5个最新的备份

image.png