前言
之前介绍了
Concourse-CI从入门到放弃
今天来讲讲Jenkins的划时代版本–JenkinsX!
JenkinsX是一个Jenkins的子项目,专门运行在K8S上面.
文章分2部分,第一部分介绍安装,第二部分讲解应用实践.
前期准备
helm
包括客户端和服务端.语法也要了解
运行helm version确保客户端和服务端都没有问题
本地
jx
跟Concourse-CI差不多,一开始也要安装本地CLI
1
2
brew tap jenkins-x/jx
brew install jx
1
2
3
4
5
6
7
8
9
10
➜ ~ jx version
NAME VERSION
jx 1.3.974
jenkins x platform 0.0.3535
Kubernetes cluster v1.11.5
kubectl v1.13.4
helm client v2.10.0+g9ad53aa
helm server v2.10.0+g9ad53aa
git git version 2.14.3 (Apple Git-98)
Operating System Mac OS X 10.13.6 build 17G65
最佳实践是创建自己的myvalue.yaml,修改里面的镜像,一步到位,这样就不需要后期修改了
https://jenkins-x.io/getting-started/config/
服务器
使用国内阿里云ECS作为服务器.
已经创建了ingress的服务和pod
验证安装
jx compliance run会启动一个新的ns和一系列资源去检查整个集群.但由于镜像都是
gcr.io的,所以我启动失败了.有信心的直接跳过这一步吧.
1
2
3
4
5
jx compliance run
jx compliance status
jx compliance results
jx compliance delete
安装步骤
jx install
jx install 是对helm的再度封装.参数分为几部分
default-admin-password 是Jenkins,grafana,nexus,chartmuseum的默认密码,建议设复杂点,不然后期又要修改
--namespace是安装的目标ns.默认是kube-system;
--ingress指定当前的ingress实例,不指定的话会报错,提示找不到jx-ingress
--domain是最终Jenkins-X的对外域名
1
2
3
4
5
6
7
8
9
10
jx \
install \
--cloud-environment-repo https://github.com/haoshuwei/cloud-environments.git \
--default-admin-password abcde \
--provider=kubernetes \
--namespace $(namespace) \
--ingress-service=nginx-ingress-lb \
--ingress-deployment=nginx-ingress-controller \
--ingress-namespace=kube-system
--domain=$(domain)
里面有几个重要的选项,我先后选了
Static Master Jenkins
Kubernetes Workloads: Automated CI+CD with GitOps Promotion
之后会命令行会进入这个等待的状态
waiting for install to be ready, if this is the first time then it will take a while to download images
部署docker镜像,相比一定会碰到不可描述类问题.这时
1
kgpo -l release=jenkins-x
果然发现部分pod启动失败,这时需要把镜像搬回国内,并修改对应的deploy/ds
配置volume
mongodb
先把jenkins-x-mongodb关联的镜像转移到国内,再配置PVC
1
2
jenkins-x-mongodb
docker.io/bitnami/mongodb:3.6.6-debian-9
修改这部分
1
2
3
4
volumes:
- name: data
persistentVolumeClaim:
claimName: jenkins-x-mongodb
jenkins-x-chartmuseum
同样是修改volumes这部分
1
2
3
4
volumes:
- name: storage-volume
persistentVolumeClaim:
claimName: jenkins-x-chartmuseum
jenkins
1
2
3
4
5
6
7
8
9
10
11
12
volumes:
- configMap:
defaultMode: 420
name: jenkins
name: jenkins-config
- emptyDir: {}
name: plugin-dir
- emptyDir: {}
name: secrets-dir
- name: jenkins-home
persistentVolumeClaim:
claimName: jenkins
推荐使用阿里云NAS
转移k8s.gcr.io镜像到国内
Jenkins-X配置了deploy,CronJob,镜像很多都是gcr.io的,两部分都需要修改
deploy
jenkins-x-controllerteam,jenkins-x-controllerbuild
1
2
gcr.io/jenkinsxio/builder-go:0.1.281
这镜像3.72G左右
jenkins-x-heapster
1
2
3
docker pull k8s.gcr.io/heapster:v1.5.2
docker pull k8s.gcr.io/addon-resizer:1.7
# docker tag k8s.gcr.io/addon-resizer:1.7 $newregistry'addon-resizer:1.7'
CronJob
- jenkins-x-gcpreviews
转移完成后,pod基本上就全起来了
最后成果
jenkins,monocular和nexus可以直接访问,其他的暂时不用管
1
2
3
4
5
6
7
8
# $(app).$(namespace).$(domain)
➜ ~ kg ing
NAME HOSTS ADDRESS PORTS AGE
chartmuseum chartmuseum.$(namespace).$(domain) 172.18.221.8 80 17h
docker-registry docker-registry.$(namespace).$(domain) 172.18.221.8 80 17h
jenkins jenkins.$(namespace).$(domain) 172.18.221.8 80 17h
monocular monocular.$(namespace).$(domain) 172.18.221.8 80 17h
nexus nexus.$(namespace).$(domain) 172.18.221.8 80 17h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
➜ ~ kg all -l release=jenkins-x
NAME READY STATUS RESTARTS AGE
pod/jenkins-6879786cbc-6p8f7 1/1 Running 0 17h
pod/jenkins-x-chartmuseum-7557886767-rbvlf 1/1 Running 0 6m
pod/jenkins-x-controllerbuild-74f7bd9f66-5b5v6 1/1 Running 0 16m
pod/jenkins-x-controllercommitstatus-5947679dc4-ltft7 1/1 Running 0 17h
pod/jenkins-x-controllerrole-5d58fcdd9f-lggwj 1/1 Running 0 17h
pod/jenkins-x-controllerteam-75c7565bdb-dmcgw 1/1 Running 0 44m
pod/jenkins-x-controllerworkflow-578bd4f984-qntf4 1/1 Running 0 17h
pod/jenkins-x-docker-registry-7b56b4f555-4p6hx 1/1 Running 0 17h
pod/jenkins-x-gcactivities-1552708800-7qcdc 0/1 Completed 0 10m
pod/jenkins-x-gcpods-1552708800-wfssj 0/1 Completed 0 10m
pod/jenkins-x-gcpreviews-1552654800-pptmn 0/1 ErrImagePull 0 24s
pod/jenkins-x-mongodb-6bd8cc478f-55wwm 1/1 Running 1 18m
pod/jenkins-x-nexus-695cc97bd6-qljhk 1/1 Running 0 17h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/heapster ClusterIP 172.30.2.12 <none> 8082/TCP 17h
service/jenkins ClusterIP 172.30.5.27 <none> 8080/TCP 17h
service/jenkins-x-chartmuseum ClusterIP 172.30.14.160 <none> 8080/TCP 17h
service/jenkins-x-docker-registry ClusterIP 172.30.13.194 <none> 5000/TCP 17h
service/jenkins-x-mongodb ClusterIP 172.30.13.146 <none> 27017/TCP 17h
service/nexus ClusterIP 172.30.4.7 <none> 80/TCP 17h
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.apps/jenkins 1 1 1 1 17h
deployment.apps/jenkins-x-chartmuseum 1 1 1 1 17h
deployment.apps/jenkins-x-controllerbuild 1 1 1 1 17h
deployment.apps/jenkins-x-controllercommitstatus 1 1 1 1 17h
deployment.apps/jenkins-x-controllerrole 1 1 1 1 17h
deployment.apps/jenkins-x-controllerteam 1 1 1 1 17h
deployment.apps/jenkins-x-controllerworkflow 1 1 1 1 17h
deployment.apps/jenkins-x-docker-registry 1 1 1 1 17h
deployment.apps/jenkins-x-mongodb 1 1 1 1 17h
deployment.apps/jenkins-x-nexus 1 1 1 1 17h
NAME DESIRED CURRENT READY AGE
replicaset.apps/jenkins-6879786cbc 1 1 1 17h
replicaset.apps/jenkins-x-chartmuseum-7557886767 1 1 1 6m
replicaset.apps/jenkins-x-chartmuseum-cc467cfc 0 0 0 17h
replicaset.apps/jenkins-x-controllerbuild-57dcb9fd5f 0 0 0 17h
replicaset.apps/jenkins-x-controllerbuild-74f7bd9f66 1 1 1 16m
replicaset.apps/jenkins-x-controllercommitstatus-5947679dc4 1 1 1 17h
replicaset.apps/jenkins-x-controllerrole-5d58fcdd9f 1 1 1 17h
replicaset.apps/jenkins-x-controllerteam-5f57968bc9 0 0 0 17h
replicaset.apps/jenkins-x-controllerteam-75c7565bdb 1 1 1 44m
replicaset.apps/jenkins-x-controllerworkflow-578bd4f984 1 1 1 17h
replicaset.apps/jenkins-x-docker-registry-7b56b4f555 1 1 1 17h
replicaset.apps/jenkins-x-mongodb-6bd8cc478f 1 1 1 23m
replicaset.apps/jenkins-x-mongodb-6bfd5d9c79 0 0 0 17h
replicaset.apps/jenkins-x-nexus-695cc97bd6 1 1 1 17h
NAME DESIRED SUCCESSFUL AGE
job.batch/jenkins-x-gcactivities-1552698000 1 1 3h
job.batch/jenkins-x-gcactivities-1552699800 1 1 2h
job.batch/jenkins-x-gcactivities-1552708800 1 1 10m
job.batch/jenkins-x-gcpods-1552698000 1 1 3h
job.batch/jenkins-x-gcpods-1552699800 1 1 2h
job.batch/jenkins-x-gcpods-1552708800 1 1 10m
job.batch/jenkins-x-gcpreviews-1552654800 1 0 15h
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/jenkins-x-gcactivities 0/30 */3 * * * False 0 10m 17h
cronjob.batch/jenkins-x-gcpods 0/30 */3 * * * False 0 10m 17h
cronjob.batch/jenkins-x-gcpreviews 0 */3 * * * False 1 15h 17h
设置优化
修改jx get urls的结果
需要修改SVC里面的
1
2
3
metadata:
annotations:
fabric8.io/exposeUrl:
- jenkins-x-chartmuseum
- jenkins-x-docker-registry
- jenkins-x-monocular-api
- jenkins-x-monocular-ui
- jenkins
- nexus
修改插件更新中心
访问/pluginManager/advanced,Update Site填上
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/current/update-center.json
自定义git server
todo:
1
2
jx edit addon gitea -e true
jx get addons
其他有用命令
更新整个Jenkins-X平台
1
jx upgrade platform
切换环境
1
2
jx context
jx environment
更新密码
TODO:
参考链接:
Preface
Previously introduced
Concourse-CI from Getting Started to Giving Up
Today let’s talk about the epoch-making version of Jenkins–JenkinsX!
JenkinsX is a sub-project of Jenkins, specifically designed to run on K8S.
The article is divided into 2 parts. Part 1 introduces installation, Part 2 explains application practices.
Prerequisites
helm
Including client and server. Also need to understand the syntax.
Run helm version to ensure both client and server are fine.
Local
jx
Similar to Concourse-CI, you also need to install the local CLI at the beginning.
1
2
brew tap jenkins-x/jx
brew install jx
1
2
3
4
5
6
7
8
9
10
➜ ~ jx version
NAME VERSION
jx 1.3.974
jenkins x platform 0.0.3535
Kubernetes cluster v1.11.5
kubectl v1.13.4
helm client v2.10.0+g9ad53aa
helm server v2.10.0+g9ad53aa
git git version 2.14.3 (Apple Git-98)
Operating System Mac OS X 10.13.6 build 17G65
Best practice is to create your own myvalue.yaml, modify the images inside, do it all at once, so you don’t need to modify later.
https://jenkins-x.io/getting-started/config/
Server
Using domestic Alibaba Cloud ECS as server.
Already created ingress service and pod.
Verify Installation
jx compliance run will start a new ns and a series of resources to check the entire cluster. But since the images are all from
gcr.io, my startup failed. If you’re confident, just skip this step.
1
2
3
4
5
jx compliance run
jx compliance status
jx compliance results
jx compliance delete
Installation Steps
jx install
jx install is a further wrapper around helm. Parameters are divided into several parts.
default-admin-password is the default password for Jenkins, grafana, nexus, chartmuseum. It’s recommended to set it complex, otherwise you’ll have to modify it later.
--namespace is the target ns for installation. Default is kube-system;
--ingress specifies the current ingress instance. If not specified, it will error, prompting that jx-ingress cannot be found.
--domain is the final external domain name for Jenkins-X.
1
2
3
4
5
6
7
8
9
10
jx \
install \
--cloud-environment-repo https://github.com/haoshuwei/cloud-environments.git \
--default-admin-password abcde \
--provider=kubernetes \
--namespace $(namespace) \
--ingress-service=nginx-ingress-lb \
--ingress-deployment=nginx-ingress-controller \
--ingress-namespace=kube-system
--domain=$(domain)
There are several important options inside. I selected in order:
Static Master Jenkins
Kubernetes Workloads: Automated CI+CD with GitOps Promotion
After that, the command line will enter this waiting state:
waiting for install to be ready, if this is the first time then it will take a while to download images
When deploying docker images, you will definitely encounter indescribable problems. At this time:
1
kgpo -l release=jenkins-x
Sure enough, some pods failed to start. At this time, you need to move the images back to domestic, and modify the corresponding deploy/ds.
Configure volume
mongodb
First transfer the image associated with jenkins-x-mongodb to domestic, then configure PVC.
1
2
jenkins-x-mongodb
docker.io/bitnami/mongodb:3.6.6-debian-9
Modify this part:
1
2
3
4
volumes:
- name: data
persistentVolumeClaim:
claimName: jenkins-x-mongodb
jenkins-x-chartmuseum
Also modify the volumes part:
1
2
3
4
volumes:
- name: storage-volume
persistentVolumeClaim:
claimName: jenkins-x-chartmuseum
jenkins
1
2
3
4
5
6
7
8
9
10
11
12
volumes:
- configMap:
defaultMode: 420
name: jenkins
name: jenkins-config
- emptyDir: {}
name: plugin-dir
- emptyDir: {}
name: secrets-dir
- name: jenkins-home
persistentVolumeClaim:
claimName: jenkins
Alibaba Cloud NAS is recommended.
Transfer k8s.gcr.io Images to Domestic
Jenkins-X configures deploy, CronJob. Many images are from gcr.io. Both parts need to be modified.
deploy
jenkins-x-controllerteam,jenkins-x-controllerbuild
1
2
gcr.io/jenkinsxio/builder-go:0.1.281
This image is around 3.72G
jenkins-x-heapster
1
2
3
docker pull k8s.gcr.io/heapster:v1.5.2
docker pull k8s.gcr.io/addon-resizer:1.7
# docker tag k8s.gcr.io/addon-resizer:1.7 $newregistry'addon-resizer:1.7'
CronJob
- jenkins-x-gcpreviews
After transfer is complete, pods basically all come up.
Final Results
jenkins, monocular and nexus can be accessed directly. Others can be ignored for now.
1
2
3
4
5
6
7
8
# $(app).$(namespace).$(domain)
➜ ~ kg ing
NAME HOSTS ADDRESS PORTS AGE
chartmuseum chartmuseum.$(namespace).$(domain) 172.18.221.8 80 17h
docker-registry docker-registry.$(namespace).$(domain) 172.18.221.8 80 17h
jenkins jenkins.$(namespace).$(domain) 172.18.221.8 80 17h
monocular monocular.$(namespace).$(domain) 172.18.221.8 80 17h
nexus nexus.$(namespace).$(domain) 172.18.221.8 80 17h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
➜ ~ kg all -l release=jenkins-x
NAME READY STATUS RESTARTS AGE
pod/jenkins-6879786cbc-6p8f7 1/1 Running 0 17h
pod/jenkins-x-chartmuseum-7557886767-rbvlf 1/1 Running 0 6m
pod/jenkins-x-controllerbuild-74f7bd9f66-5b5v6 1/1 Running 0 16m
pod/jenkins-x-controllercommitstatus-5947679dc4-ltft7 1/1 Running 0 17h
pod/jenkins-x-controllerrole-5d58fcdd9f-lggwj 1/1 Running 0 17h
pod/jenkins-x-controllerteam-75c7565bdb-dmcgw 1/1 Running 0 44m
pod/jenkins-x-controllerworkflow-578bd4f984-qntf4 1/1 Running 0 17h
pod/jenkins-x-docker-registry-7b56b4f555-4p6hx 1/1 Running 0 17h
pod/jenkins-x-gcactivities-1552708800-7qcdc 0/1 Completed 0 10m
pod/jenkins-x-gcpods-1552708800-wfssj 0/1 Completed 0 10m
pod/jenkins-x-gcpreviews-1552654800-pptmn 0/1 ErrImagePull 0 24s
pod/jenkins-x-mongodb-6bd8cc478f-55wwm 1/1 Running 1 18m
pod/jenkins-x-nexus-695cc97bd6-qljhk 1/1 Running 0 17h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/heapster ClusterIP 172.30.2.12 <none> 8082/TCP 17h
service/jenkins ClusterIP 172.30.5.27 <none> 8080/TCP 17h
service/jenkins-x-chartmuseum ClusterIP 172.30.14.160 <none> 8080/TCP 17h
service/jenkins-x-docker-registry ClusterIP 172.30.13.194 <none> 5000/TCP 17h
service/jenkins-x-mongodb ClusterIP 172.30.13.146 <none> 27017/TCP 17h
service/nexus ClusterIP 172.30.4.7 <none> 80/TCP 17h
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.apps/jenkins 1 1 1 1 17h
deployment.apps/jenkins-x-chartmuseum 1 1 1 1 17h
deployment.apps/jenkins-x-controllerbuild 1 1 1 1 17h
deployment.apps/jenkins-x-controllercommitstatus 1 1 1 1 17h
deployment.apps/jenkins-x-controllerrole 1 1 1 1 17h
deployment.apps/jenkins-x-controllerteam 1 1 1 1 17h
deployment.apps/jenkins-x-controllerworkflow 1 1 1 1 17h
deployment.apps/jenkins-x-docker-registry 1 1 1 1 17h
deployment.apps/jenkins-x-mongodb 1 1 1 1 17h
deployment.apps/jenkins-x-nexus 1 1 1 1 17h
NAME DESIRED CURRENT READY AGE
replicaset.apps/jenkins-6879786cbc 1 1 1 17h
replicaset.apps/jenkins-x-chartmuseum-7557886767 1 1 1 6m
replicaset.apps/jenkins-x-chartmuseum-cc467cfc 0 0 0 17h
replicaset.apps/jenkins-x-controllerbuild-57dcb9fd5f 0 0 0 17h
replicaset.apps/jenkins-x-controllerbuild-74f7bd9f66 1 1 1 16m
replicaset.apps/jenkins-x-controllercommitstatus-5947679dc4 1 1 1 17h
replicaset.apps/jenkins-x-controllerrole-5d58fcdd9f 1 1 1 17h
replicaset.apps/jenkins-x-controllerteam-5f57968bc9 0 0 0 17h
replicaset.apps/jenkins-x-controllerteam-75c7565bdb 1 1 1 44m
replicaset.apps/jenkins-x-controllerworkflow-578bd4f984 1 1 1 17h
replicaset.apps/jenkins-x-docker-registry-7b56b4f555 1 1 1 17h
replicaset.apps/jenkins-x-mongodb-6bd8cc478f 1 1 1 23m
replicaset.apps/jenkins-x-mongodb-6bfd5d9c79 0 0 0 17h
replicaset.apps/jenkins-x-nexus-695cc97bd6 1 1 1 17h
NAME DESIRED SUCCESSFUL AGE
job.batch/jenkins-x-gcactivities-1552698000 1 1 3h
job.batch/jenkins-x-gcactivities-1552699800 1 1 2h
job.batch/jenkins-x-gcactivities-1552708800 1 1 10m
job.batch/jenkins-x-gcpods-1552698000 1 1 3h
job.batch/jenkins-x-gcpods-1552699800 1 1 2h
job.batch/jenkins-x-gcpods-1552708800 1 1 10m
job.batch/jenkins-x-gcpreviews-1552654800 1 0 15h
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/jenkins-x-gcactivities 0/30 */3 * * * False 0 10m 17h
cronjob.batch/jenkins-x-gcpods 0/30 */3 * * * False 0 10m 17h
cronjob.batch/jenkins-x-gcpreviews 0 */3 * * * False 1 15h 17h
Settings Optimization
Modify jx get urls Results
Need to modify in SVC:
1
2
3
metadata:
annotations:
fabric8.io/exposeUrl:
- jenkins-x-chartmuseum
- jenkins-x-docker-registry
- jenkins-x-monocular-api
- jenkins-x-monocular-ui
- jenkins
- nexus
Modify Plugin Update Center
Access /pluginManager/advanced, fill in Update Site:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/current/update-center.json
Custom git server
todo:
1
2
jx edit addon gitea -e true
jx get addons
Other Useful Commands
Update Entire Jenkins-X Platform
1
jx upgrade platform
Switch Environment
1
2
jx context
jx environment
Update Password
TODO:
Reference links:
- JD Engineering Efficiency Expert Shi Xuefeng JenkinsX: Next-Generation CI/CD Platform Based on Kubernetes
- JenkinsX Essentials
- Install Jenkins X
- Install and Use Jenkins X: Command-Line Tool for Automated CI/CD on Kubernetes
- 5 Minutes to Set Up jenkins Environment on Alibaba Cloud Kubernetes Service and Complete Application Build to Deployment Pipeline
- Install on Kubernetes
- jx
- Alibaba Cloud Container Service Kubernetes JenkinsX (1) - Installation and Deployment Practice
- Alibaba Cloud Example
序文
以前に紹介した
Concourse-CI入門から放棄まで
今日はJenkinsの画期的なバージョン–JenkinsXについて話しましょう!
JenkinsXはJenkinsのサブプロジェクトで、K8S上で実行するように特別に設計されています。
記事は2つの部分に分かれています。第1部はインストールを紹介し、第2部はアプリケーションの実践を説明します。
前提条件
helm
クライアントとサーバーを含みます。構文も理解する必要があります。
helm versionを実行して、クライアントとサーバーの両方が正常であることを確認します。
ローカル
jx
Concourse-CIと同様に、最初にローカルCLIをインストールする必要があります。
1
2
brew tap jenkins-x/jx
brew install jx
1
2
3
4
5
6
7
8
9
10
➜ ~ jx version
NAME VERSION
jx 1.3.974
jenkins x platform 0.0.3535
Kubernetes cluster v1.11.5
kubectl v1.13.4
helm client v2.10.0+g9ad53aa
helm server v2.10.0+g9ad53aa
git git version 2.14.3 (Apple Git-98)
Operating System Mac OS X 10.13.6 build 17G65
ベストプラクティスは、独自のmyvalue.yamlを作成し、内部のイメージを変更して、一度にすべてを行うことです。そうすれば、後で変更する必要がありません。
https://jenkins-x.io/getting-started/config/
サーバー
国内の阿里云ECSをサーバーとして使用。
すでにingressサービスとpodを作成済み。
インストールの確認
jx compliance runは新しいnsと一連のリソースを起動してクラスター全体をチェックします。ただし、イメージはすべて
gcr.ioのため、起動に失敗しました。自信がある場合は、このステップをスキップしてください。
1
2
3
4
5
jx compliance run
jx compliance status
jx compliance results
jx compliance delete
インストール手順
jx install
jx installはhelmのさらなるラッパーです。パラメータはいくつかの部分に分かれています。
default-admin-passwordはJenkins、grafana、nexus、chartmuseumのデフォルトパスワードです。複雑に設定することをお勧めします。そうしないと、後で変更する必要があります。
--namespaceはインストールのターゲットnsです。デフォルトはkube-systemです。
--ingressは現在のingressインスタンスを指定します。指定しないとエラーになり、jx-ingressが見つからないと表示されます。
--domainはJenkins-Xの最終的な外部ドメイン名です。
1
2
3
4
5
6
7
8
9
10
jx \
install \
--cloud-environment-repo https://github.com/haoshuwei/cloud-environments.git \
--default-admin-password abcde \
--provider=kubernetes \
--namespace $(namespace) \
--ingress-service=nginx-ingress-lb \
--ingress-deployment=nginx-ingress-controller \
--ingress-namespace=kube-system
--domain=$(domain)
内部にはいくつかの重要なオプションがあります。順番に選択しました:
Static Master Jenkins
Kubernetes Workloads: Automated CI+CD with GitOps Promotion
その後、コマンドラインはこの待機状態に入ります:
waiting for install to be ready, if this is the first time then it will take a while to download images
dockerイメージをデプロイする際、説明できない問題に必ず遭遇します。この時:
1
kgpo -l release=jenkins-x
予想通り、一部のpodが起動に失敗しました。この時、イメージを国内に戻し、対応するdeploy/dsを変更する必要があります。
ボリュームの設定
mongodb
まずjenkins-x-mongodbに関連するイメージを国内に転送し、次にPVCを設定します。
1
2
jenkins-x-mongodb
docker.io/bitnami/mongodb:3.6.6-debian-9
この部分を変更:
1
2
3
4
volumes:
- name: data
persistentVolumeClaim:
claimName: jenkins-x-mongodb
jenkins-x-chartmuseum
同様にvolumes部分を変更:
1
2
3
4
volumes:
- name: storage-volume
persistentVolumeClaim:
claimName: jenkins-x-chartmuseum
jenkins
1
2
3
4
5
6
7
8
9
10
11
12
volumes:
- configMap:
defaultMode: 420
name: jenkins
name: jenkins-config
- emptyDir: {}
name: plugin-dir
- emptyDir: {}
name: secrets-dir
- name: jenkins-home
persistentVolumeClaim:
claimName: jenkins
阿里云NASが推奨されます。
k8s.gcr.ioイメージを国内に転送
Jenkins-Xはdeploy、CronJobを設定します。多くのイメージはgcr.ioからです。両方の部分を変更する必要があります。
deploy
jenkins-x-controllerteam、jenkins-x-controllerbuild
1
2
gcr.io/jenkinsxio/builder-go:0.1.281
このイメージは約3.72Gです
jenkins-x-heapster
1
2
3
docker pull k8s.gcr.io/heapster:v1.5.2
docker pull k8s.gcr.io/addon-resizer:1.7
# docker tag k8s.gcr.io/addon-resizer:1.7 $newregistry'addon-resizer:1.7'
CronJob
- jenkins-x-gcpreviews
転送が完了すると、podは基本的にすべて起動します。
最終結果
jenkins、monocular、nexusは直接アクセスできます。他のものは今のところ無視できます。
1
2
3
4
5
6
7
8
# $(app).$(namespace).$(domain)
➜ ~ kg ing
NAME HOSTS ADDRESS PORTS AGE
chartmuseum chartmuseum.$(namespace).$(domain) 172.18.221.8 80 17h
docker-registry docker-registry.$(namespace).$(domain) 172.18.221.8 80 17h
jenkins jenkins.$(namespace).$(domain) 172.18.221.8 80 17h
monocular monocular.$(namespace).$(domain) 172.18.221.8 80 17h
nexus nexus.$(namespace).$(domain) 172.18.221.8 80 17h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
➜ ~ kg all -l release=jenkins-x
NAME READY STATUS RESTARTS AGE
pod/jenkins-6879786cbc-6p8f7 1/1 Running 0 17h
pod/jenkins-x-chartmuseum-7557886767-rbvlf 1/1 Running 0 6m
pod/jenkins-x-controllerbuild-74f7bd9f66-5b5v6 1/1 Running 0 16m
pod/jenkins-x-controllercommitstatus-5947679dc4-ltft7 1/1 Running 0 17h
pod/jenkins-x-controllerrole-5d58fcdd9f-lggwj 1/1 Running 0 17h
pod/jenkins-x-controllerteam-75c7565bdb-dmcgw 1/1 Running 0 44m
pod/jenkins-x-controllerworkflow-578bd4f984-qntf4 1/1 Running 0 17h
pod/jenkins-x-docker-registry-7b56b4f555-4p6hx 1/1 Running 0 17h
pod/jenkins-x-gcactivities-1552708800-7qcdc 0/1 Completed 0 10m
pod/jenkins-x-gcpods-1552708800-wfssj 0/1 Completed 0 10m
pod/jenkins-x-gcpreviews-1552654800-pptmn 0/1 ErrImagePull 0 24s
pod/jenkins-x-mongodb-6bd8cc478f-55wwm 1/1 Running 1 18m
pod/jenkins-x-nexus-695cc97bd6-qljhk 1/1 Running 0 17h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/heapster ClusterIP 172.30.2.12 <none> 8082/TCP 17h
service/jenkins ClusterIP 172.30.5.27 <none> 8080/TCP 17h
service/jenkins-x-chartmuseum ClusterIP 172.30.14.160 <none> 8080/TCP 17h
service/jenkins-x-docker-registry ClusterIP 172.30.13.194 <none> 5000/TCP 17h
service/jenkins-x-mongodb ClusterIP 172.30.13.146 <none> 27017/TCP 17h
service/nexus ClusterIP 172.30.4.7 <none> 80/TCP 17h
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.apps/jenkins 1 1 1 1 17h
deployment.apps/jenkins-x-chartmuseum 1 1 1 1 17h
deployment.apps/jenkins-x-controllerbuild 1 1 1 1 17h
deployment.apps/jenkins-x-controllercommitstatus 1 1 1 1 17h
deployment.apps/jenkins-x-controllerrole 1 1 1 1 17h
deployment.apps/jenkins-x-controllerteam 1 1 1 1 17h
deployment.apps/jenkins-x-controllerworkflow 1 1 1 1 17h
deployment.apps/jenkins-x-docker-registry 1 1 1 1 17h
deployment.apps/jenkins-x-mongodb 1 1 1 1 17h
deployment.apps/jenkins-x-nexus 1 1 1 1 17h
NAME DESIRED CURRENT READY AGE
replicaset.apps/jenkins-6879786cbc 1 1 1 17h
replicaset.apps/jenkins-x-chartmuseum-7557886767 1 1 1 6m
replicaset.apps/jenkins-x-chartmuseum-cc467cfc 0 0 0 17h
replicaset.apps/jenkins-x-controllerbuild-57dcb9fd5f 0 0 0 17h
replicaset.apps/jenkins-x-controllerbuild-74f7bd9f66 1 1 1 16m
replicaset.apps/jenkins-x-controllercommitstatus-5947679dc4 1 1 1 17h
replicaset.apps/jenkins-x-controllerrole-5d58fcdd9f 1 1 1 17h
replicaset.apps/jenkins-x-controllerteam-5f57968bc9 0 0 0 17h
replicaset.apps/jenkins-x-controllerteam-75c7565bdb 1 1 1 44m
replicaset.apps/jenkins-x-controllerworkflow-578bd4f984 1 1 1 17h
replicaset.apps/jenkins-x-docker-registry-7b56b4f555 1 1 1 17h
replicaset.apps/jenkins-x-mongodb-6bd8cc478f 1 1 1 23m
replicaset.apps/jenkins-x-mongodb-6bfd5d9c79 0 0 0 17h
replicaset.apps/jenkins-x-nexus-695cc97bd6 1 1 1 17h
NAME DESIRED SUCCESSFUL AGE
job.batch/jenkins-x-gcactivities-1552698000 1 1 3h
job.batch/jenkins-x-gcactivities-1552699800 1 1 2h
job.batch/jenkins-x-gcactivities-1552708800 1 1 10m
job.batch/jenkins-x-gcpods-1552698000 1 1 3h
job.batch/jenkins-x-gcpods-1552699800 1 1 2h
job.batch/jenkins-x-gcpods-1552708800 1 1 10m
job.batch/jenkins-x-gcpreviews-1552654800 1 0 15h
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/jenkins-x-gcactivities 0/30 */3 * * * False 0 10m 17h
cronjob.batch/jenkins-x-gcpods 0/30 */3 * * * False 0 10m 17h
cronjob.batch/jenkins-x-gcpreviews 0 */3 * * * False 1 15h 17h
設定の最適化
jx get urlsの結果を変更
SVC内で変更する必要があります:
1
2
3
metadata:
annotations:
fabric8.io/exposeUrl:
- jenkins-x-chartmuseum
- jenkins-x-docker-registry
- jenkins-x-monocular-api
- jenkins-x-monocular-ui
- jenkins
- nexus
プラグイン更新センターを変更
/pluginManager/advancedにアクセスし、Update Siteに記入:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/current/update-center.json
カスタムgitサーバー
todo:
1
2
jx edit addon gitea -e true
jx get addons
その他の有用なコマンド
全体のJenkins-Xプラットフォームを更新
1
jx upgrade platform
環境の切り替え
1
2
jx context
jx environment
パスワードの更新
TODO:
参考リンク:
Предисловие
Ранее представлено
Concourse-CI от начала до отказа
Сегодня поговорим о эпохальной версии Jenkins–JenkinsX!
JenkinsX — это подпроект Jenkins, специально разработанный для работы на K8S.
Статья разделена на 2 части. Часть 1 знакомит с установкой, Часть 2 объясняет практики применения.
Предварительные требования
helm
Включая клиент и сервер. Также нужно понять синтаксис.
Запустите helm version, чтобы убедиться, что и клиент, и сервер в порядке.
Локально
jx
Подобно Concourse-CI, в начале также нужно установить локальный CLI.
1
2
brew tap jenkins-x/jx
brew install jx
1
2
3
4
5
6
7
8
9
10
➜ ~ jx version
NAME VERSION
jx 1.3.974
jenkins x platform 0.0.3535
Kubernetes cluster v1.11.5
kubectl v1.13.4
helm client v2.10.0+g9ad53aa
helm server v2.10.0+g9ad53aa
git git version 2.14.3 (Apple Git-98)
Operating System Mac OS X 10.13.6 build 17G65
Лучшая практика — создать свой собственный myvalue.yaml, изменить образы внутри, сделать все сразу, чтобы не нужно было изменять позже.
https://jenkins-x.io/getting-started/config/
Сервер
Использование внутреннего Alibaba Cloud ECS в качестве сервера.
Уже созданы сервис и под ingress.
Проверка установки
jx compliance run запустит новый ns и серию ресурсов для проверки всего кластера. Но поскольку образы все из
gcr.io, мой запуск не удался. Если вы уверены, просто пропустите этот шаг.
1
2
3
4
5
jx compliance run
jx compliance status
jx compliance results
jx compliance delete
Шаги установки
jx install
jx install — это дальнейшая обертка вокруг helm. Параметры разделены на несколько частей.
default-admin-password — это пароль по умолчанию для Jenkins, grafana, nexus, chartmuseum. Рекомендуется установить его сложным, иначе придется изменять позже.
--namespace — целевой ns для установки. По умолчанию kube-system;
--ingress указывает текущий экземпляр ingress. Если не указан, будет ошибка, подсказка, что jx-ingress не найден.
--domain — это окончательное внешнее доменное имя для Jenkins-X.
1
2
3
4
5
6
7
8
9
10
jx \
install \
--cloud-environment-repo https://github.com/haoshuwei/cloud-environments.git \
--default-admin-password abcde \
--provider=kubernetes \
--namespace $(namespace) \
--ingress-service=nginx-ingress-lb \
--ingress-deployment=nginx-ingress-controller \
--ingress-namespace=kube-system
--domain=$(domain)
Внутри есть несколько важных опций. Я выбрал по порядку:
Static Master Jenkins
Kubernetes Workloads: Automated CI+CD with GitOps Promotion
После этого командная строка войдет в это состояние ожидания:
waiting for install to be ready, if this is the first time then it will take a while to download images
При развертывании docker-образов вы обязательно столкнетесь с неописуемыми проблемами. В это время:
1
kgpo -l release=jenkins-x
Как и ожидалось, некоторые поды не запустились. В это время нужно перенести образы обратно в страну и изменить соответствующие deploy/ds.
Настройка volume
mongodb
Сначала перенесите образ, связанный с jenkins-x-mongodb, в страну, затем настройте PVC.
1
2
jenkins-x-mongodb
docker.io/bitnami/mongodb:3.6.6-debian-9
Измените эту часть:
1
2
3
4
volumes:
- name: data
persistentVolumeClaim:
claimName: jenkins-x-mongodb
jenkins-x-chartmuseum
Также измените часть volumes:
1
2
3
4
volumes:
- name: storage-volume
persistentVolumeClaim:
claimName: jenkins-x-chartmuseum
jenkins
1
2
3
4
5
6
7
8
9
10
11
12
volumes:
- configMap:
defaultMode: 420
name: jenkins
name: jenkins-config
- emptyDir: {}
name: plugin-dir
- emptyDir: {}
name: secrets-dir
- name: jenkins-home
persistentVolumeClaim:
claimName: jenkins
Рекомендуется Alibaba Cloud NAS.
Перенос образов k8s.gcr.io в страну
Jenkins-X настраивает deploy, CronJob. Многие образы из gcr.io. Обе части нужно изменить.
deploy
jenkins-x-controllerteam,jenkins-x-controllerbuild
1
2
gcr.io/jenkinsxio/builder-go:0.1.281
Этот образ около 3.72G
jenkins-x-heapster
1
2
3
docker pull k8s.gcr.io/heapster:v1.5.2
docker pull k8s.gcr.io/addon-resizer:1.7
# docker tag k8s.gcr.io/addon-resizer:1.7 $newregistry'addon-resizer:1.7'
CronJob
- jenkins-x-gcpreviews
После завершения переноса поды в основном все поднимаются.
Финальные результаты
jenkins, monocular и nexus можно получить прямой доступ. Остальные пока можно игнорировать.
1
2
3
4
5
6
7
8
# $(app).$(namespace).$(domain)
➜ ~ kg ing
NAME HOSTS ADDRESS PORTS AGE
chartmuseum chartmuseum.$(namespace).$(domain) 172.18.221.8 80 17h
docker-registry docker-registry.$(namespace).$(domain) 172.18.221.8 80 17h
jenkins jenkins.$(namespace).$(domain) 172.18.221.8 80 17h
monocular monocular.$(namespace).$(domain) 172.18.221.8 80 17h
nexus nexus.$(namespace).$(domain) 172.18.221.8 80 17h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
➜ ~ kg all -l release=jenkins-x
NAME READY STATUS RESTARTS AGE
pod/jenkins-6879786cbc-6p8f7 1/1 Running 0 17h
pod/jenkins-x-chartmuseum-7557886767-rbvlf 1/1 Running 0 6m
pod/jenkins-x-controllerbuild-74f7bd9f66-5b5v6 1/1 Running 0 16m
pod/jenkins-x-controllercommitstatus-5947679dc4-ltft7 1/1 Running 0 17h
pod/jenkins-x-controllerrole-5d58fcdd9f-lggwj 1/1 Running 0 17h
pod/jenkins-x-controllerteam-75c7565bdb-dmcgw 1/1 Running 0 44m
pod/jenkins-x-controllerworkflow-578bd4f984-qntf4 1/1 Running 0 17h
pod/jenkins-x-docker-registry-7b56b4f555-4p6hx 1/1 Running 0 17h
pod/jenkins-x-gcactivities-1552708800-7qcdc 0/1 Completed 0 10m
pod/jenkins-x-gcpods-1552708800-wfssj 0/1 Completed 0 10m
pod/jenkins-x-gcpreviews-1552654800-pptmn 0/1 ErrImagePull 0 24s
pod/jenkins-x-mongodb-6bd8cc478f-55wwm 1/1 Running 1 18m
pod/jenkins-x-nexus-695cc97bd6-qljhk 1/1 Running 0 17h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/heapster ClusterIP 172.30.2.12 <none> 8082/TCP 17h
service/jenkins ClusterIP 172.30.5.27 <none> 8080/TCP 17h
service/jenkins-x-chartmuseum ClusterIP 172.30.14.160 <none> 8080/TCP 17h
service/jenkins-x-docker-registry ClusterIP 172.30.13.194 <none> 5000/TCP 17h
service/jenkins-x-mongodb ClusterIP 172.30.13.146 <none> 27017/TCP 17h
service/nexus ClusterIP 172.30.4.7 <none> 80/TCP 17h
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.apps/jenkins 1 1 1 1 17h
deployment.apps/jenkins-x-chartmuseum 1 1 1 1 17h
deployment.apps/jenkins-x-controllerbuild 1 1 1 1 17h
deployment.apps/jenkins-x-controllercommitstatus 1 1 1 1 17h
deployment.apps/jenkins-x-controllerrole 1 1 1 1 17h
deployment.apps/jenkins-x-controllerteam 1 1 1 1 17h
deployment.apps/jenkins-x-controllerworkflow 1 1 1 1 17h
deployment.apps/jenkins-x-docker-registry 1 1 1 1 17h
deployment.apps/jenkins-x-mongodb 1 1 1 1 17h
deployment.apps/jenkins-x-nexus 1 1 1 1 17h
NAME DESIRED CURRENT READY AGE
replicaset.apps/jenkins-6879786cbc 1 1 1 17h
replicaset.apps/jenkins-x-chartmuseum-7557886767 1 1 1 6m
replicaset.apps/jenkins-x-chartmuseum-cc467cfc 0 0 0 17h
replicaset.apps/jenkins-x-controllerbuild-57dcb9fd5f 0 0 0 17h
replicaset.apps/jenkins-x-controllerbuild-74f7bd9f66 1 1 1 16m
replicaset.apps/jenkins-x-controllercommitstatus-5947679dc4 1 1 1 17h
replicaset.apps/jenkins-x-controllerrole-5d58fcdd9f 1 1 1 17h
replicaset.apps/jenkins-x-controllerteam-5f57968bc9 0 0 0 17h
replicaset.apps/jenkins-x-controllerteam-75c7565bdb 1 1 1 44m
replicaset.apps/jenkins-x-controllerworkflow-578bd4f984 1 1 1 17h
replicaset.apps/jenkins-x-docker-registry-7b56b4f555 1 1 1 17h
replicaset.apps/jenkins-x-mongodb-6bd8cc478f 1 1 1 23m
replicaset.apps/jenkins-x-mongodb-6bfd5d9c79 0 0 0 17h
replicaset.apps/jenkins-x-nexus-695cc97bd6 1 1 1 17h
NAME DESIRED SUCCESSFUL AGE
job.batch/jenkins-x-gcactivities-1552698000 1 1 3h
job.batch/jenkins-x-gcactivities-1552699800 1 1 2h
job.batch/jenkins-x-gcactivities-1552708800 1 1 10m
job.batch/jenkins-x-gcpods-1552698000 1 1 3h
job.batch/jenkins-x-gcpods-1552699800 1 1 2h
job.batch/jenkins-x-gcpods-1552708800 1 1 10m
job.batch/jenkins-x-gcpreviews-1552654800 1 0 15h
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/jenkins-x-gcactivities 0/30 */3 * * * False 0 10m 17h
cronjob.batch/jenkins-x-gcpods 0/30 */3 * * * False 0 10m 17h
cronjob.batch/jenkins-x-gcpreviews 0 */3 * * * False 1 15h 17h
Оптимизация настроек
Изменить результаты jx get urls
Нужно изменить в SVC:
1
2
3
metadata:
annotations:
fabric8.io/exposeUrl:
- jenkins-x-chartmuseum
- jenkins-x-docker-registry
- jenkins-x-monocular-api
- jenkins-x-monocular-ui
- jenkins
- nexus
Изменить центр обновления плагинов
Доступ к /pluginManager/advanced, заполните Update Site:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/current/update-center.json
Пользовательский git-сервер
todo:
1
2
jx edit addon gitea -e true
jx get addons
Другие полезные команды
Обновить всю платформу Jenkins-X
1
jx upgrade platform
Переключить окружение
1
2
jx context
jx environment
Обновить пароль
TODO:
Ссылки:
- Эксперт по инженерной эффективности JD Ши Сюэфэн JenkinsX: Платформа CI/CD следующего поколения на основе Kubernetes
- JenkinsX Essentials
- Установка Jenkins X
- Установка и использование Jenkins X: Инструмент командной строки для автоматизированного CI/CD на Kubernetes
- 5 минут для настройки среды jenkins на службе Alibaba Cloud Kubernetes и завершения конвейера от сборки приложения до развертывания
- Установка на Kubernetes
- jx
- JenkinsX Alibaba Cloud Container Service Kubernetes (1) - Практика установки и развертывания
- Пример Alibaba Cloud