1.下载相应文件
mkdir jenkins && cd jenkins wget https://raw.githubusercontent.com/zhijiansd/ansible-k8s/master/addons/jenkins/jenkins-rbac.yaml wget https://raw.githubusercontent.com/zhijiansd/ansible-k8s/master/addons/jenkins/jenkins.yaml
注:这里的RBAC文件是参考stackoverflow上一个问答而来,现在找不了链接了,但是依然感谢
2.部署Jenkins
kubectl create -f .
3.查看 Pod 和 Services
# kubectl -n kube-ops get pod NAME READY STATUS RESTARTS AGE jenkins-78d577d47-pbcqv 1/1 Running 0 1m # kubectl -n kube-ops get service jenkins NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE jenkins LoadBalancer 10.244.1.2018080:37899/TCP,50000:36476/TCP 2m
注:使用NodeIP:37899即可进入Jenkins的web界面,而在这里我配置了traefik。
4.查看Jenkins密钥并开始安装Jenkins
# kubectl -n kube-ops exec -it jenkins-78d577d47-pbcqv cat /var/jenkins_home/secrets/initialAdminPassword f547dd8a21384640ba0bfe4282912bf7
5.安装插件
6.创建管理员用户
7.配置Jenkins URL并保存
8.点击“开始使用Jenkins”使用Jenkins
9.Jenkins界面如下
10.安装 Kubernetes 和 GitLab 插件
11.单击【系统管理】-> 【系统设置】,拖到最后找到【云】,然后点击【新增一个云】
12.配置kubernetes
配置注释:
name: kubernetes(默认)
kubernetes 地址: https://kubernetes.default.svc.cluster.local(这里使用kube-dns,也可以配置apiserver地址)
Jenkins 地址: http://jenkins:8080(这里配置的Jenkins是service名,也可以直接配置http://ip:port)
Jenkins 通道: jenkins:50000(这里也是配置的service:port,也可以配置ip:port)
这里没有添加凭据,因为已经在rbac文件中做了相关配置。如使用二进制包等集群外安装的Jenkins,则需要添加凭据。
点击【Test Connection】,如出现 Connection test successful 证明 Jenkins 已经可以和 Kubernetes 建立连接了。
13.配置Jenkins slave
配置注释:
名称: 如 --> jenkins-slave
标签列表: 如 --> auto
用法: 尽可能的使用这个节点
容器列表:
容器模板:
名称: jnlp
Docker镜像: 192.168.100.100/jenkinsci/jnlp-slave:3.23-1-alpine
工作目录: /home/jenkins(默认)
命令参数: '${computer.jnlpmac} ${computer.name}'
分配伪终端: true(默认)
14.构建一个流水线(pipeline)项目
测试脚本如下:
def label = "mypod-${UUID.randomUUID().toString()}" podTemplate(label: 'mypod', cloud:'kubernetes') { node('mypod') { stage('Run shell') { sh 'echo hello world' } } }
注:这里的 cloud 要与前面配置的云的名称相同。
更多详情: https://github.com/jenkinsci/kubernetes-plugin
15.点击【立即构建】进行构建
16.构建完成后显示如下(蓝色为成功,红色为失败)
17.点击相应构建查看<控制台输出>
18.指定使用私有 slave 节点镜像构建流水线(pipeline)项目
podTemplate(label: 'mypod', cloud: 'kubernetes', containers: [ containerTemplate( name: 'jnlp', image: '192.168.100.100/jenkinsci/jnlp-slave:3.23-1-alpine', alwaysPullImage: true, args: '${computer.jnlpmac} ${computer.name}'), ], volumes: [ hostPathVolume( mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'), ],) { node('mypod') { stage('Run shell') { sh 'echo hello world' } } }
19.点击相应构建查看<控制台输出>,这时候使用的就是自定义的slave镜像了
20.单击【系统管理】-> 【系统设置】,配置连接GitLab,点击【Test Connection】,出现Success即为连接成功
配置注释:
Connection name: gitlab
Gitlab host URL: http://gitlab(此处gitlab使用的是http://service,也可以直接配置IP)
Credentials: 【Add】 -> 【Jenkins】 ->
Jenkins凭据提供者:Jenkins
添加凭据:
Domain: 全局凭据(默认)
类型: GitLab API token
范围: 全局(默认)
API token:********
在GitLab用户下创建 API token,点击【Create personal access token】创建令×××(只存在一次,记得保存)
配置注释:
Name: jenkins(随意配置)
Expires at: 2028-08-08(随意配置)
Scopes: api(必须勾选)
21.使用 Jenkins "构建一个自由风格的软件项目"
A.在“General”下勾选“限制项目的运行节点”并填写slave标签
B.在“源码管理”下配置“Git”
配置注释:
Git:
Repository URL: 如 http://gitlab/wangzhijian/abc.git
Credentials:
Add:
Domain: 全局凭据
类型: Username with password
范围: 全局
Username: wangzhijian
Password: ******
注:如配置正确不会有任何提示,配置错误会有提示(一般来说是凭据错误)
C.构建触发器
配置注释:
勾选"Build when a change is pushed to GitLab. GitLab webhook URL"
高级:
Allowed branches:
Filter branches by regex: true
Target Branch Regex: master
Secret token: 点击 Cenerate 进行创建,然后复制 token 至 gitlab
进入相关项目“Settings” --> "Integrations" -->
URL: http://jenkins/project/abc (这里配置的是service,并不是构建触发器上的https://jenkins.zhi.io/project/abc)
Secret Token: 这里配置就是上面Jenkins生成是secret token(Jenkins工程和GitLab项目的token必须一样才能拉取)
D.构建,选择"执行shell"并写入命令(注:gitlab下我写了一个hello.sh的shell)
E.点击"立即构建"进行构建,如果构建成功即会显示"Finished: SUCCESS"