Docker环境下安装Jenkins进行持续化集成

为了适应现有的分布式部署方案,支持多服务器的项目打包和发布,启用Jenkins进行持续化集成。并且为了方便程序管理,使用Docker进行镜像打打包和发布

Docker安装

不再此具体表述Docker安装过程

Jenkins安装

安装镜像

目前Docker公共仓库下面,有两个Jenkins镜像,分别为Jenkins和Jenkinsci/Jenkins。根据官方说明,前者已经不再更新,因此时候后面的镜像进行安装

docker pull jenkinsci/jenkins

启动镜像

docker run --name jenkins -p 8002:8080 -p 50000:50000 -d -v /home/jenkins-home-docker:/var/jenkins_home jenkins/jenkins:lts

-p:端口映射8080为默认的Jenkins管理端网页端口,50000为 JNLP(Java Web Start) 语言调用Java类的接口,暂不清楚具体实现方式

-v:文件映射

Jenkins基础系统配置

上述Docker容器启动之后,通过Docker日志查看命令

docker logs -f jenkins

界面上会输出Jenkins的初始管理原密码。或者进入Jenkins容器之后,执行命令查看

docker exec -it jenkins /bin/bash
cat /var/jenkins_home/secrets/initialAdminPassword

打开Jenkins的管理网站:http://iphost:8002。其中IP地址为Jenkins的部署服务器地址,端口为上述docker启动时,真是8080进行的端口映射。

首次打开之后,会出现如下界面
解锁Jenkins
点击继续之后,在插件安装页面,我们现在安装推荐插件
推荐插件安装

Jenkins汉化

首页进入Jenkins,由于可能不同浏览器优先级语言的原因,默认显示问英文,如果需要指定语言,则需要安装插件

插件安装
在Available分页下面在Filter中搜索Locale Plugin插件和Localization: Chinese(Simplified),分别勾选之后,点击下面的Download now and install after restart按钮。等待安装完成之后,重启Jenkins。

http://iphonst:8002/restart

重启完成之后,进入Manager Jenkins -> Configure System
系统配置
找到 Locale 栏目,在 Default Language 输入框中输入 zn_CN。并且勾选下方的复选框:Ignore browser preference and force this language to all users

刷新页面,即可看到汉化结果。由于插件存在部分汉化的原因,可能有一些文字仍然显示中文。

Jenkins时区修改

默认启动Jenkins时,时区为标准时间,如果需要修改为北京时间,
打开 系统管理->脚本命令行 执行以下命令:

System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

点击运行,即可修改完成,无需重启。

必须插件安装

publish over ssh

相关配置内容如下 系统管理 -> 系统配置 -> Publish over ssh
SSH配置
由于测试时我们使用root来直接登录
SSH Service

  • Name:SSH的显示名称
  • Hostname:SSH的主机地址。由于我们Jenkins也是安装在Docker内的,可以使用 Docker分配的IP 访问。
  • Username:SSH登录用户名
  • Remote Directory:远程连接之后的默认路径
  • 勾选 Use password authentication, or use a different key
  • Passphrase / Password:输入 Username 对应的密码

新增完成后点击 Test Configuration 出现 Success 之后表示配置成功 最下面的 保存

Maven Integration plugin
相关配置内容如下 系统管理 -> 全局工具配置 -> Maven
Maven安装

  • Name:显示名称
  • 勾选自动安装
  • 选择自己需要的版本

新建完成之后,点击最下面的保存

自动化部署配置

新建任务

首页 -> 新建任务

新建任务一
新建二

  • 描述:针对任务的描述
    新建三
  • Git:由于测试项目为Git项目,这里按照git来配置
  • Repository URL:git项目的地址 https://******.git
  • Credentials:git的认证方式,首次添加,可以通过右侧的添加按钮进行新增
  • Branches to build:指定编译的分支
    新建任务四
  • 触发远程钩子
    通过请求指定的Jenkins的URL地址,来触发构建,如图中的配置,则触发请求地址为

