gitlab+jenkins+harbor持续集成(jenkins篇)
环境描述
主机名/功能 | ip地址/访问方式 | 操作系统 | 版本 | 备注 |
---|---|---|---|---|
master | 192.168.140.210 | CentOS Linux release 7.4.1708 | v1.20.2 | 物理机 |
node1 | 192.168.140.211 | CentOS Linux release 7.4.1708 | v1.20.2 | 物理机 |
node2 | 192.168.140.212 | CentOS Linux release 7.4.1708 | v1.20.2 | 物理机 |
node3 | 192.168.140.213 | CentOS Linux release 7.4.1708 | v1.20.2 | 物理机 |
gitlab | http://192.168.140.212:10000 | v13.8.2 | 容器 | |
jenkins | http://192.168.140.212:29584/ | v2.263.3 | 容器 |
官网文档https://www.jenkins.io/doc/book/installing/kubernetes/
jenkins安装过程
创建jenkins命名空间对资源进行隔离
$ kubectl create namespace jenkins
列出命令空间
$ kubectl get namespaces
编辑jenkins-deployment.yaml用于创建jenkins
这里对官方文件修改了volumeMounts和securityContext对应值,为了之后使用docker in docker功能做准备
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: jenkins
image: jenkins/jenkins:lts-jdk11
ports:
- containerPort: 8080
volumeMounts:
- name: jenkins-home
mountPath: /var/jenkins_home
- name: docker-socket
mountPath: /var/run/docker.sock
- name: docker-command
mountPath: /usr/bin/docker
securityContext:
privileged: true
runAsUser: 0
volumes:
- name: jenkins-home
emptyDir: { }
- name: docker-socket
hostPath:
path: /var/run/docker.sock
- name: docker-command
hostPath:
path: /usr/bin/docker
部署jenkins
$ kubectl create -f jenkins-deployment.yaml -n jenkins
验证部署是否成功
$ kubectl get deployments -n jenkins
创建jenkins-service.yaml 用来暴露端口给外部访问,又名定义service
apiVersion: v1
kind: Service
metadata:
name: jenkins
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
selector:
app: jenkins
创建service
$ kubectl create -f jenkins-service.yaml -n jenkins
验证部署service是否成功,观察映射的port,这里是32664,之后登陆jenkin控制台用
[root@node3 ~]# kubectl get services -n jenkins
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
jenkins NodePort 10.98.249.206 <none> 8080:29584/TCP 11s
查看jenkins pod名称,用来查看log
$ kubectl get pods -n jenkins
$ kubectl logs <pod_name> -n jenkins
日志内容如下,包括默认密码
************************************************************* ************************************************************* ************************************************************* Jenkins initial setup is required. An admin user has been created and a password generated. Please use the following password to proceed to installation: 456b20d93bda48a7b4cea553fe198d43 This may also be found at: /var/jenkins_home/secrets/initialAdminPassword ************************************************************* *************************************************************
登陆jenkin控制台,用户名admin,密码是上面查看的密码
浏览器访问http://nodeip:29584
登陆后界面如下,选择推荐的安装插件即可
等待安装完成
创建一个新的管理员账户,方便之后操作使用
首页展示如下
gitlab安装过程(略)
gitlab配置过程请参考前一篇博客gitlab+jenkins+harbor持续集成(gitlab篇)
gitlab配置过程
这里配置gitlab webhook,并实现gitlab代码更新后,自动化部署的模拟过程
- 首先在gitlab上创建能够访问项目的jenkins用户
修改密码
- 对项目的成员资格进行授权,这里对django_docker项目进行授权,授权给用户jenkins
- 配置gitlab服务器能够ssh免密码登陆到jenkins服务器上
登录到jenkins服务器,生成秘钥
jenkins@jenkins-585799558b-ksgs4:/$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/var/jenkins_home/.ssh/id_rsa):
Created directory '/var/jenkins_home/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /var/jenkins_home/.ssh/id_rsa.
Your public key has been saved in /var/jenkins_home/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:cGyQKp4QcVhurHU1lFhRo3Khc49BQRnCE07/7qLqdSw jenkins@jenkins-585799558b-ksgs4
The key's randomart image is:
+---[RSA 2048]----+
|.+o.+*&Oo |
|o+ o+*+* . |
| .= *oB + |
|.+...= O |
|.o o . S |
| o . . |
| E o . |
| . o.. |
| .o... .. |
+----[SHA256]-----+
将下面的秘钥复制到剪切板中
jenkins@jenkins-585799558b-ksgs4:/$ cat /var/jenkins_home/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7vxo/SLr5kwuoNJbXaXI9296NvWOjSnR33CYRzrfs2G8ycQW++MfAELXF8xJNCw5geDJipPcj8+nn7xYiurKIbGrjnw2qpcnJCd8lOY1nVnqdo6k0SX+uXO6yPxcc+JG4q6SoQjm0+O683eUSZezqRo2YjunVUW3vEUC5zrFJ8nF8goNL6SLXW6iizlZPpu2YFkF30HSFXn9hdpC8WqPxSl34TROj9hFK2e1psEvlfXy7Bj0GNYitogAb5iYh4NsTcG7bUQPv1f2qZW7fMcvQrmLKnCHrdildyXJQApuWNc+bq1nDiflhsOO3BgpmohghrTcegqWheYA82hBcMK6L jenkins@jenkins-585799558b-ksgs4
gitlab上切换到jenkins用户后,添加ssh秘钥
- 创建tokens
复制tokens值(根据自己的实际情况来),之后设置jenkin时会用到
rho2cxLeUYsiik8oJseu
jenkins配置过程
通过web访问jenkins服务,添加gitlab插件
gitlab插件的作用是能够使gitlab上的代码更新触发webhook进行jenkins的构建过程,并将结果反馈给gitlab
- 安装gitlab插件
- gitlab连接设置
token填写gitlab上面创建的token值
设置git客户端连接用户名和email
- 创建jenkins项目
填写项目名称
填写gitlab项目代码获取地址
填写git clone代码时用的用户名和密码
- 创建触发器
这里创建gitlab的webhook触发器,记录webhook的url,之后有用
生成一个token,将这个值记录下来,之后在gitlab上填写webhook信息时候要用
build设置shell脚本,模拟自动化流程,这里比较简单,模拟修改README.md文件后,查看内容是否有改变
- 登陆gitlab平台配置webhook
填写web url网址和秘钥,并取消ssl验证
报错如下,原因是不允许webhook和服务对本地网络进行请求
对网络的外发请求进行配置
允许webhook和服务对本地网络进行请求
创建成功后,再次进行测试
模拟代码更新后,提交的代码能否自动触发jenkins流程并下载最近代码
找一个具有git命令并能连接到gitlab的服务器,执行以下命令
# git clone http://192.168.140.212:10000/root/django_docker.git
# cd django_docker
# git config user.name jenkins
# git config user.email 2@2.com
# echo "ddd" >> README.md
# git add .
# git commit -m "sdd"
# git push -u origin master
报如下错误,原因是gitlab默认对项目进行分支保护,只允许项目的创始人对项目进行代码的变更
remote: GitLab: You are not allowed to push code to protected branches on this project.To http://192.168.140.212:10000/root/django_docker.git ! [remote rejected] master -> master (pre-receive hook declined) error: 无法推送一些引用到 ‘http://192.168.140.212:10000/root/django_docker.git’
关闭分支保护后,再次使用git push提交一次
查看任务状态
通过build history查看任务结果
可以看到代码进行了变化,并按照脚本进行执行,当然最终的目的是实现docker项目的自动更新,并更新docker镜像到harbor上,并可以自动部署到k8s生产环境,这些内容将在后面部署了harbor之后,gitlab+jenkins+harbor持续集成(harbor篇)中进行更新
声明:本博客的原创文章,都是本人平时学习所做的笔记,转载请标注出处,谢谢合作。