说明:本实验使用的Jenkins X版本为V3.2.140

1 安装

(1)从官方github下载离线安装包

https://github.com/jenkins-x/jx/releases/download/v3.2.140/jx-linux-amd64.tar.gz

(2)使用如下命令解压tar文件

tar -zxvf jx-linux-amd64.tar.gz

(3)将解压出来的jx文件使用下面命令移动到 /usr/local/bin

mv jx /usr/local/bin

(4)输入jx命令验证安装是否成功

出现下面的命令说明则安装成功

Jenkins X使用_Jenkins

2 使用

2.1 Jenkins X UI(octant)

(1)执行下述命令,会自动从对应的github仓库下载tar包

jx ui

Jenkins X使用_Jenkins_02

由于服务器无法连接github导致下载失败,我们可以手动从https://github.com/vmware-tanzu/octant/releases/download/v0.20.0/octant_0.20.0_Linux-64bit.tar.gz下载tar包,并上传到服

(2)使用下述命令解压tar包,将解压出来的文件移动到 /usr/local/bin/目录下

tar -zxvf octant_0.20.0_Linux-64bit.tar.gz
mv octant_0.20.0_Linux-64bit/octant /usr/local/bin/

(3)执行octant命令,验证安装是否成功

Jenkins X使用_Group_03

可以看到octant已经运行在7777端口

(4)设置外部访问octant

由于使用ubuntu server版,无法访问127.0.0.1:7777,因需要端口映射,执行下述命令

octant --listener-addr=0.0.0.0:7777

Jenkins X使用_Group_04

打开浏览器即可看到octant界面

Jenkins X使用_github_05

2.2 Jenkins X Dashboard

Octant 是一个应用程序,目的是作为一个单独的客户端工具,Jenkins X计划不去支持Octant的其他托管版本,所以Jenkins X做了一个新的UI(Jenkins X Dashboard)

生成git token:

kubectl create -f git-token.yaml

生成Dashboard后端服务

helm --debug install jx jx-pipelines-visualizer -f values.yaml

values.yaml文件:

jx:                                                                                                                                                                                                                                                                         
  # whether to create a Release CRD when installing charts with Release CRDs included                                                                                                                                                                                       
  releaseCRD: true                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                            
serviceAccount:                                                                                                                                                                                                                                                             
  # allow additional annotations to be added to the ServiceAccount                                                                                                                                                                                                          
  # such as for workload identity on clouds                                                                                                                                                                                                                                 
  annotations: {}                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                            
role:                                                                                                                                                                                                                                                                       
  rules:                                                                                                                                                                                                                                                                    
  - apiGroups:                                                                                                                                                                                                                                                              
    - jenkins.io                                                                                                                                                                                                                                                            
    resources:                                                                                                                                                                                                                                                              
    - pipelineactivities                                                                                                                                                                                                                                                    
    - pipelinestructures                                                                                                                                                                                                                                                    
    verbs:                                                                                                                                                                                                                                                                  
    - list                                                                                                                                                                                                                                                                  
    - watch                                                                                                                                                                                                                                                                 
    - get                                                                                                                                                                                                                                                                   
  - apiGroups:                                                                                                                                                                                                                                                              
    - tekton.dev                                                                                                                                                                                                                                                            
    resources:                                                                                                                                                                                                                                                              
    - pipelineruns                                                                                                                                                                                                                                                          
    - pipelines                                                                                                                                                                                                                                                             
    verbs:                                                                                                                                                                                                                                                                  
    - list                                                                                                                                                                                                                                                                  
    - watch                                                                                                                                                                                                                                                                 
    - get                                                                                                                                                                                                                                                                   
  - apiGroups:                                                                                                                                                                                                                                                              
    - ""                                                                                                                                                                                                                                                                    
    resources:                                                                                                                                                                                                                                                              
    - pods                                                                                                                                                                                                                                                                  
    verbs:                                                                                                                                                                                                                                                                  
    - list                                                                                                                                                                                                                                                                  
    - watch                                                                                                                                                                                                                                                                 
    - get                                                                                                                                                                                                                                                                   
  - apiGroups:                                                                                                                                                                                                                                                              
    - ""                                                                                                                                                                                                                                                                    
    resources:                                                                                                                                                                                                                                                              
    - pods/log                                                                                                                                                                                                                                                              
    verbs:                                                                                                                                                                                                                                                                  
    - get                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                            
