阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Docker部署Jenkins并发布Web服务

128次阅读
没有评论

共计 4134 个字符,预计需要花费 11 分钟才能阅读完成。

工作需要,需要搭建 Jenkins,用 maven 编译 Java 项目,打包发布 docker 镜像,同时用 tomcat 部署 web 服务。这样会大大的节省开发人员和测试人员的时间,也为发布产品提供方便,所以构建了这样的一个系统,相对来说比较简单,只是对于初次接触的人来说,还是有些小坑需要去克服的,记录一下自己的搭建过程。

1. 登陆虚拟机

物理机自然是资源有限了,所以申请了一台虚拟机(memory 4G,swap 10G,disk 200G),带有界面的,方便操作。

1. 连接

用 putty 连接上之后,安装 vnc

yum install tigervnc tigervnc-server -y

2. 分辨率

然后设置分辨率

vncserver -geometry 1600x900

3. 防火墙

关闭防火墙,开始不知道,所以尝试多次都连接不上

systemctl stop firewalld.service

4. 登陆

用 VNC Viewer 登陆。

2. 安装 docker,pull 所用到的 image

系统为 CentOS7.2,安装 docker 步骤:https://docs.docker.com/engine/installation/linux/centos/

下载 image,如果已经有了相关的 image 的 tar 包,只需 load 进去即可。

docker pull jenkins
docker pull tomcat
docker pull registry
docker pull index.tenxcloud.com/gavincook/jenkins

因为官方的 jenkins 比较大,并且不知道 root 密码,所以最后用的时速云的 jenkins,大小为 488M。
因为要发布 web 服务,所以需要 tomcat。
因为要把生成的 image 保存,所以在本地搭建了一个 registry。

3. 搭建本地 registry

docker run -d -p 5000:5000 -v /home/registry:/tmp/registry --name cwebtools_registry --restart=always registry

需要修改 /usr/lib/systemd/system/docker.service 这个配置文件,以便能通过内网的 IP 访问到 registry

ExecStart=/usr/bin/docker -H unix:///var/run/docker.sock --insecure-registry 10.104.1.199:5000

其余细节,不再赘述。

4. 部署 Jenkins

docker run -d -p 8002:80 --restart=always --name cwebtools_jenkins 10.104.1.199:5000/cwebtools_jenkins --httpPort=80

1. 端口

这里用的是 8002 端口,可以根据实际情况设置不同的端口号。

2. 访问

启动成功后,可以通过 10.104.1.199:8002 访问 jenkins。

3. 设置

先设置 Configure Global Security,启用相应的安全策略,开放用户注册,添加管理员策略,关闭匿名用户等。
注册了一个用户:cwebtools,并给此用户设置了管理员权限。

:最初想在 jenkins 的 container 里面安装 jdk 和 docker,后来想到可以在 slave 节点安装,所以这个 container 就相对比较纯净,除了 jenkins,不再安装其他的模块。

3. 节点

添加节点,取名为 cwebtools,开始是连接不上的,在宿主机安装 ssh,并启动服务,即可连接上这个节点。

rpm -qa |grep ssh // 检查是否装了 SSH 包
yum install openssh-server // 安装
chkconfig --list sshd // 检查 SSHD 是否在本运行级别下设置为开机启动
chkconfig --level 2345 sshd on  // 如果没设置启动就设置下
systemctl restart sshd.service  // 重新启动
netstat -antp |grep sshd  // 看是否启动了 22 端口

4. 插件

安装必要的插件,比如 svn,maven,slave 等,如果网速和控件允许的话,也可以把所有的插件都安装上。

5. 设置

系统设置,主要是设置 jdk 和 maven 路径,在安装了 jdk 和 maven 之后再设置。
这里设置为:
JAVA_HOME=/usr/local/java
MAVEN_HOME=/usr/local/maven

5. 在宿主机安装 jdk 和 maven

因项目需求,这里安装的 jdk 为 1.7 版本,maven 版本没有要求,我安装的是 3.3.9。
通过 WinSCP,把 jdk 和 maven 拷贝到宿主机,按照习惯放在了 /usr/local/ 目录下。

