Jenkins-X
默认提供了不同语言的各种例子,我们先学习默认的例子,再按照自身情况做一些适配.
先梳理一下构建流程
从git server(GitHub/gitea)拉取代码->构建docker镜像->推送到镜像仓库
建议一开始用jx create创建官方的例子,推送到 GitHub,熟悉以后再慢慢修改
1
2
3
4
5
6
7
8
9
10
11
12
13
jx create spring -d web -d actuator
jx create quickstart -l java
jx create quickstart \
-l java \
--docker-registry-org zeusro \
--git-username zeusro \
--org zeusro \
--git-provider-kind gitea \
--git-provider-url https://gitea.com \
--git-host https://gitea.com \
--import-commit-message init \
--name java-abcde \
--project-name java-abcde
前置准备
Disable https certificate check
域名没证书的得勾上,路径在Manage Jenkins
-Configure System
修改 Kubernetes Pod Template
Jenkins
是拉取到Jenkins的工作目录(服务器),而Jenkins-X
是根据设置的模板启动启动一个pod,这个pod有2个容器,一个是jnlp-slave
,另外一个是构建工具的镜像,如果是gradle
构建的话镜像就是gcr.io/jenkinsxio/builder-gradle
.
所以需要一下模板.路径在Manage Jenkins
-Configure System
-Images
-Kubernetes Pod Template
,按照特定构建语言迁移,修改.
依赖项加速
- maven加速
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8"?>
<settings xmlns="https://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
</mirrors>
<profiles>
<profile/>
</profiles>
</settings>
- gradle加速
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
allprojects {
apply plugin: 'maven'
group = 'com.hh.onekey'
version = '2.0.0'
}
subprojects {
apply plugin: 'java'
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenLocal()
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
maven { url "https://plugins.gradle.org/m2/" }
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
}
allprojects {
repositories {
mavenLocal()
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
maven { url "https://plugins.gradle.org/m2/" }
}
}
构建前置依赖
有3种思路,任选一种即可.推荐第一种
[推荐]交付到mvn local
这个思路是在我构建缓存时想到的.普通的pipeline构建流程,每次构建都是一个从零开始的沙箱,需要重新下载包再去构建.非常浪费流量.因此如果把mvnlocal挂载到容器内部,那么直接在本地还原即可,有问题时再从网络拉取.
这样就能同时解决构建前置依赖
和开源依赖拉取
的问题
目前支持的volume有
- PVC
- NFS
- hostpath
推荐用NFS.
gradle:挂载到/root/.gradle/caches
maven:挂载到/root/.mvnrepository
交付给Nexus
todo
关联其他pipeline
todo
从其他git server(gitea)拉取代码
1
2
3
jx create git server gitea http://xxx:1080
# jx delete git server gitea
jx get git
目前删除的命令还比较蠢,只能按类型删除,如果加了2个gitea类型的git server,删除的时候会先删除最早创建的那个gitea server
构建docker镜像
构建依赖于项目内的Jenkinsfile
和Dockerfile
关于Jenkinsfile
的语法,另写一篇文章讲解
推送docker镜像到自定义源
- 修改DOCKER_REGISTR
默认的设定是推送到创建Jenkins-X
时建立的docker REGISTRY,要把它改成我们自己的服务器
配置路径: Manage Jenkins
-Global properties
修改DOCKER_REGISTRY这个变量
1
2
# 阿里云深圳vpc
registry-vpc.cn-shenzhen.aliyuncs.com/
1
2
3
4
jx create docker auth \
--host "registry-vpc.cn-shenzhen.aliyuncs.com" \
--user "foo" --secret "FooDockerHubToken" \
--email "[email protected]"
之后在部署该Jenkins-X
实例的kubernetes 命名空间,会出现jenkins-docker-cfg
的secret,这个secret是一个json
1
2
3
4
5
6
7
8
{
"auths": {
"registry-vpc.cn-shenzhen.aliyuncs.com": {
"auth": "xxxxxxxxxx",
"email": "[email protected]"
}
}
}
要让容器通过这个json里面的auth字段,实现对docker registry的登录.
所以还需要把这个secret挂载到容器内部,还好这一步默认的pod template已经设置了.
除此以外,还有其他的授权方法