extraVolumes: []                                                                                                                                                                                                                                                            
#  - name: config                                                                                                                                                                                                                                                           
#    configMap:                                                                                                                                                                                                                                                             
#      name: minio-certificate                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                            
extraVolumeMounts: []                                                                                                                                                                                                                                                       
#  - name: config                                                                                                                                                                                                                                                           
#    mountPath: /config                                                                                                                                                                                                                                                     
#    readOnly: true

界面:

Jenkins X使用_github_06

Jenkins X使用_Group_07

Jenkins x使用较少,目前看只有阿里和aws在使用,用于代替kubectl helm等操作,以及在公有云上生成集群,和我们的需求不太贴合。另外在 Jenkins X 看来,Jenkins 只不过是 Jenkins X 中的一个应用,是一个黑盒子,编排通过 Tekton 来实现(可以把jenkins去掉),但是这种插件理念也让jenkins X变得异常复杂,不符合现阶段流行的开箱即用的理念。

我想到之前用过的一个专为云原生而存在的平台——Drone,这个表格是对比。

对于 Drone 来说,最大的特征就是容器优先。表格里的其他工具并没有把容器作为默认支持的第一选项。而在 Drone 中,容器则是标配,这也是典型的云原生 CI 工具的特征:一切都在容器中运行。也正因为如此,非容器化开发部署的项目如果采用 Drone 就不太合适了。另外,除了容器方式之外,Drone 也支持本地执行,这为一些特殊的场景提供了可能性(比如绑定设备的自动化测试等)。

Jenkins X使用_Jenkins_08

2.3 Drone安装

获取gitlab权限

Jenkins X使用_Jenkins_09

获取gitlab ID与secret

Jenkins X使用_Group_10

启动drone

docker run \                                                                                                                                                                                                                                                                
  --volume=/var/lib/drone:/data \                                                                                                                                                                                                                                           
  --env=DRONE_GITLAB_SERVER=http://10.8.59.16 \                                                                                                                                                                                                                             
  --env=DRONE_GITLAB_CLIENT_ID=a8c54a8695ec824009856a7e9dff698d05529d1e12b850a04f2266e9fb46beaf \                                                                                                                                                                           
  --env=DRONE_GITLAB_CLIENT_SECRET=c7665e5ef427120a3d4cf05937e197d0fa63df57647b15de6e2ef7aa2e9629b5 \                                                                                                                                                                       
  --env=DRONE_RPC_SECRET=863b4d9d38f3408d78390fb012e4ee4b \                                                                                                                                                                                                                 
  --env=DRONE_SERVER_HOST=10.8.59.174 \                                                                                                                                                                                                                                     
  --env=DRONE_SERVER_PROTO=http \                                                                                                                                                                                                                                           
  --publish=80:80 \                                                                                                                                                                                                                                                         
  --publish=443:443 \                                                                                                                                                                                                                                                       
  --restart=always \                                                                                                                                                                                                                                                        
  --detach=true \                                                                                                                                                                                                                                                           
  --name=drone \                                                                                                                                                                                                                                                            
  drone/drone:1

安装runner

docker run -d \                                                                                                                                                                                                                                                             
  -v /var/run/docker.sock:/var/run/docker.sock \                                                                                                                                                                                                                            
  -e DRONE_RPC_PROTO=http \                                                                                                                                                                                                                                                 
  -e DRONE_RPC_HOST=http://10.8.59.16 \                                                                                                                                                                                                                                     
  -e DRONE_RPC_SECRET=863b4d9d38f3408d78390fb012e4ee4b \                                                                                                                                                                                                                    
  -e DRONE_RUNNER_CAPACITY=2 \                                                                                                                                                                                                                                              
  -e DRONE_RUNNER_NAME=${HOSTNAME} \                                                                                                                                                                                                                                        
  -p 3000:3000 \                                                                                                                                                                                                                                                            
  --restart always \                                                                                                                                                                                                                                                        
  --name runner \                                                                                                                                                                                                                                                           
  drone/drone-runner-docker:latest

界面访问

Jenkins X使用_github_11

可以看到我们gitlab上的项目已经加到drone上了,后面就可以愉快的提交代码触发cicd了。