Jenkins 操作文档
一、前期约定
Jenkins作为一个devops成熟工具,丰富插件支持完成各种复杂等业务场景
此文档以Java web项目为主,集成Jdk、Maven、Git、docker、harbor、k8s等为例方式实现
二、流程图
www.processon.com/view/link/5…
三、gitlab创建项目
1、 创建Group
-
gitlab菜单栏选择Group点击New group
-
填写New Group基本信息,点击Create group
2、 创建项目
-
点击New
-
填写New project基本信息
3、 初始化GIT仓库
-
项目创建成功以后,需要依赖GIT仓库
-
初始化git仓库分两种,第一种直接在gitlab添加文件初始化,第二种git命令
-
gitlab添加文件初始化点击New file,提交文件即可
-
git命令方式初始化仓库
4、 clone项目
-
git项目有多种下载方式,链接方式、压缩包方式
-
链接下载方式,HTTP、SSH链接,其中SSH方式需要添加私钥
-
SSH私钥配置
-
压缩包下载方式,按照压缩包需要手动初始化本地仓库与gitlab建立绑定
四、jenkins配置
1、 Jenkins全局变量
a. 前提需要预先安装Jdk1.8、Maven3.5、Git2.20.1且配置环境变量
b. 配置Manage Jenkins需要具有管理员权限
c. 首页进入全局变量设置ManageJenkins -->Global Tool Configuration,
-
设置Jenkins依赖等Jdk
-
设置Jenkins依赖等Maven
-
设置Jenkins依赖等Git
-
配置全局邮箱
a. 配置全局系统邮箱Manager jenkins->Confingure System->Extended email Notification
b. 配置项目邮箱
i. 进入项目列表item list->configure->Editable Email Notification Publisher->Advanced Setting->Triggers->Advanced
2、 注册用户
-
注册如图所示
-
创建成功,登录账户默认没有权限,如图所示
-
管理员admin账户登录,新创建的用户在People
3、 创建指定角色
-
管理员admin登录进入Manager Jenkins --> Manager and Assign Roles
-
点击Manage Roles
-
创建全局角色、项目角色
备注:配置后点击save按钮
4、 分配指定角色
-
进入Manager and Assign Roles 点击Assign Roles分配创建好的角色
-
管理员amdin为新创建账户分配指定角色
备注:分配成功后,点击save按钮
五、创建Jenkins项目
1、 New Item
-
点击New Item,填写基本信息,点击OK
-
配置General
-
Source Code Management
-
Build Triggers
a. 选择此项,点击下拉菜单中Secret token -->general
- Build
a. 此处选择maven
b. 配置maven
i. 跳过单元测试打包
ii. findbugs静态分析工具
iii. 代码审查
iv. 集成checkstyle规范
- post-build Actions
a. 代码审查报告
备注:此处脚本文件是构建打包成功完成后,执行镜像操作,脚本附下
2、 持续docker生成镜像脚本文件
Dockerfile:
if sudo docker ps -a|grep -i huan-gitlab-citwo-docker;then
sudo docker rm -f huan-gitlab-citwo-docker
docker rmi -f cicd_demo2:1.0
fi
sleep 1
cp /home/yuanbu/work2/*.jar /home/yuanbu/project2/cicd_demo2
cd /home/yuanbu/project2/cicd_demo2
./buildimage.sh
./run.sh
六、webhook绑定Jenkins项目与Gitlab项目
1、 配置gitlab绑定jenkins的webhook
七、项目持续化集成
1、 gitlab修改代码执行git push命令触发
2、 jenkins项目列表
3、 进入jenkins项目每次git push创建一个任务
4、 jenkins构建任务控制台
备注:如果有错误信息会在控制台日志输出
八、Docker生成镜像
1、 Dockerfile文件
# 版本信息
FROM anapsix/alpine-java:latest
# 维护者信息
MAINTAINER cds "huan@huan.tv"
# 拷贝jar包文件至指定目录
ADD huan-gitlab-ci-0.0.1-SNAPSHOT.jar /usr/local/jar/
# 运行指定目录下的jar包
RUN mv /usr/local/jar/huan-gitlab-ci-0.0.1-SNAPSHOT.jar /usr/local/jar/app.jar
# 开启内部服务端口
EXPOSE 8080
# 启动项目
CMD ["java","-jar","/usr/local/jar/app.jar"]
备注:Docker通过Dockerfile文件生成镜像
2、 docker镜像打tag并且推送harbor管理镜像
docker 镜像打tag标签
sudo docker tag huan-cicd-alpine-docker:latest 49.232.112.122:80/ci-cd/huan-cicd-alpine-docker:latest
推送到Harbor管理后台
sudo docker push 49.232.112.122:80/ci-cd/huan-cicd-alpine-docker:latest
拉取docker镜像命令
sudo docker pull 49.232.112.122:80/ci-cd/huan-cicd-alpine-docker:latest
九、Harbor管理镜像
1、 Harbor镜像管理
https://188.131.163.47/harbor/sign-in?redirect_url=%2Fharbor%2Fprojects
备注:管理镜像
十、Kubenetest
1、 配置部署
脚本文件:deployment.yaml
此文件包含项目部署的基本信息
使用此文档需注意镜像路径及版本是否正确
对项目名称命名不允许使用“_”,可以使用“-”命名
apiVersion: extensions/v1beta1
kind: Deployment # 绑定部署yml
metadata:
name: test-jenkins-kubernates #元数据名称,与服务、访问权需要关联此名称
namespace: devops # 命令空间与k8s创建保持一致
labels:
app: test-jenkins-kubernetes
spec:
replicas: 1 #副本即部署服务数量
selector:
matchLabels:
app:
test-jenkins-kubernetes
template:
metadata:
labels:
app:
test-jenkins-kubernetes
spec:
containers:
- name:
test-jenkins-kubernetes
image: harbor.huan.tv/devops/cicd-alpine-habor:1.0
# 镜像文件名称
ports:
- containerPort:
8080
resources:
limits:
cpu:
500m
memory: 500Mi
requests:
cpu:
100m
memory: 100Mi
env:
- name: TZ
value:
Asia/Shanghai
- name: JAVA_OPTS
value:
"-Xmx500m"
volumeMounts:
- name: tz-config
mountPath:
/etc/localtime
imagePullSecrets:
- name: harbor-secret
volumes:
- name: tz-config
hostPath:
path:
/usr/share/zoneinfo/Asia/Shanghai
2、 配置服务
脚本文件:service.yaml
此文件包含项目部署后,需要设置的服务信息
使用此文档事项:
1.metadata下name命名规则:项目名称+“-service”
2.selector下app名称要跟部署文件deployment.yaml中metadata下name的名称一致。
apiVersion: v1
kind: Service
metadata:
name: test-jenkins-service
namespace: devops
labels:
svc: test-jenkins
spec:
selector:
app: test-jenkins
ports:
- port: 8080
targetPort: 8080
3、 配置访问权
脚本文件:ingress.yaml
此文件包含项目的代理服务信息
使用此文档需注意:
1.metadata下name命名规则:项目名称+“-ingress”
2.serviceName的name要与service.yaml中metadata下name一致。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target:
/
name: test-jenkins-kubernetes-ingress
namespace: devops
spec:
rules:
- http:
paths:
- path: /test-jenkins
backend:
serviceName:
test-jenkins-service
servicePort:
8080
4、 访问地址
备注:具体访问k8s配置参阅k8s安装使用文档