Jenkins 安装及配置
1、docker 环境下的安装
① 下载Jenkins 的Docker 镜像
docker pull jenkins/jenkins:lts
② 在Docker 容器中运行Jenkins
docker run -p 8080:8080 -p 50000:5000 --name jenkins \
-u root \
-v /mydata/jenkins_home:/var/jenkins_home \
-d jenkins/jenkins:lts
2、Jenkins的配置
① 运行成功后访问改地址,第一次登录需要输入管理员密码:http://47.116.131.193:8080/
② 使用管理员密码登录,可以使用一下命令从容器中日志中获得管理员密码
docker logs jenkins
③ 安装完成后,创建管理员账号
④ 进行实例配置,配置Jenkins的URL:
⑤点击系统管理->插件管理,进行一些自定义的插件安装:
⑥ 确保以下插件被正确安装:
根据角色管理权限的插件:Role-based Authorization Strategy
远程使用ssh的插件:SSH plugin
⑦ 通过系统管理->全局工具配置来进行全局工具的配置,比如maven的配置:
⑧ 新增maven的安装配置
⑨ 在系统管理->系统配置中添加全局ssh的配置,这样Jenkins使用ssh就可以执行远程的linux脚本了:
角色配置
不同操作人员,应该打包权限是不同的。
① 在系统管理->全局安全配置中启用基于角色的权限管理:
② 进入系统管理->Manage and Assign Roles界面:
③ 添加角色与权限的关系:
打包部署
maven 打包部署
① 代码上次到仓库。可以是gitlab,GitHub,等等
② 有一点需要注意,要将pom.xml中的dockerHost地址改成你自己的Docker镜像仓库地址:
③ 将jenkins.sh 脚本文件上传到/mydata/sh目录下
#!/usr/bin/env bash
app_name='mall-tiny-jenkins'
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker run -p 8088:8088 --name ${app_name} \
--link mysql:db \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/${app_name}/logs:/var/logs \
-d mall-tiny/${app_name}:1.0-SNAPSHOT
echo '----start container----'
④ 给脚本添加可执行权限
chmod +x ./jenkins.sh
⑤ windows下的.sh脚本上传到linux上使用,需要修改文件格式,否则会因为有特殊格式存在而无法执行:
#使用vim编辑器来修改
vi mall-tiny-jenkins.sh
# 查看文件格式,windows上传上来的默认为dos
:set ff
#修改文件格式为unix
:set ff=unix
#保存并退出
:wq
DockerFile 部署
① pom文件修改
② 然后使用Maven的package命令直接将应用打成Jar包;
③此时在target目录下就会生成一个Jar包,我们打包Docker镜像的时候会用到它。
④ DockerFile
# 该镜像需要依赖的基础镜像
FROM java:8
# 将当前目录下的jar包复制到docker容器的/目录下
ADD mall-tiny-jenkins-1.0-SNAPSHOT.jar /mall-tiny-jenkins-1.0-SNAPSHOT.jar
# 声明服务运行在8088端口
EXPOSE 8088
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar","/mall-tiny-jenkins-1.0-SNAPSHOT.jar"]
# 指定维护者的名字
MAINTAINER Sam
④ 自动化脚本
可以作为通用脚本来使用的模板脚本,只需改变其中的一些参数即可,具体执行流程为:停止旧服务->删除旧容器->删除旧镜像->打包新镜像->运行新镜像。
#!/usr/bin/env bash
# 定义应用组名
group_name='mall-demo'
# 定义应用名称
app_name='mall-demo-jenkins'
# 定义应用版本
app_version='1.0-SNAPSHOT'
# 定义应用环境
profile_active='qa'
echo '----copy jar----'
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker rmi ${group_name}/${app_name}:${app_version}
echo '----rm image----'
# 打包编译docker镜像
docker build -t ${group_name}/${app_name}:${app_version} .
echo '----build image----'
docker run -p 8088:8088 --name ${app_name} \
--link mysql:db \
-e 'spring.profiles.active'=${profile_active} \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/${app_name}/logs:/var/logs \
-d ${group_name}/${app_name}:${app_version}
echo '----start container----'
下面讲下自动化脚本里面值得注意的地方:
group_name、app_name、app_version可以用来定义打包镜像的属性;
profile_active可以让你的应用使用不同环境下的配置,比如使用qa可以启用 测试环境的配置,使用prod可以启用生产环境配置,真正的一包多用;
docker rmi这步一定要有,如果不删除旧镜像,当新镜像打包的时候会产生 none镜像;
docker run命令中的-e TZ="Asia/Shanghai"时区一定要设置,否则容器时间 会和宿主机会相差8个小时。
⑥ 直接上传我们的应用Jar包、DockerFile文件和自动化部署脚本到指定目录下;
⑦ 将自动化脚本修改为可执行;
chmod +x run.sh
⑧ 使用./run.sh命令直接运行脚本即可。
在Jenkins中创建执行任务
① 创建一个任务
② 设置任务名称后选择构建一个自由风格的软件项目:
③ 在源码管理中添加我们的git仓库地址
④ 之后我们需要添加一个构建,选择调用顶层maven目标,该构建主要用于把我们的源码打包成Docker镜像并上传到我们的Docker镜像仓库去:
⑤ 选择我们的maven版本,然后设置maven命令和指定pom文件位置:
⑥ 之后添加一个执行远程shell脚本的构建,用于在我们的镜像打包完成后执行启动Docker容器的.sh脚本:
⑦ 需要设置执行的shell命令如下:/mydata/sh/jenkins.sh
⑧ 之后点击保存操作,我们的任务就创建完成了,在任务列表中我们可以点击运行来执行该任务;
Publish Over SSH
这里推荐安装Jenkins插件,他的主要作用可以通过SSH在不同服务器之间传输文件和执行命令。比如说,我们把Jenkins装在了开发服务器上,我们可以使用Jenkins再开发服务器上从Git仓库获取代码,然后打成Jar包。打包完成后我们可以通过这个插件将jar包传输到正式服务器上去,然后执行正式服务器上的自动化脚本,从而实现正式服务器上的自动化部署。
① 首先我们可以在 系统管理–插件管理 中找到该插件,然后进行安装。
② 然后在 系统管理–>插件管理 中添加相应的SSH 配置。
③ 配置完成后创建一个应用的构建任务,源码管理和构建中的maven 打包配置和之前上面一样,只有最后一步不同,添加构建步骤为 通过SSH发送文件并执行命令;
④ 配置好我们的SSH Publisher,主要是源文件路径和目标文件路径,以及需要执行的脚本;
⑤ 之后执行构建任务即可实现自动化部署了,此方法在两台不同服务器之间同样适用!