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.201        8080: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"