基于docker容器化的jenkins2.406升级迁移(jdk8升级jdk11)

查看基础配置

查看jenkins的home路径:

查看磁盘占比:

发现占比比较大的是:

主要子目录:

  • jobs:包含Jenkins管理的构建作业的配置细节、构建产物和数据;
  • logs:Jenkins的日志目录;
  • plugins:包含所有已经安装了的插件,这些插件使得Jenkins得到了很好的扩展;
  • updates:用来存放可用的插件更新;
  • userContent:存放为Jenkins服务器定制化的一些内容;
  • users:存放用户账号信息;
  • war:包含扩展的web应用程序;
  • workspace:存放Jenkins项目的工作空间;

这里占用较多的 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/* guimu@11.0.0.64:/dataRep3/jenkins_data/jenkins_home/

迁移后的目录结构:

最外层的jenkins_data用于放所有Jenkins相关的文件, 后续的jdk11和maven都放在jenkins_data下

容器化Jenkins服务

采用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/

Windows远程打包节点

提示报错:

可能因为远程节点的jdk版本和Jenkins的jdk版本不一致导致的, Jenkins节点会拷贝一个remoting.jar到远程节点并使用java -jar命令进行启动, 所以可能会因为版本不一致导致jar包启动失败

解决方案: 更新远程服务器的jdk版本, 因为Jenkins的jdk版本为11, 所有对应的远程节点调用remoting.jar时使用的jdk也需要时11.

为了避免和远程节点的环境使用的jdk版本冲突可以在节点的高级配置中进行指定agent调用jdk的路径:

容器的ssh权限配置

拷贝对应的sshkey到远程的机器上


cat .ssh/id_rsa.pub
# 然后登录远程机器, 添加到对应的.ssh/authorized_keys并保存
vim ~/.ssh/authorized_keys 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值