Bootstrap

Jenkins+Docker+Gitee搭建自动化部署平台

目录

服务器准备

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端口等等。

;