前言
最近面试好像经常问一个问题: 你的项目是怎么发布的? 传统的Java本地包装的项目 jar包 或者 war包, 上传到服务器, 然后通过shell启动脚本的方式 要求我们有一定的shell编写脚本的能力。
这里介绍一种流行的发布方式(所谓的发布方式)DevOps?), 也是我目前项目在用的。基于Gitlab内置的CI/CD功能, (所谓CI/CD, 不懂的可以简单理解为自动构建, 自动打包, 仓库自动发布) 以及rancher容器管理功能。 rancher是基于k3s, k8s的简略版, 这里的博主还没有深入学习k8s, 暂时跳过。
一般的发布过程是, gitlab仓库中配置 CI/CD, 配置在项目文件中 gitlab-ci.yml配置文件 和 gitlab-runner(所谓CI/CD执行者), 当您推送最新代码时gitlab仓库, 自动触发流水线(pipeline), 根据你的 gitlab-ci.yml 配置项目jar包的构建(build), 发布到maven仓库, docker镜像(image)的构建, 并发布最新的镜像docker仓库。 然后我们可以通过它rancher拉最新镜像, 重新启动一个pod。这样实现了自动构建, 一个自动发布的过程。
Docker安装
docker的安装, rancher也可以参考本博文的安装 -> 单节点rancher快速部署
*了解 - 部署Nginx(非Rancher方式)
其实Rancher自带负载均衡器, Nginx Ingress, 通过Ingress可配置服务路由, SSL证书, 包括 uri->端口 等等, 所以这里不需要单独部署一个nginx。
但通过配置nginx也可以对rancher的 ingress实际做了什么事情有一个摸得着看得见的理解, 否则我们只会通过ui配置rancher, 却不会使用nginx, 不太优雅。
docker run --name nginx -v nginx-html:/usr/share/nginx/html -v nginx-conf:/etc/nginx -d -p 80:80 -p 443:443 nginx:1.20
nginx配置
这是我的配置之一
user nginx; worker_processes auto; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; gzip on; include /etc/nginx/conf.d/*.conf; client_max_body_size 100m; # 文件上传你的大小, 默认1m proxy_ssl_session_reuse off; # 关闭代理ssl验证 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 开启websocket proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; # 开启websocket支持 map $http_upgrade $connection_upgrade { default upgrade; '' close; } server_tokens off; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #可参考此 SSL 协议配置 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #可根据此加密
套件配置,并遵循写作方法 openssl 标准 ssl_prefer_server_ciphers on; # 负载均衡 #upstream halo { # server 124.223.63.15:30001; # server 124.223.63.15:30002 backup; #} # chenyao.icu halo博客 server{ keepalive_requests 200; #单连接请求上限次数。 listen 80; #监听端口 server_name chenyao.icu; #监听域名 location / { #地址匹配 #proxy_pass http://halo; #请求转向halo 定义的服务器列表 #root path; #静态资源根目录 #index index.html; #设置静态首页 #deny 127.0.0.1; #拒绝的ip #allow 172.18.5.54; #允许的ip # 重定向到443 return 301 https://$host$request_uri; } } server { listen 443 ssl; server_name chenyao.icu; #填写您的证书绑定的域名,例如:www.cloud.tencent.com #root /usr/local/lighthouse/softwares/wordpress; #填写您的网站根目录,例如:/usr/local/lighthouse/softwares/wordpress #index index.php index.html; access_log logs/chenyaoicu.log; error_log logs/chenyaoicu.error.log; ssl_certificate chenyao.icu/fullchain.cer; #填写您的证书文件名称,例如:cloud.tencent.com_bundle.crt ssl_certificate_key chenyao.icu/chenyao.icu.key; #填写您的私钥文件名称,例如:cloud.tencent.com.key location / { #proxy_pass http://halo; proxy_pass http://10.0.16.3:32140; } # 静态资源反向代理 # 请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。 location ~ .*\.(js|css|gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ { proxy_pass http://10.0.16.3:32140; expires 10d; } } # rancher.chenyao.icu Rancher server{ keepalive_requests 200; #单连接请求上限次数。 listen 80; #监听端口 server_name rancher.chenyao.icu; #监听域名 location / { #地址匹配 # 重定向到443 return 301 https://$host$request_uri; } } server { listen 443 ssl; server_name rancher.chenyao.icu; access_log logs/rancher.chenyaoicu.log; error_log logs/rancher.chenyaoicu.error.log; ssl_certificate rancher.chenyao.icu/fullchain.cer; ssl_certificate_key rancher.chenyao.icu/rancher.chenyao.icu.key; location / { proxy_pass https://10.0.16.3:1443; } } # nexus.chenyao.icu Nexus server{ keepalive_requests 200; #单连接请求上限次数。 listen 80; #监听端口 server_name nexus.chenyao.icu; #监听域名 location / { #地址匹配 # 重定向到443 return 301 https://$host$request_uri; } } server { listen 443 ssl; server_name nexus.chenyao.icu; access_log logs/nexus.chenyaoicu.log; error_log logs/nexus.chenyaoicu.error.log; ssl_certificate nexus.chenyao.icu/fullchain.cer; ssl_certificate_key nexus.chenyao.icu/nexus.chenyao.icu.key; location / { proxy_pass http://10.0.16.3:32719; } } # gitlab.chenyao.icu GitLab server{ keepalive_requests 200; #单连接请求上限次数。 listen 80; #监听端口 server_name gitlab.chenyao.icu; #监听域名 location / { #地址匹配 # 重定向到443 return 301 https://$host$request_uri; } } server { listen 443 ssl; server_name nexus.chenyao.icu; access_log logs/gitlab.chenyaoicu.log; error_log logs/gitlab.chenyaoicu.error.log; ssl_certificate gitlab.chenyao.icu/fullchain.cer; ssl_certificate_key gitlab.chenyao.icu/gitlab.chenyao.icu.key; location / { proxy_pass http://10.0.16.3:1080; } } }
SSL证书(HTTPS访问, 非必须)
FreeSSL (推荐, 可免费申请的ssl证书)
https://freessl.cn/acme-deploy?domains=chenyao.icu%2Cwww.chenyao.icu
acme.sh --install-cert -d chenyao.icu \
--key-file /var/lib/docker/volumes/nginx-conf/_data/chenyao.icu/chenyao.icu.key \
--fullchain-file /var/lib/docker/volumes/nginx-conf/_data/chenyao.icu/fullchain.cer \
--reloadcmd "docker restart nginx"
acme.sh --install-cert -d rancher.chenyao.icu \
--key-file /var/lib/docker/volumes/nginx-conf/_data/rancher.chenyao.icu/rancher.chenyao.icu.key \
--fullchain-file /var/lib/docker/volumes/nginx-conf/_data/rancher.chenyao.icu/fullchain.cer \
--reloadcmd "docker restart nginx"
acme.sh --install-cert -d gitlab.chenyao.icu \
--key-file /var/lib/docker/volumes/nginx-conf/_data/gitlab.chenyao.icu/gitlab.chenyao.icu.key \
--fullchain-file /var/lib/docker/volumes/nginx-conf/_data/gitlab.chenyao.icu/fullchain.cer \
--reloadcmd "docker restart nginx"
acme.sh --install-cert -d nexus.chenyao.icu \
--key-file /var/lib/docker/volumes/nginx-conf/_data/nexus.chenyao.icu/nexus.chenyao.icu.key \
--fullchain-file /var/lib/docker/volumes/nginx-conf/_data/nexus.chenyao.icu/fullchain.cer \
--reloadcmd "docker restart nginx"
acme.sh --install-cert -d *.chenyao.icu \
--key-file /var/lib/docker/volumes/nginx-conf/_data/*.chenyao.icu/*.chenyao.icu.key \
--fullchain-file /var/lib/docker/volumes/nginx-conf/_data/*.chenyao.icu/fullchain.cer \
--reloadcmd "docker restart nginx"
错误: HTTPS 访问的页面上不允许出现 HTTP 请求
已阻止载入混合活动内容“http://nexus.chenyao.icu/static/rapture/app.js?_v=3.27.0-03&_e=OSS”
指向“http://nexus.chenyao.icu/static/rapture/app.js?_v=3.27.0-03&_e=OSS”的 <script> 加载失败。
在安全的加密网页中载入混合(不安全的)显示内容“http://nexus.chenyao.icu/static/rapture/resources/favicon-32x32.png?_v=3.27.0-03&_e=OSS”
在 nginx 配置文件增加 proxy_set_header X-Forwarded-Proto $scheme;
这样HTTPS请求nginx 在转发时就还是使用HTTPS协议。
单节点部署rancher(基于Docker)
安装启动rancher/rancher
单节点部署仅用于测试学习, 不用于生产环境
docker run -d --privileged \
-v rancher-etcd:/var/lib/rancher \
-v rancher-log:/var/log/auditlog \
# 使用已有证书 \
-v /opt/rancher/ssl/rancher_fullchain.pem:/etc/rancher/ssl/cert.pem \
-v /opt/rancher/ssl/rancher_private_key.pem:/etc/rancher/ssl/key.pem \
-e AUDIT_LEVEL=1 \
--restart=unless-stopped \
-p 1080:80 -p 1443:443 \
rancher/rancher:v2.4.17 \
--no-cacerts
开启权限
--privileged
Rancher 2.4.x 及之前的版本
登录到 Linux 主机,然后运行下面这个非常简洁的安装命令。
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
rancher/rancher:latest
Rancher 2.5.x 及之后的版本
登录到 Linux 主机,然后运行下面这个非常简洁的安装命令。
与 2.4.x 或之前的版本相比,使用docker run
命令安装 Rancher 2.5.x 时,需要添加--privileged
标志变量,启用特权模式安装 Rancher。
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
--privileged \
rancher/rancher:latest
端口映射
在相同节点运行rancher/rancher 和 rancher/rancher-agent
在要使用单个节点运行 Rancher 并将同一个节点添加到集群的情况下,必须为rancher/ rancher
容器调整映射的主机端口。
如果将节点添加到集群中,它将部署使用端口 80 和 443 的 nginx ingress 控制器。这将与我们建议为rancher/ rancher
容器公开的默认端口冲突。
请注意,不建议将此设置用于生产环境,这种方式仅用来方便进行开发/演示。
要更改主机端口映射,可以将以下部分-p 80:80 -p 443:443
替换为-p 1080:80 -p 1443:443
挂载卷
持久化数据
/var/lib/rancher
Rancher 使用 etcd 作为数据存储。使用 Docker 安装时,将使用嵌入式 etcd。持久数据位于容器中的以下路径中:/var/lib/rancher
。您可以将主机卷挂载到该位置,以将数据保留在运行 Rancher Server 容器的主机上。使用 RancherOS 时,请检查哪些持久性存储目录可用。
API审计日志
/var/log/auditlog
API 审计日志记录通过 Rancher Server 进行的所有用户请求和系统事务。
默认情况下,API 审计日志会写入 rancher 容器内的/var/log/auditlog
中。您可以设置AUDIT_LEVEL
以启用日志,并将该目录作为卷共享。
参考API 审计日志获取更多信息。
使用自己的已有的证书 (可信证书用于公网访问)
- 证书文件必须为 PEM 格式。
- 在您的证书文件中,。您需要对您的证书进行排序,把您的证书放在最前面,后面跟着中间证书。有关示例,请参见SSL 常见问题解答/故障排查。
获得证书后,运行下面的 Docker 命令。
- 使用该
-v
标志并提供证书的路径,以将其挂载到容器中,由于您的证书是由权威的 CA 签名的,因此不需要安装其他 CA 证书文件。 - 使用
--no-cacerts
作为容器的参数, 位置在镜像后面,来禁用由 Rancher 生成的默认 CA 证书。
占位符 | 描述 |
---|---|
<CERT_DIRECTORY> | 证书文件所在目录。 |
<FULL_CHAIN.pem> | 证书链文件路径。 |
<PRIVATE_KEY.pem> | 证书私有密钥路径。 |
docker run -d --privileged --restart=unless-stopped \
-p 80:80 -p 443:443 \
-v /<CERT_DIRECTORY>/<FULL_CHAIN.pem>:/etc/rancher/ssl/cert.pem \
-v /<CERT_DIRECTORY>/<PRIVATE_KEY.pem>:/etc/rancher/ssl/key.pem \
rancher/rancher:latest \
--no-cacerts
宿主机部署kubectl
https://kubernetes.io/docs/tasks/tools/install-kubectl/
宿主机部署helm3
版本选择
Helm a.b.c
不推荐将Helm用于比编译它所依赖的版本更高的Kubernetes版本,因为Helm并没有做出任何向前(新)兼容的保证。
Helm版本支持策略
Helm 版本 | 支持的 Kubernetes 版本 |
---|---|
3.8.x | 1.23.x - 1.20.x |
3.7.x | 1.22.x - 1.19.x |
3.6.x | 1.21.x - 1.18.x |
3.5.x | 1.20.x - 1.17.x |
3.4.x | 1.19.x - 1.16.x |
3.3.x | 1.18.x - 1.15.x |
3.2.x | 1.18.x - 1.15.x |
3.1.x | 1.17.x - 1.14.x |
3.0.x | 1.16.x - 1.13.x |
2.16.x | 1.16.x - 1.15.x |
2.15.x | 1.15.x - 1.14.x |
2.14.x | 1.14.x - 1.13.x |
2.13.x | 1.13.x - 1.12.x |
2.12.x | 1.12.x - 1.11.x |
2.11.x | 1.11.x - 1.10.x |
2.10.x | 1.10.x - 1.9.x |
2.9.x | 1.10.x - 1.9.x |
2.8.x | 1.9.x - 1.8.x |
2.7.x | 1.8.x - 1.7.x |
2.6.x | 1.7.x - 1.6.x |
2.5.x | 1.6.x - 1.5.x |
2.4.x | 1.6.x - 1.5.x |
2.3.x | 1.5.x - 1.4.x |
2.2.x | 1.5.x - 1.4.x |
2.1.x | 1.5.x - 1.4.x |
2.0.x | 1.4.x - 1.3.x |
安装
https://github.com/helm/helm/releases
wget https://get.helm.sh/helm-v3.5.1-linux-amd64.tar.gz
解压后将helm拷贝到/usr/local/bin
helm version验证是否work:
清理Rancher节点
http://docs.rancher.cn/docs/rancher2/trending-topics/cleaning-cluster-nodes/_index/
修改nginx-ingress默认的80/443端口
Rancher集群创建后可以修改nginx-ingress默认的80/443端口, 会重新创建Pod
创建集群
修改nginx-ingress-controller映射的端口, 主机端口要和容器端口一致
再编辑命名空间ingress-nginx的YAML
containers:
- args:
- /nginx-ingress-controller
- --default-backend-service=$(POD_NAMESPACE)/default-http-backend
- --configmap=$(POD_NAMESPACE)/nginx-configuration
- --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
- --udp-services-configmap=$(POD_NAMESPACE)/udp-services
- --annotations-prefix=nginx.ingress.kubernetes.io
# 增加以下两个参数参数(一个是http端口,一个是https端口)
- --http-port=2080
- --https-port=2443
* 了解 - docker-desktop部署k8s (开发调试用)
k8s-docker-desktop-dashboard token令牌(示例)
eyJhbGciOiJSUzI1NiIsImtpZCI6Ilp1bjkzSDFtTV82MV9xVEpoMnUxdWNHUDJDNzBzb1hCR2N5WU1UbTF6VUEifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZWZhdWx0LXRva2VuLTQ1bHhyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRlZmF1bHQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJhM2E0ODlmNS0zZWVjLTQyZDktOGI4MC0yMDg0NzFkODFhMmMiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06ZGVmYXVsdCJ9.xGGkf_qlV9uFFxMqBrFwCCPoWzGvgZRh8mVVsytSvwNcj9rf6cpD5QQW87Ac9Aw6ty-Ew1q5c0kHPHeyetUvUrgvWL5_SL9my0pQ6xwX5I1DXnqNtoK5gyWJD_0rCnBStEU_FYN64PPuGyPhZBFd4Tb_rPT791LWPoYsaq44ApVOOGWPdymSRvQUuQ5b4mBKdP08H_LQqKP_kn85aP_q1xQI60CmC1IaYNNBiAOWjGo5VPLEmr2myqpI7nYrFImfbpIMJujejWfNFObyHt6MU_cEG8tt_J-NM4A6gopFtN9HzogmegOKCPUgFnrofwuHAIRuqYCFznzbhbY3elDPGw
或者 kubeconfig文件
Win: %UserProfile%\.kube\config
开启dashboard代理 (每次访问需要开启代理)
kubectl proxy
访问dashboard
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/workloads?namespace=default
部署MySQL
https://registry.hub.docker.com/_/mysql
镜像 mysql:8.0
端口 3306
环境变量:
MYSQL_ROOT_PASSWOR=root
挂载卷:
配置 /etc/mysql/conf.d
数据 /var/lib/mysql
修改mysql密码
set password for root@'%' = 'chenyao';
错误
Public Key Retrieval is not allowed
修改驱动属性, 连上后再改回来 , JDBC在url后面拼 ?allowPublicKeyRetrieval=true
部署Halo博客
https://docs.halo.run/getting-started/install/docker
镜像 halohub/halo:1.4.17
端口 8090
挂载卷:
静态资源和application.yaml /root/.halo
下载application.yaml配置文件模板
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
配置mysql数据库:
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
# 注意在容器里不要用localhost和127.0.0.1, 要用宿主机的内网/外网ip
url: jdbc:mysql://10.0.16.3:31641/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: root
jpa:
database-platform: org.hibernate.dialect.MySQLDialect
hibernate:
ddl-auto: update
open-in-view: false
: 备份静态资源目录和数据库的数据
部署Nexus
镜像
sonatype/nexus
sonatype/nexus3:3.27.0 ✔
端口 8081
默认nexus2帐号 admin/admin123
默认nexus3帐号 admin/admin.password 文件
环境变量
- 注意: Nexus2/3版本差异
-
NEXUS_CONTEXT
这用于定义访问 Nexus 的 URL。默认为 ‘/’ -
INSTALL4J_ADD_VM_PARAMS
传递给 Install4J 启动脚本。默认为-Xms2703m -Xmx2703m -XX:MaxDirectMemorySize=2703m -Djava.util.prefs.userRoot=${NEXUS_DATA}/javaprefs
-Djava.util.prefs.userRoot=/some-other-dir
可以设置为持久路径,如果容器重新启动,它将保持已安装的 Nexus 存储库许可证- 内存要求 2703m 8G https://help.sonatype.com/repomanager3/product-information/system-requirements#SystemRequirements-MemoryRequirements
数据持久化
1. 挂载卷
配置 /opt/sonatype/nexus/etc
数据 /nexus-data 注意要有写权限
$ docker volume create --name nexus-data
$ docker run -d -p 8081:8081 --name nexus -v nexus-data:/nexus-data sonatype/nexus3
2. 挂载主机目录
挂载目录注意: 需要赋予宿主机目录写权限!
mkdir /opt/cni/volume/nexus/data && chown -R 200 /opt/cni/volume/nexus/data
- nexus不能自动生成文件到卷: 先把容器起起来, 拷贝文件, 再挂载卷重启容器
- 把容器中默认的文件拷贝出来, 挂载pvc不用复制
# 复制前不用创建/conf和/data目录, 否则会复制到这个文件夹下面
$ docker cp 270aca39b5f1:/nexus-data /opt/cni/volume/nexus/data
$ docker cp 270aca39b5f1:/opt/sonatype/nexus/etc /opt/cni/volume/nexus/conf
错误: nexus启动失败, 没有宿主机文件夹写权限
Could not lock User prefs. Lock file access denied
FileNotFoundExceprion: Permission denied
chown -R 200 /opt/cni/volume/nexus/data
3. *使用数据容器(2版本)
由于数据量是持久的,直到没有容器使用它们,所以可以专门为此目的创建一个容器。这是推荐的方法。
$ docker run -d --name nexus-data sonatype/nexus echo "data-only container for Nexus"
$ docker run -d -p 8081:8081 --name nexus --volumes-from nexus-data sonatype/nexus
部署GitLab
https://docs.gitlab.com/ee/install/docker.html
镜像
gitlab/gitlab-ee
gitlab/gitlab-ce:13.11.7-ce.0 ✔
端口 22 80 443
环境变量
# 应该没用
GITLAB_HOME=/opt/cni/volume/gitlab
EXTERNAL_URL=http://124.221.116.110
# GITLAB_OMNIBUS_CONFIG好像不生效
GITLAB_OMNIBUS_CONFIG="external_url='http://124.221.116.110';gitlab_rails['gitlab_shell_ssh_port']=30022;gitlab_rails['time_zone']='Asia/Shanghai';"
ssh信任端口也可在容器启动后通过CMD配置 (重新部署可能需要重新配置)
挂载卷
/etc/gitlab 用于存储 GitLab 配置文件 $GITLAB_HOME/conf
/var/opt/gitlab 用于存储应用程序数据 $GITLAB_HOME/data
/var/log/gitlab 用于存储日志 $GITLAB_HOME/logs
查看密码
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
密码文件将在 24 小时后的第一次重新配置运行中自动删除
进入容器配置gitlab外部访问地址, ssh端口
https://blog.51cto.com/xiaoma90/2433673?source=dra
进入正在运行的容器:
sudo docker exec -it gitlab /bin/bash
打开 /etc/gitlab/gitlab.rb
与您的编辑器并设置 external_url
:
external_url
是外部访问gitlab的地址, 如果不是从这个地址访问, 将会被拒绝
如果你将gitlab置于你自己创建的nginx代理之后, 实际访问gitlab的是你的nginx, 那就要将external_url
配置为你访问的nginx的地址。通过防火墙等访问同理。
# For HTTP
external_url "http://124.221.116.110"
or
# For HTTPS (notice the https)
external_url "https://124.221.116.110"
此 URL 中指定的端口必须与 Docker 发布(-p)到主机的端口(容器外)匹配。 此外,如果 NGINX 侦听端口未设置在 nginx['listen_port']
,它将从 external_url
拉取. 有关详细信息,请参阅 NGINX 文档 。
放 gitlab_shell_ssh_port
:
gitlab_rails['gitlab_shell_ssh_port'] = 30022
最后,重新配置 GitLab:
gitlab-ctl reconfigure
按照上面的示例,您将能够在8929
端口下从您的浏览器访问网页, 并在2289
端口下使用 SSH 推送 .
上面修改后gitlab.yml会自动对应修改为external_url(nginx也是)
如果我们想要仓库地址显示为域名, 则需要修改gitlab.yml
进入容器修改仓库地址
# 也在卷data(/var/opt/gitlab)下
vi /var/opt/gitlab/gitlab-rails/etc/gitlab.yml
## GitLab settings
gitlab:
## Web server settings (note: host is the FQDN, do not include http://)
host: gitlab.chenyao.icu
port: 443
https: true
gitlab-ctl restart
修改后访问显示502不要着急, 项目重新部署需要时间, 等一段时间后再试。
性能要求
4C 4G
https://docs.gitlab.com/ee/install/requirements.html
集成k8s集群
https://gitlab.chenyao.icu/help/user/project/clusters/add_remove_clusters.md#add-existing-cluster
部署GitLab-Runner
https://docs.gitlab.com/runner/
部署
https://docs.gitlab.com/runner/install/index.html
https://docs.gitlab.com/runner/install/docker.html
使用
https://gitlab.chenyao.icu/help/ci/runners/README
注册
https://docs.gitlab.com/runner/register/index.html#docker
镜像
gitlab/gitlab-runner 版本跟gitlab一致, 或次要版本略新于gitlab
gitlab/gitlab-runner:v13.12.0
端口 8093
环境变量
时区 TZ=Asia/Shanghai
查看可用时区列表
安装SSL证书 CA_CERTIFICATES_PATH=/etc/gitlab-runner/certs/fullchain.cer
配置模板TEMPLATE_CONFIG_FILE
等同于run的命令 --template-config
挂载卷
配置 /etc/gitlab-runner
数据 /var/run/docker.soc
注册
1. 交互方式
docker run --rm -it -v gitlab-runner-config:/etc/gitlab-runner gitlab/gitlab-runner:latest register
- 也可以进入容器后执行
sudo gitlab-runner register
# 如果需要经过代理, 需要添加环境变量
export HTTP_PROXY=http://yourproxyurl:3128
export HTTPS_PROXY=http://yourproxyurl:3128
sudo -E gitlab-runner register
输入您的 GitLab 实例 URL(也称为 gitlab-ci coordinator URL
).
输入您获得的令牌(token, 在gitlab的管理中心-runner查看)以注册runner。
输入runner的描述。 您可以稍后在 GitLab 用户界面修改。
输入 与runner相关的标签 , 用逗号隔开。 您可以稍后在 GitLab 用户界面中更改此值。
输入流水线的任何可选维护说明。
Docker执行器, 提供 runner executor 。 对于大多数用例,输入 docker
如果你输入 docker
作为您的executor,您被要求提供默认镜像用于未定义在 .gitlab-ci.yml
中定义镜像的项目
2. 命令
docker run --rm -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \
--non-interactive \ #免交互
--executor "docker" \
--docker-image alpine:latest \ #基础镜像
--url "http://10.0.4.8:30080" \
--registration-token "3gaENJhz6AxZhya-X1r_" \
--description "docker-runner" \
--maintenance-note "Free-form maintainer notes about this runner" \
--tag-list "docker,aws" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"
这里 --access-level
是GitLab Runner 12.0 中增加的参数。 它使用 GitLab 11.11 中引入的注册 API 参数。 在注册期间使用此参数来创建 受保护的跑步者 。 对于受保护的跑步者,请使用 --access-level="ref_protected"
范围。 对于未受保护的跑步者,请使用 --access-level="not_protected"
相反,或者保留未定义的值。 菜单中打开或关闭此值
这里 --maintenance-note
参数 添加 GitLab Runner 14.8 您可以使用它来添加与流水线维护相关的信息。 允许的最大长度为 255 个字符。
3.配置文件
config.toml
--config
指定
4.配置模板
--regist
优先级高于--template-config
--config
优先级高于--template-config
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "test-runner"
url = "https://gitlabchenyao.icu"
token = "__REDACTED__"
executor = "kubernetes"
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.kubernetes]
host = "http://localhost:9876/"
bearer_token_overwrite_allowed = false
image = ""
namespace = ""
namespace_overwrite_allowed = ""
privileged = false
service_account_overwrite_allowed = ""
pod_annotations_overwrite_allowed = ""
[runners.kubernetes.volumes]
sudo gitlab-runner register \
--config /tmp/test-config.toml \
--template-config /tmp/test-config.template.toml \
gitlab-runner无法访问外网
gitlab-runner容器中无法访问到外网如 https://gitlab.chenyao/.icu, 只能访问到本机和宿主机
把gitlab-runner的网络模式改为主机网络。
Docker Runner三种作用域
Shared Runner 供所有项目使用
Group Runner 适用于组中的所有项目和子组
Specific runners 适用于个别项目
配置Runner的 tag
当您注册跑步者时,您可以为其添加 。
当 CI/CD 作业运行时,它通过查看分配的tag
知道要使用哪个运行器。
例如,如果跑步者有 ruby
标签,您可以将此代码添加到你的项目 .gitlab-ci.yml
文件:
job:
tags:
- ruby
当作业运行时,它使用带有 ruby
的runner
Docker执行器
{
"insecure-registries" : [ "dp.chenyao.icu" ]
}