:maven 需要权限,所以要给 maven 的 bin 下文件设置执行权限。
jdk1.7 需要设置 JAVA_HOME,设置完后,需要重启系统,才能生效,如果之前有其他版本的 jdk,还需要卸载以前的 jdk。
过程如下:

java -version
rpm -qa | grep java
yum -y remove java java-1.8.0-openjdk-1.8.0.101-3.b13.el7_2.x86_64

设置环境变量 /etc/profile 文件最后添加

export JAVA_HOME=/usr/java/java
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

这里遇到了一个很大的坑,费了很长时间,但不知是何原因,如果设置 JAVA_HOME=/usr/java/jdk1.7.0_79,是不行的。文件夹只有改为 java 名字,slave 才能连接上。

java 文件夹下的 bin 和 jre 下的 bin 都要赋上执行权限,否则会报错:permission denied。

6. 新建一个 jenkins 新任务

1. 选择一个自由风格的项目,名字为 cwebtools。
2. 丢弃旧的构建。可根据需求自由设置,天数设置为 10,构建个数 20。
3. 设置子节点的 label:cwebtools。
4. 设置 svn 的网址,用户名以及密码。
5. 设置构建触发器,设为早晨 8 点和中午 12 点编译一次。
6. 添加 3 个 maven 构建步骤(因为有 3 个 maven 项目),因为是 maven 项目,Goals 设为 clean install,POM 设为 pom 文件的绝对路径,这里可以用全局变量 WORKSPACE。
7. 添加编译后脚本

REGISTRY_URL=10.104.1.199:5000

cp -r $WORKSPACE/cwebpdf/target/pdftools /home/cwebtools1.2/cwebtools

docker build -t $REGISTRY_URL/cwebtools:1.2 /home/cwebtools1.2
docker push $REGISTRY_URL/cwebtools:1.2

if docker ps -a | grep -i cwebtools_12;then
    docker rm -f cwebtools_12
fi

docker run -d -p 8088:8080 \
-v /home/cwebtools_data/input:/home/cwebtools/input \
-v /home/cwebtools_data/output:/home/cwebtools/output \
-v /home/cwebtools_data/logs:/home/cwebtools/logs \
--name cwebtools_12 \
--restart=always \
$REGISTRY_URL/cwebtools:1.2
MYTIME=`date +%y%m%d_%R`
cp $WORKSPACE/cwebpdf/target/pdftools.war /home/backup/pdftools_20$MYTIME.war

8. 这里实现的功能,把编译结果 cp 到 cwebtools 文件夹中,build 一个 image,push 到 registry 中,删除原来的 container,启动新的 container,并且挂载 3 个 volumes 存放数据,同时会把生成的 jar 包拷贝到备份目录 backup 下,做一个备份,以便查阅。

9. 点击构建,如果顺利的话,第一次编译大概需要 2 - 3 小时,因为需要下载 maven 和 jdk 的包,之后的编译加上部署,在 1 - 2 分钟以内。

7. 大功告成

至此,搭建成功,当代码有更新时,只需要点击构建,然后就可以在网页打开最新的 cwebtools 服务。

大家若有什么问题,欢迎留言交流。

局域网内利用 GitLab+Jenkins 自动生成 GitBook 并发布(Nginx)  http://www.linuxidc.com/Linux/2016-05/131136.htm

Linux+Git+Maven+Jenkins+Neuxs 自动化编译环境搭建 http://www.linuxidc.com/Linux/2016-02/128652.htm

CentOS6 安装 Jenkins  http://www.linuxidc.com/Linux/2016-05/131365.htm

使用 Jenkins 配置 Git+Maven 的自动化构建 http://www.linuxidc.com/Linux/2016-02/128641.htm

Jenkins+Maven+Git 搭建持续集成和自动化部署的配置手记 http://www.linuxidc.com/Linux/2015-06/118606.htm

Jenkins 的分布式构建及部署——节点  http://www.linuxidc.com/Linux/2015-05/116903.htm

Jenkins 的详细介绍:请点这里
Jenkins 的下载地址:请点这里 

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/137397.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4134字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中