基于CentOS、docker搭建jenkins内网前端可持续集成环境

4,775 阅读3分钟

测试环境:centos 7(64位)、docker-ce、jenkins 2.93

docker-ce安装文档jenkins官方react和node集成文档

docker离线安装

在centos上安装docker,除了docker的rpm外还需要有以下的依赖包:

安装依赖:

sudo yum install libtool-ltdl-2.4.2-22.el73.x8664.rpm
sudo yum install container-selinux-2.33-1.git86f33cd.el7.noarch.rpm
sudo yum install docker-ce.rpm

如果之前安装过docker而遇到问题,请参考docker-ce安装文档

开启docker服务

sudo systemctl start docker

下载jenkins镜像并导出

我这里选择的是这个jenkins镜像,之前在win10 pro上有用过jenkinsci/blueocean:latest,在执行node命令是会出现找不到node命令,即使我已经设置了PATH

docker pull jenkins/jenkins

输入 docker images查看当前的镜像列表

输入sudo docker save -o myjenkins.tar jenkins/jenkins:latest 以.tar的格式导出jenkins/jenkins:latest镜像到当前文件夹,并将它拷贝到离线环境

在离线环境下导入

离线环境下,输入sudo docker load --input myjenkins.tar导入镜像。

这时输入docker images查看镜像,即可看见导入的镜像

运行导出的jenkins镜像

docker run 
  
  // 当此容器stop时,删除此容器
  --rm 
  
  // 设置调用docker中命令终端时,使用的角色
  -u root 
  
  // 映射主机的物理端口8080到docker的8080虚拟端口
  -p 8080:8080 
  
  //如果jenkins-data(文件夹名字,可以取其他的)在/var/lib/docker/volumes下不存在,docker会创建此文件夹,并将此文件夹下的_data文件夹映射到docker中的/var/jenkins_home,此文件夹下存储的是jenkins的数据(包含插件、用户信息、构建记录等)
  -v jenkins-data:/var/jenkins_home
  
  // docker的守护进程(没深入研究过)
  -v /var/run/docker.sock:/var/run/docker.sock 
  
  // 映射主机的/home/hanqing/source到docker容器中的/home
  -v /home/hanqing/source:/home
  
  // 要运行的镜像
  myjenkins

打命令的时候是一行写完的,不换行

执行后下图的红框中的字符串要拷贝下来,之后jenkins激活需要用到

配置jenkins

打开浏览器访问localhost:8080,看到jenkins服务已经开启了

administrator的password就是之前红框中的那一串

因为是离线(可以先跳过这个步骤,等配置完jenkins的时候再添加),我知道的插件安装方式有两种

  • 插件可以通过jenkins-plugins下载后,从系统设置->管理插件->高级->上传插件
  • 从已经下载好插件的jenkins插件目录下拷贝出来,复制到离线jenkins的插件目录(此例子的插件目录是/var/lib/docker/volumes/jenkins-data/_data/plugins)

设置用户(电子邮件一栏一定要有@)

开始使用jenkins

点击主页左侧的新建Item选项,输入任务名,选择构建一个自由风格的软件项目,点击确定

在页面中源码管理section中选择版本管理器,我用的是git,所以就用git作例子,这里的Repository URL可以是一个本地地址,也可以是一个网址,必须指向一个带.git文件的文件夹或者一个git仓库,如果要使用ssh的话,需要在Credentials中设置ssh私钥

在构建section选择execute shell,然后就可以在command输入框中输入命令了(这些命令是在docker的容器中执行的,所以执行环境也是容器的)

给构建环境增加node

默认情况下,此docker容器的执行环境中没有node,就跑不了npm script,如果是联网的话,可以通过NodeJS Plugin插件来解决,但离线的话就需要在command里面需要将node的可执行文件添加进PATH中

我的解决方案是将node的linux二进制文件压缩包解压到/home/hanqing/source目录下,为了方便将解压后的文件夹命名为node,也就是把这些文件映射到了容器的/home目录下,这时将bin文件夹下的二进制文件添加到PATH中就可以使用node命令了,在command输入框中输入:PATH=$PATH:/home/node/bin