运行:
sudo docker run --detach \
--hostname gitlab.glj-site.com \
--publish 4443:443 --publish 8880:80 --publish 23:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
注意:如果这里修改了80端口可能出现如下错误:
原因就是运行git remote add origin http://45.77.**.**/root/webmaven.git
是默认是80端口,由于你修改了80端口,所以就会报错,如果修改为88端口,则应该运行:git remote add origin http://45.77.**.**:88/root/webmaven.git
来指明端口。貌似修改了22端口会影响https。
运行:
sudo docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
注册时需要提供一个Url和token,获取地址如下图:
运行进行sudo docker exec -it gitlab-runner gitlab-ci-multi-runner register
容器
具体注册如下图:
1. 什么情况下需要注册Shared Runner? 比如,GitLab上面所有的工程都有可能需要在公司的服务器上进行编译、测试、部署等工作,这个时候注册一个Shared Runner供所有工程使用就很合适。 1. 什么情况下需要注册Specific Runner? 比如,我可能需要在我个人的电脑或者服务器上自动构建我参与的某个工程,这个时候注册一个Specific Runner就很合适。 1. 什么情况下需要在同一台机器上注册多个Runner? 比如,我是GitLab的普通用户,没有管理员权限,我同时参与多个项目,那我就需要为我的所有项目都注册一个Specific Runner,这个时候就需要在同一台机器上注册多个Runner。
基于kubernetes运行runner还是需要先通过docker启动一个临时runner注册一个runner token(参考基于docker运行Gitlab-Runner)
1. 获取配置参数
运行:docker exec -it 31238d7cbe9d vi /etc/gitlab-runner/config.toml
1. 创建configMap
编写k8s-cicd-runner-cm.yaml文件,内容如下:
apiVersion: v1
kind: ConfigMap
metadata:
name: gitlab-runner
data:
config.toml: |
#通过临时runner里获取而来 :docker exec -it 31238d7cbe9d vi /etc/gitlab-runner/config.toml
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "devops-k8s-runner-1"
url = "http://8.6.*.*/"
token = "0c98472b0c23592e915cfc1dad60"
executor = "docker"
[runners.docker]
tls_verify = false
image = "ruby:2.1"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
运行:kubectl apply -f k8s-cicd-runner-cm.yaml
1. 编写runner的deployment.yaml文件
编写k8s-cicd-runner.yaml文件,内容如下:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: gitlab-runner
spec:
replicas: 1
selector:
matchLabels:
name: gitlab-runner
template:
metadata:
labels:
name: gitlab-runner
spec:
imagePullSecrets:
- name: docker-secret
containers:
- args:
- run
image: gitlab/gitlab-runner:latest
imagePullPolicy: IfNotPresent
name: gitlab-runner
volumeMounts:
- mountPath: /etc/gitlab-runner
name: config
readOnly: true
restartPolicy: Always
volumes:
- configMap:
name: gitlab-runner
name: config
运行:kubectl apply -f k8s-cicd-runner.yaml
搭建参考:使用harbor搭建镜像仓库
API URL是GitLab用于和你的集群中那些用于部署工作负载的Kubernetes API进行通信的URL。根据Kubernetes集群运行的位置,你需要确保端口是打开的状态,这样才能让gitlab.com和Kubernetes集群进行通信。(默认是https://ip:6443) 具体如何获取,可通过kubeconfig获取。运行cat ~/.kube/config | grep server
获取。
提示:kubeconfig文件来组织关于集群,用户,名称空间和身份验证机制的信息。 kubectl命令行工具使用kubeconfig文件来查找选择群集并与群集的API服务器进行通信所需的信息。默认情况下 kubectl使用的配置文件名称是在$HOME/.kube目录下 config文件,可以通过设置环境变量KUBECONFIG或者–kubeconfig指定其他的配置文件
CA证书是需要的,因为这些证书通常是自定义证书,它们不在GitLab服务器的证书存储区中,它们可以让连接受到保护。
获取方式一:
1. 运行:cat ~/.kube/config | grep certificate-authority-data
这会提供给你一个base64编码的证书字符串,但是GitLab中的CA证书需要PEM格式
1. 把编码的字符串存到一个文件中,比如cert.base64
1. 运行base64 -d cert.base64 > cert.pem
1. 返回一个pem格式的证书,你可以把它拷贝到GitLab中的CA证书字段里
获取方式二:
kubernetes会把生成的证书文件放在master节点的/etc/kubernetes/pki/目录下,这里ca.crt即我们需要的ca证书。
为了让gitlab.com实例能够与集群通信,我们将为它创建一个服务账号。 1. 创建k8s-cicd-svc.yaml文件,内容如下:
apiVersion: v1
kind: Namespace
metadata:
name: gitlab-managed-apps
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: gitlab-sa
namespace: gitlab-managed-apps
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: gitlab-role
namespace: gitlab-managed-apps
rules:
- apiGroups:
- ""
- extensions
resources:
- '*'
verbs:
- '*'
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: gitlab-rb
namespace: gitlab-managed-apps
subjects:
- kind: ServiceAccount
name: gitlab-sa
namespace: gitlab-managed-apps
roleRef:
kind: Role
name: gitlab-role
apiGroup: rbac.authorization.k8s.io
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: gitlab-cluster
namespace: gitlab-managed-apps
subjects:
- kind: ServiceAccount
name: default
namespace: gitlab-managed-apps
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: Secret
metadata:
name: gitlab-secret
namespace: gitlab-managed-apps
annotations:
kubernetes.io/service-account.name: gitlab-sa
type: kubernetes.io/service-account-token
kubectl apply -f k8s-cicd-svc.yaml
kubectl describe secrets/gitlab-secret -n gitlab-managed-apps | grep token
出现以下页面,则说明成功了。