查看jenkins的home路径:
查看磁盘占比:
发现占比比较大的是:
主要子目录:
这里占用较多的 workspace 文件夹没有什么用, 没有必要迁移, 主要是用于存放对应的一些build过的一些jar包之类的, 一般没有什么用, 只要再次对job进行构建就会再次创建对应的工作空间下的项目文件夹.
release 也是一些版本跟踪的项目数据, 根据情况考虑是否迁移
如果害怕数据丢失建议JENKINS_HOME路径下的所有都进行迁移
拷贝文件到指定的机器
# 迁移目标机器创建文件夹 mkdir -p /dataRep3/jenkins_data/jenkins_home # 对Jenkins中的Workspace和release文件夹忽略迁移 rsync -av --exclude='workspace' --exclude='release' /var/lib/jenkins/* [email protected]:/dataRep3/jenkins_data/jenkins_home/
迁移后的目录结构:
最外层的jenkins_data用于放所有Jenkins相关的文件, 后续的jdk11和maven都放在jenkins_data下
采用docker容器化启动Jenkins, 这里我是升级了老版本的Jenkins, 由 2.346 升级到2.406; 并且从原本的真机部署改为容器化部署
下载jdk11:Java Archive Downloads - Java SE 11
maven的下载地址: Index of /maven/maven-3/3.9.2/binaries
# 下载到指定目录 wget https://downloads.apache.org/maven/maven-3/3.9.2/binaries/apache-maven-3.9.2-bin.tar.gz # 解压 tar -zxvf apache-maven-3.9.2-bin.tar.gz # 下载jdk, 注意这里是下载最好是下载oracle的jdk11,不然可能会出问题, 自行官网下载, 下载后传到指定路径jenkins_data下 # 下载完后进行解压 tar -zxvf tar -zxvf jdk-11.0.17_linux-x64_bin.tar.gz
# 端口和文件路径按照自己的改就可以 docker run --name jenkins --privileged -p 9580:8080 -p 50000:50000 \ -v /dataRep3/jenkins_data/jenkins_home:/var/jenkins_home:rw \ -v /dataRep3/jenkins_data/apache-maven-3.9.2:/usr/local/maven/apache-maven-3.9.2 \ -v /dataRep3/jenkins_data/jdk1.8.0_361:/usr/local/openjdk \ -e "JAVA_HOME=/usr/local/openjdk" \ -e "MAVEN_HOME=/usr/local/maven/apache-maven-3.9.2" \ -e "CLASSPATH=$JAVA_HOME/lib" \ -e "PATH=/usr/local/maven/apache-maven-3.9.2/bin:/usr/local/openjdk/bin:$PATH" \ -e "TZ=Asia/Shanghai" \ -d jenkins/jenkins:2.406
将下面的/etc/profile文件进行覆盖容器内部的文件, 添加maven的路径
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...). if [ "$(id -u)" -eq 0 ]; then PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" else PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" fi export PATH if [ "${PS1-}" ]; then if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then # The file bash.bashrc already sets the default PS1. # PS1='\h:\w\$ ' if [ -f /etc/bash.bashrc ]; then . /etc/bash.bashrc fi else if [ "$(id -u)" -eq 0 ]; then PS1='# ' else PS1='$ ' fi fi fi if [ -d /etc/profile.d ]; then for i in /etc/profile.d/*.sh; do if [ -r $i ]; then . $i fi done unset i fi #set Maven environment export MAVEN_HOME=/usr/local/maven export PATH=$MAVEN_HOME/bin:$PATH
修改后拷贝到容器中的/etc/profile
具体步骤:
# 拷贝源文件 docker cp jenkins:/etc/profile ./jenkins_profile # 修改内容, 按照上述文件,在末尾添加maven配置 vim jenkins_profile # 将上面的文件拷贝到容器 docker cp jenkins_profile jenkins:/etc/profile # 最后重启容器 docker restart jenkins
最后打开对应的地址查看是否正常
这就是前面提到的可能是因为你的jdk版本的问题, Jenkins的2.4之后需要使用jdk11的版本, 并且不能使用OpenJDK, 需要使用oracle的jdk, 从官网进行下载后进行替换即可
项目构建时可能会因为使用的jdk11版本的升级而导致构建失败
这时候需要兼容Jenkins内部对jdk8的使用
兼容jdk8 项目构建参考博客:jdk11版本jenkins打包jdk8项目,同时兼容jdk11与jdk8_用11版本的jenkins构建的jar包会有影响吗_保护我方胖虎的博客-CSDN博客
下载jdk8
同样在oracle官网去下载:Java Archive Downloads - Java SE 8u211 and later
下载到路径 /dataRep3/jenkins_data/
下:
# 解压tar包 tar tar -zxvf jdk-8u361-linux-x64.tar.gz # 移动到容器内部, 实际我们只需要移动到挂载的容器的jenkins_home路径下 mv jdk1.8.0_361 jenkins_home
进入容器查看是否正常:
docker exec -it jenkins /bin/bash
配置jenkins的全局工具配置
配置jdk1.8
一般默认使用的jenkins默认的jdk, 这添加后还需要修改构建的项目,选择jdk8
最后尝试构建验证是否成功
可能有一些自定义的依赖包需要重新导入到Jenkins的容器中的maven仓库
拷贝命令:
# 切到指定的仓库位置: cd /Users/louye/.m2/repository/org # 拷贝 docker cp kabeja jenkins:/var/jenkins_home/.m2/repository/org/
提示报错:
可能因为远程节点的jdk版本和Jenkins的jdk版本不一致导致的, Jenkins节点会拷贝一个remoting.jar到远程节点并使用java -jar
命令进行启动, 所以可能会因为版本不一致导致jar包启动失败
解决方案: 更新远程服务器的jdk版本, 因为Jenkins的jdk版本为11, 所有对应的远程节点调用remoting.jar时使用的jdk也需要时11.
为了避免和远程节点的环境使用的jdk版本冲突可以在节点的高级配置中进行指定agent调用jdk的路径:
拷贝对应的sshkey到远程的机器上
cat .ssh/id_rsa.pub
# 然后登录远程机器, 添加到对应的.ssh/authorized_keys并保存
vim ~/.ssh/authorized_keys