1. 代码上传。
软件工程师编写完代码后,将本地代码上传到Source Control Management。如果使用Git作为源代码管理,则通过git命令或git客户端将代码PUSH到版本库。如果是使用Team Foundation Server(TFS)作为源代码管理,则通过TFS客户端将代码commit到版本库。
2.Hook触发构建。
TFS与Git均提供了Hook机制(钩子),即一些事件触发点,可以自定义当一些行为发生后,触发一些事件。如可以定义当发生代码提交动作后,触发jenkins的远程构建。
3.远程触发构建。
当然如果每次PUSH完代码均触发jenkins的远程构建,显然不够友好,我们可以通过配置jenkins,通过远程http请求实现触发远程构建的功能。如使用curl命令发起http请求,以远程触发jenkins自动构建。
4.自动构建。
接下来是核心的jenkins自动构建定义,通过定义jenkins任务或流水线,可以实现从按照分支/标签代码获取、maven自动编译打包、docker生成镜像并上传到镜像仓库、远程访问kubernetes以根据yaml文件生成kubernetes资源实现镜像上云部署等。
本文只针对jenkins所在的服务器的基础软件安装做说明。需要安装的软件包括:
JDK
maven
Docker
Kubctl
Jenkins
2.1. Docker安装
因很多开发环境均是与外网隔离的环境,需要离线安装Docker。本文主要描述离线安装Docker的步骤。
Docker下载地址:
https://download.docker.com/linux/static/stable/x86_64/docker-17.03.2-ce.tgz
Docker安装步骤:
(1)前提:使用root用户安装。
(2)解压:tar -xvf docker-17.03.2-ce.tgz
(3)将解压出来的docker文件内容移动到 /usr/bin/ 目录下:cp docker/* /usr/bin/
(4)将docker注册为service:vim /etc/systemd/system/docker.service,并将将下列配置加到docker.service中并保存,如下所示:
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
(5)启动
chmod +x /etc/systemd/system/docker.service #添加文件权限并启动docker
systemctl daemon-reload #重载unit配置文件
systemctl start docker #启动Docker
systemctl enable docker.service #设置开机自启。
(6)验证
systemctl status docker #查看Docker状态
docker -v #查看Docker版本
(7)授权给非root 用户。
此时我们已经完成了root用户的docker安装,但如果实际使用docker的用户不是root,此时部分docker命令将无权操作,例如第6步的
systemctl status docker #查看Docker状态 与docker -v #查看Docker版本均可在非root用户操作执行,但docker info命令就会报错如下图所示:
此时只需要使用root用户将/var/run/docker.sock文件的权限扩大即可:
chmod 777 /var/run/docker.sock
分析原因有二,一是未配置镜像仓库的证书;二是未配置
镜像仓库域名服务器解析。
2.2. jenkins安装
1.安装jenkins。
jenkins安装很简单,可需要在官网上下载jenkins.war包,即可使用。
下载地址为:https://jenkins.io/zh/download/
启动方式有两种,
一种是启动方法: java -jar jenkins.war 即可,如果要以后台进程的方式启动,改成nohup java -jar jenkins.war & 即可,启动过程中,它会将war包解压到~/.jenkins目录下,并生成一些目录及配置文件
第二种是将jenkins.war包,放到tomcat的webapps目录下,启动tomcat即可本文采用了第二种方式,如下图所示:
此时访问10.229.:8080/jenkins/ 来访问即可进入jenkins的控制台。
2.更新jenkins插件下载源。
jenkins的使用必须依托于大量的插件,这些插件又依赖一些其他插件,逐个手动下载插件代价很大,最好的方式是通过jenkins控制台的下载插件功能来下载。但因其官网服务器部署在美国,通过官网下载插件很慢,因此需要将下载地址更新为国内源。更新方式为:
(1)进入jenkins控制台,点菜单“Manage Jenkins”,如下所示:
(3)选择”Manage Plugins”–>”Updte Center”,选择”Advanced”选项页:
(4)在”Update Site”页中,配置清华大学的地址:
但是这里有个问题,清华源中的插件地址仍然是国外的官网,做到这一步并不能提升速度,我们需要手动再修改下这个源地址文件。
操作步骤为:
一、打开本地jenkins的源地址文件,路径为”.jenkins\updates\default.json”,这个文件里就是我们刚刚配置的清华源的文件内容。
二、打开default.json,将文件中的www.google.com替换为www.baidu.com,将文件中的updates.jenkins-ci.org/download替换为https://mirrors.tuna.tsinghua.edu.cn/jenkins,然后保存退出。
三、重启Jenkins即可。
3.下载jenkins插件。
为支持前文说的持续构建,需要大量 jenkins插件的支持,主要包括:
Team Foundation Server Plug-in、Version Number Plug-In、Maven Integration plugin、Hudson Post build task、Gitlab Hook Plugin、Git plugin、Git Parameter Plug-In、Build Authorization Token Root Plugin、Command Agent Launcher Plugin
4.离线安装jenkins插件。
在第三步骤,在有网环境下下载的jenkins插件保存在”.jenkins\plugins\”目录下,
如下所示:
将该目录下的所有文件,拷贝到离线环境下的相同目录下,重启jenkins,即可离线安装插件。
2.3. Kubctl安装
为了能够远程操作kubernetes,需要在jenkins所在服务器上安装Kubernetes集群的命令行工具Kubectl。
离线安装方式很简单:
第一步:下载应用程序。下载地址:
https://storage.googleapis.com/kubernetes-release/release/v1.7.1/bin/linux/amd64/kubectl
第二步:将该应用程序上传到服务器。
第三步:chmod +x kubectl
3.1 jenkins公共配置**
第一步:进入jenkins控制台后,选择”Manage Jenkins”–>”Global Tool Configuration”进行公共配置
第二步:配置各个配置项,主要配置三项:jdk配置、git配置、Maven配置。如下图所示:
3.2新建任务
第一步:进入jenkins控制台后,选择“New Item”即可创建一个构建任务。
第二步:输入任务名称后,选择“构建一个maven项目”,点击“确定”。
第三步:配置maven项目的各个配置内容。
(1) 获取代码。为支持GIT与TFS,需要分别安装GIT 与 TFS的插件,安装好后,即可在“Source Code Management”中配置GIT或TFS的远程地址与用户名,密码,如下图所示:
(2)为支持GIT或TFS中按照分支或标签获取,在第(1)步中配置了$BUILD_TAG参数,该参数需要在“General”中选择“This project is parameterized”,指定字符串参数,如下所示:
(3)配置一个Build Environment,用于生成一个版本号,如下图所示,版本号由“日期+构建次数”组成,
(4)配置Build,主要是针对maven构建所需要的pom.xml文件路径,以及maven命令行参数等,如下图所示:
(5)最后在“Post Steps”配置maven构建后的处理,这里将打docker镜像、上传镜像仓库、调用kubectl部署到paas云的操作均写到这里,如下图所示:
#!/bin/bash -il
echo "helloworld"
cp -f $WORKSPACE/testboot/target/testboot-0.0.1-SNAPSHOT.jar $WORKSPACE/
docker build -f $WORKSPACE/Dockerfile -t registry.xxxx/hbgov/sxfang:${BUILD_VERSION} $WORKSPACE/.
docker login --username=quzhongwei --password=密码 registry.xxxx
docker push registry.xxxxx:${BUILD_VERSION}
sed -i "s/{IMAGE_TAG}/${BUILD_VERSION}/g" $WORKSPACE/sxfang.yaml
/home/usr/bin/kubectl --kubeconfig=/home/usr/bin/admin.kubeconfig --validate=false apply -f $WORKSPACE/sxfang.yaml
(6)为支持远程触发构建,需要做两步操作,第一步是配置操作用户的token信息,操作为选择右上角用户名的链接,如下图所示:
再选择“Configure”,如下图所示:
在“API Token”中选择“Add new Token”,将生成的Token值,复制到剪贴板。
第二步:回到刚才创建的Maven Job中,配置Build Triggers,将Token值配置到如下图所示,这样就支持了远程触发。
远程触发示例为:
curl -s -u admin:密码 -X GET http://IP:8080/jenkins/job/test/build?token=xxxxxxxxxxxx
其中admin:密码分别表示jenkins的用户名与密码,用: 分隔。
http://IP:8080/jenkins/job/test/build?token=11d82237e92310afad810e5e65a3b3f6a0
地址由jenkins的地址
http://IP:8080/jenkins/
+
Job/test,test就是上文创建的Maven构建任务的名称,
后面的token=就是登录token。
4.1代码提交
通过git提交代码,操作步骤不再示例。
4.2触发构建
支持两种触发构建方式:
一是远程构建,发送http请求触发。
在windows平台上,可以安装一个Cmder工具,这样就实现了在windows平台发送curl命令。当然也可以使用其他方式发送http请求。这里只以curl命令为例,因我们构建的有参数,所以远程构建需要同步传递参数:
curl -s -u admin:密码 -X GET http://IP:8080/jenkins/job/test/buildWithParameters?token=11d82237e92310afad810e5e65a3b3f6a0&BUILD_TAG=origin%2Fmaster
二是登录到jenkins控制台,输入用户名密码,用户名是admin
并选择构建好的Maven任务,如下图所示:
选择“Build with Parameters”,如下图所示:
输入BUILD_TAG,即分支名或标签名,点”Build”即可触发构建。
4.3查看构建结果