http://iphost:8002/job/pet/build?token=buildEureka

  • 定时构建
    使用 cron 格式来指定构建周期
    新建任务五
    选择 执行 shell
    在命令中输入需要执行的shell命令
echo "Pre Steps脚本启动成功"

新建任务六

  • Root POM:Maven编译的pom.xml文件
  • Goals and options:Maven编译的参数

新建任务七

  • Run only if build successeds:仅在编译成功之后执行
  • Run only if build successeds or is unstable:仅在编译成功或者不稳定时执行
  • Run regardless of build result:不管编译结构都执行

由于我们的Jenkins是安装在Docker容器中的,因此需要在编译完成Jar包之后,把容器内的jar包通过SSH上传到发布服务器上,因此我们在此通过 Publish over SSH 插件实现
新建任务八
选择 Send files or excute commands over SHH

  • SSH Server Name:我们在上面配置的SSH服务器地址
  • Source files:上次上传的原文件地址,可以配置为jar包地址
  • Remove prefix:需要移除的文件前缀
  • Exec command:如果这个配置框中有任何内容,那么它将在远程服务器上执行。如果配置了源文件,那么将在执行Exec命令之前传输这些文件。
cd /home
mv pet-eureka-0.0.1-SNAPSHOT.jar pet-eureka.jar
./dockerBuild.sh
./dockerRun.sh

默认登录后是在/root目录下,所以切换到ssh的登录目录,并且重命名包名,方便后续统一管理
dockerBuild.sh为Docker镜像的编译命令,dockerRun.sh为容器的编译执行命令

dockerBuild.sh

docker build -t pet-eureka .
docker image prune -f 
  • 根据Dockerfile文件配置编译指定镜像,最后的“.”表示指定的Dockerfile所在路径和相关文件路径
  • 删除重新编译之后未挂载的镜像,如下图所示的为dangling状态的镜像,需要此命令删除
    dangling

dockerRun.sh

#镜像名称
IMAGE_NAME='pet-eureka'

echo '================获取容器id=================='
CID=$(docker ps -a | grep $IMAGE_NAME | awk '{print $1}')
echo 容器id=$CID

echo '================获取镜像id=================='
IID=$(docker images | grep $IMAGE_NAME | awk '{print $3}')
echo 镜像id=$IID

if [ -n "$CID" ]; then
    echo 存在$IMAGE_NAME容器,停止容器并删除
    docker stop $IMAGE_NAME
    docker rm $IMAGE_NAME
else
    echo 不存在$IMAGE_NAME容器,开始启动
fi

docker run --name=$IMAGE_NAME -p 8081:8081 -d $IMAGE_NAME

Dockerfile.sh

FROM java:8
ADD pet-eureka.jar /usr/local/jar/
# 修正 docker 容器里面的时间
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
#声明暴漏端口,这里一般不强制,因为我们通常用 docker -p port:port 来映射端口,以达到访问容器内部的目的
EXPOSE 8081
CMD ["java","-jar","/usr/local/jar/pet-eureka.jar"]
  • 由于jar包需要基于java环境运行,因此第一句为指定基础的镜像。如果没有安装,需要先安装java镜像包
docker pull java:8
  • 复制指定的jar包到容器内的指定路径下
  • 最后一行为指定容器运行的默认命令

三个文件配置完成之后,需要给予文件执行权限

chmod 755 dockerBuild.sh dockerRun.sh Dockerfile

所以配置完成之后,点击最下方的保存按钮

Jenkins任务运行

任务创建完成之后,点击任务首页左侧的立即构建,即可在下方的Build History中看到对应的任务日志
任务运行一
点击任务列表,在进入的页面左侧,点击命令行输出,即可即可看到运行日志

结束

最后,可以在目标服务器上查看具体的编译成果,以及具体的docker镜像和容器是否生成以及运行正常

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值