目录
服务器准备
Docker安装
yum 包更新到最新
设置yum源
安装docker
启动和开机启动
验证安装是否成功
Jenkins安装
拉取镜像
创建映射目录
运行镜像
运行出错
修正权限
重新运行镜像
新建安全组,放通8080端口
激活Jenkins
Jenkins插件
Jenkins全局工具配置
自动构建Springboot项目
准备好Springboot项目
Jenkins新建任务和配置
服务器准备
可以选择阿里云、腾讯云、华为云等云服务器,更便捷,当然也可以使用本地电脑开虚拟机。
阿里云活动地址、腾讯云活动地址、华为云活动地址(点击可访问)
本人购买的阿里云服务器配置为:2 vCPU 2 GiB 3Mbps,即阿里云的优惠活动最低配置的服务器,操作系统选择的centos7.9
当然腾讯云和华为云也不错,可以按需或自己的喜好购买。华为云对新用户有性价比超高的2核4G的配置,不过需要抢。
腾讯云的硬盘更大,带宽更大价格也很实惠,并且是新老客户都可以买的
如果只是个人用来玩一下或者只是有个把个人项目,那就选择一个2核2g或者2核4g的服务器就可以了,即上述最低配置的服务器,当然如果是小团队要使用或者项目比较多,那建议4g/8g起步。
选择合适自己的服务器购买后,等待云服务器完成配置,然后你就可以在你的控制台里面看到自己的云服务器实例了,这里可以自行参考对于云服务厂家的说明书来。
Docker安装
yum 包更新到最新
yum update
设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装docker
yum install docker-ce
OR
yum install <自己的版本> # 例如:sudo yum install docker-ce-17.12.0.ce
启动和开机启动
systemctl start docker
systemctl enable docker
验证安装是否成功
docker version
通过以上命令基本就可以完成docker的安装,本人实操通过,如遇到问题就对于查找相关的解决方案,这里也贴一下docker官网的文档:Get Docker | Docker Docs
Jenkins安装
Jenkins的安装可以参考官网的文档来,安装Jenkins,这里我列出我的安装过程。
拉取镜像
docker pull jenkins/jenkins:lts
这里我使用的是Jenkins的长期支持镜像jenkins/jenkins:lts,但官网的建议是:
使用的Docker映像是jenkinsci/blueocean image(来自 the Docker Hub repository)。 该镜像包含当前的长期支持 (LTS) 的Jenkins版本 (可以投入使用) ,捆绑了所有Blue Ocean插件和功能。这意味着你不需要单独安装Blue Ocean插件。
也就是说jenkinsci/blueocean是长期支持版本+Blue Ocean插件,我由于安装后才看官方文档就没有换了,后续我自行安装了Blue Ocean插件。
创建映射目录
mkdir -p /data/jenkins
这里映射目录你可以按照容器里面的目录/var/jenkins_home来创建也行,自定义也行,看你们自己的规范
运行镜像
docker run -u root -d --name=jenkins -p 8080:8080 -p 50000:50000 -v /data/jenkins/:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker jenkins/jenkins:lts
指定-u root可以解决权限不足的问题,映射docker命令可以解决Jenkins在构建镜像时提示docker not found的问题
运行出错
如果运行出错,可以通过docker logs查看运行日志,我这里有遇到下面的错误
[root@iZ7us1hw0oqmxZ ~]# docker logs jenkins touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
修正权限
遇到上面的错误后通过如下命令授权给Jenkins容器内用户权限(Jenkins容器内userid=1000)
chown -R 1000 /data/jenkins/
重新运行镜像
docker run -u root -d --name=jenkins -p 8080:8080 -p 50000:50000 -v /data/jenkins/:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker jenkins/jenkins:lts# 查看容器是否已在运行
docker ps
新建安全组,放通8080端口
由于我们购买的云服务器,一般默认都是关闭所有端口的访问的(除了22端口),所以我们需要进入服务器实例,找到安全组去配置规则
将入方向的8080端口放通,如下:
这样就可以在浏览器通过服务器公网ip:8080访问到你部署的Jenkins了
激活Jenkins
浏览器访问ip:8080 获取Jenkins密钥,可以利用docker logs jenkins日志获取 也可以查看指定文件/data/jenkins/secrets/initialAdminPassword
Jenkins插件
使用Jenkins密钥进入登录Jenkins后,默认会提示安装一下常用插件,这里可以选择安装一下,然后就是让创建一个管理员用户,可自行按照提示填写,我这里没有截图,应该没什么问题,这里主要对几个常用Jenkins插件和相关配置做个说明。
进入Jenkins主界面后,插件安装在系统管理(System Manager)里面的插件管理(Plugin),我这里说的基本都是中文,但有可能你进去看到的是英文的界面,自行转化一下。
好像是安装了Blue Ocean插件变中文了的,当然实际上是这个插件的功劳Localization: Chinese (Simplified),如果你想要中文显示,可以安装这个插件。
-
Localization: Chinese (Simplified)版本 :Jenkins Core 及其插件的简体中文语言包
-
Blue Ocean:一个美观、功能强大的CI/CD工具,可以在UI界面上配置和管理CI/CD流水线
-
Gitee Plugin:集成gitee需要用到
-
Git Parameter Plug-In:git参数插件,比如想指定构建分支就可以用它来做
-
Role-based Authorization Strategy版本:角色权限控制策略插件,当有多个账号需要控制不同角色账号的操作权限时可以用它来做
-
SSH:ssh插件,有远程连接就需要用它。但是!!!它已经提示有漏洞了,并且提示了3年多还是没有更新,当前最新版本的插件还是5年前的,所以一定不要用它了,需要的话用别的插件代替(代替插件我暂时没有研究,后续如有用到我补充进来)
上面的插件的使用可以点击链接进去看看文档怎么写的,或者直接百度相应插件名称有很多教程,这里就不赘述了
Jenkins全局工具配置
安装完上面的插件后,还需要对Jenkins做一个全局工具的配置,需要运行Java程序,肯定少不了Jdk,Maven等,所以我们需要安装配置它们。
选择新增JDK,命个名,例如JDK1.8,选择对应版本,选择从java.sun.com安装,并输入自己的Oracle账号密码,下面截图有红色报错请忽略,正常不会报错的。
滑动界面到下面,选择Maven安装,选择合适的版本,从Apache安装
如果网络不好也可以下载好安装包上传服务器,选择解压.zip/.tar.gz安装
点击保存,Jenkins就会自动安装JDK,Maven了。
自动构建Springboot项目
准备好Springboot项目
可以使用idea或者在https://start.spring.io官网生成一个demo(现在已经不支持生成Java8的了,可以生成后自己再改版本就好了),或者自己写一个demo,或者从其他项目复制一份,随便改改,方法多种多样,这个相信大家都没有问题。
这里主要是要通过maven插件或者通过Dockerfile描述文件将项目打包成镜像,我这里是通过Dockerfile文件来打包的,再项目根目录新建Dockerfile文件,内容如下:
FROM openjdk:8-jdk-alpine
MAINTAINER liangchen
ENV TZ=Asia/Shanghai
#这里时区相关命令注释是因为构建慢,这个命令是可用的
#RUN apk update \
# && apk add tzdata \
# && echo "${TZ}" > /etc/timezone \
# && ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \
# && rm /var/cache/apk/*
# /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层,从而保证容器存储层的无状态化
# 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
VOLUME /tmp
ADD target/jenkinsdemo-0.0.1-SNAPSHOT.jar app.jar
# 设置随机数生成器的算法为 /dev/./urandom,以提高随机性和性能
ENTRYPOINT ["java","-Xmx128m","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar","--spring.profiles.active=test"]
EXPOSE 8081
面时区命令我注释了,但实际是可用的,相关Docker时区问题可以看看这篇文章:Docker时区问题,看这一篇就够了-CSDN博客
Jenkins新建任务和配置
新建任务,起个名字,一般用项目名,选择构建一个自由风格的软件项目
配置Git源码地址,账号密码
构建步骤,选择调用顶层Maven目标,使用maven给java项目编译打包,这里的maven版本就是上面配置的版本
这个时候就可以保存,点击构建,测试是否能正常打包了,点击构建历史->控制台输出,查看构建日志,如出现如下内容则为正常
注意:这里构建可能很慢,是从maven默认的仓库下载的依赖,可以更改maven的默认中央仓库为阿里巴巴的maven仓库,找到服务器/data/jenkins/tools/hudson.tasks.Maven_MavenInstallation/maven3.6.3/conf目录,在settings.xml里面加入如下镜像地址:
<mirrors><mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror></mirrors>
之后构建就会从aliyun下载依赖了,速度快上10倍。
然后回到任务配置界面,再新增构建步骤
脚本内容,根据需要修改
#进入到jenkins的项目工作目录
cd /var/jenkins_home/workspace/jenkinsdemo
#停止容器 || true表示执行失败继续往下执行,避免第一次没有该容器执行失败
docker stop jenkinsdemo || true
#删除容器
docker rm jenkinsdemo || true
#删除镜像
docker rmi jenkinsdemo || true
#docker构建打包生成镜像
docker build -t jenkinsdemo .
#运行镜像
docker run -d -p 8081:8081 --name jenkinsdemo jenkinsdemo:latest
保存,再次构建,正常的话就会是这样的日志。
至此构建部署完毕,可以通过浏览器访问ip:8081,测试是否能访问到项目。
完美!嗯?完美吗?当然不,还有很多可以优化的地方,但这里至少从0-1了,把基本的架子搭建起来了,后续再来分享我优化的地方,比如实现提交代码自动构建,比如实现构建通知,比如通过域名来访问不暴露ip端口等等。