本文采用brew安装的jenkins;docker利用镜像安装的gitlab;利用docker利用镜像搭建的本地私有镜像仓库,利用k8s搭建了一套jenkins流水线来实现本地提交代码触发微服务部署的一套流水线。
jenkins安装的方式有很多种,可以在mac系统上利用brew install jenkins来安装,也可以利用docker image的方式安装,当然也可以采用k8s的方式来安装;
brew install jenkins #安装
brew services start jenkins #启动
在浏览器输入http://localhost:8080/或者http://本机ip:8080/即可验证jenkins是否ok,会弹出一个让你输入密码的页面,密码在这个地方查找:
cat secrets/initialAdminPassword
在Jenkins->Manage jenkins->Avaiable->search搜索框输入pipeline,来安装pipeline插件和gitlab插件,也可以再多安装一个blue ocean,这样流水线的ui会好看一些,安装插件的时间会比较就一些,需要耐心等待。
插件安装完之后,点击新建一个流水线,图是这样的,这就代表安装jenkins以及插件过程已经完成了。
这块采用的是docker+image的方式安装的:
$ docker pull gitlab/gitlab-ce #拉取镜像
$ sudo docker run -d \
--hostname xxxx.xxxx.xx \
--name gitlab \
--restart always \
--publish 30001:22 --publish 30000:80 --publish 30002:443 \
--volume $HOME/gitlab/data:/var/opt/gitlab \
--volume $HOME/gitlab/logs:/var/log/gitlab \
--volume $HOME/gitlab/config:/etc/gitlab \
gitlab/gitlab-ce #运行
运行成功后,需要在浏览器上输入http://localhost:30000来访问搭建好的gitlab,此时可以创建一个超级管理员用户,和一个project
$ docker pull registry #
$ docker run -d -v /Users/hfguan/self/docker/registry:/var/lib/registry -p 5000:5000 --restart=always --name private-registry registry #运行
$ curl http://127.0.0.1:5000/v2/_catalog 验证私有仓库是否成功:
{"repositories":[]}
在push镜像到私有仓库之前,先要修改docker的daemon.json文件,其中192.168.1.8是本机的ip
修改daemon.json文件
{
"insecure-registries":["192.168.1.8:5000"],
}
docker tag registry 192.168.1.8:5000/registry:v1 #打tag
docker push 192.168.1.8:5000/registry:v1 #把刚才打好的tag的image push到私有镜像仓库里面
$ curl http://127.0.0.1:5000/v2/_catalog #访问仓库,查看刚才的镜像是否已经成功推动到镜像仓库里
{"repositories":["registry"]}
4.1 在jenkins上新增一条流水线
在User Settings->Access tokens->输入token的名字,勾选权限,点击Create personal access token,生成token后将token 保存下来,为下面jenkins配置做准备。
在Jenkins->Manage jenkins-> configure system->gitlab
添加完gitlab api token,在Gitlab设置界面“Credentials”中选择前面添加的token,然后点击“Test Connection”测试是否成功。测试成功后保存。
jenkins访问gitlab这条单线通了,接下来需要配置gitlab触发jenkins这个方向畅通的配置了。
点击advanced,
新增webhook,在gitlab的刚才创建的project->Setting->webhooks
创建成功后点击test,测试连通性
返回200,代表已经通了,此时jenkins会触发一次pipeline
5. pipeline的创建
5.1 pipeline可以在jenkins的pipeline模块编写,大致是这种:
pipeline{
agent any
stages{
stage('Build'){
steps{
echo 'building...'
}
}
stage('Test'){
steps{
echo 'Test...'
}
}
stage('Deploy'){
steps{
echo 'Deploy...'
}
}
}
}
#来代表从编译,测试,部署的整个过程
5.2 也可以是在微服务中新增一个jenkinsfile,流水线实时拉取,这种是可以在代码项目中更改,不用实时更改流水线的配置。
这里采用的是minikube来搭建单node的只有master节点的k8s集群
$ brew install minikube #安装minikube
安装虚拟机virtualbox
$ minikube start --vm-driver=virtulbox #利用minikube启动一个k8s的单node集群
$ minikube status #查看集群状态
m01
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
安装k8s的命令行工具kubectl
brew install kubectl
kubectl version #查看安装成功与否
搭建微服务很简单,此处略去不表,在微服务的根路径下创建一个Dockerfile,项目地址:https://github.com/gholly/docker-scaffold.git
有关如何写dockerfile,可参照:如何编写Dockerfile
# openjdk:lastest 可从https://hub.docker.com/官方镜像仓库去查找你想要的镜像
FROM openjdk:11
COPY ./build/libs/scaffold-1.0-SNAPSHOT.jar docker-scaffold.jar
#JAVA_OPTS 是用来设置JVM相关运行参数的变量
ENV JAVA_OPTS="-Dserver.port=8081"
EXPOSE 8081
ENTRYPOINT exec java $JAVA_OPTS -jar docker-scaffold.jar
在微服务中创建一个Jenkinsfile的文件,来管理流水线的各个阶段分别做什么,具体可参照pipeline语法的学习:pipeline语法的学习
此处列出一个初版,包含了编译,打镜像,push镜像,利用k8s创建一个资源,待优化:
pipeline {
agent any
stages {
stage('Build'){
steps{
sh './gradlew clean build'
}
}
stage('Build Docker image'){
steps{
sh '/usr/local/bin/docker build -f ./Dockerfile . -t 192.168.1.8:5000/scaffold:v5'
}
}
stage('Docker push image'){
steps{
sh '/usr/local/bin/docker push 192.168.1.8:5000/scaffold:v4'
}
}
stage('kubectl create pod'){
steps{
sh '/usr/local/bin/kubectl apply -f ./deploy/application.yaml '
}
}
}
}
apiVersion: apps/v1
kind: Deployment
metadata:
name: backnd
labels:
name: backnd
spec:
replicas: 2
selector:
matchLabels:
name: backnd
template:
metadata:
labels:
name: backnd
spec:
containers:
- name: scaffold
image: 192.168.1.8:5000/scaffold:v5
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8081
imagePullSecrets:
- name: regsecret
---
apiVersion: v1
kind: Service
metadata:
name: scaffold
spec:
type: NodePort
ports:
- port: 8081
nodePort: 30011
targetPort: 8081
selector:
name: backnd
10. 联调:
将本地创建的项目与gitlab上刚创建的项目尽享绑定,提交代码,然后在jenkins查看流水线是否被触发:
绑定关系:
git remote rename origin old-origin01
git remote add origin http://localhost:30000/gt/pt.git
git push -u origin --all
git push -u origin --tags