推荐文章
- 【kubernetes】新版helm3的三大概念 快速指南 自定义charts模板
- 【容器】docker-comopse安装 案例练习
- 【GitLab】使用Docker和Docker-Compose部署-个人、私有代码仓库
- 【kubevirt】VirtualMachineInstanceReplicaSet(vmis)-扩缩容-弹性伸缩
- 【openstack】cloudkitty组件,入门级安装(快速)
- 【openstack】Designate组件,入门级安装(快速)
- 【Istio是什么?】 还不知道你就out了,一文40分钟快速理解
- 【Istio实际操作篇】Istio入门10分钟快速安装
- 【代理是什么?】nginx快速入门 反向代理hexo个人博客
- 【还不会搭建博客吗?】centos7系统部署hexo博客新手入门-进阶,看这一篇就够了
- 【没接触过kubevirt?】15分钟快速入门kubevirt概述drone是一个持续集成化工具,能够使用强大的云原生管道引擎自动化他们的构建、测试和发布工作流; 简单来说:类似写shell脚本,只是脚本内容不一样; 其他持续集成工具,如:jenkins、gitlab-cicd;环境准备
- linux系统
- docker动手操作容器部署gitlab
gitlab详细安装步骤,点击这里;本次使用的gitlab-ce是docker hub仓库,2022年5月最新版:
- 如果hostname没做DNS域名解析,请使用IP地址(不写端口,默认80)。例:192.168.200.30
注意:hostname不能包含端口,否则gitlab启动不起来;
export GITLAB_HOME=/mydata/gitlab docker run --detach --hostname "192.168.200.30" --publish 1443:443 --publish 80:80 --publish 1022:22 --name gitlab --restart always --volume $GITLAB_HOME/config:/etc/gitlab --volume $GITLAB_HOME/logs:/var/log/gitlab --volume $GITLAB_HOME/data:/var/opt/gitlab gitlab/gitlab-ce:latest - 报错信息(后面的步骤):下图因为
gitlab的hostname填写的域名
(gitlab.admin.com),结果Drone流水线clone(克隆)代码时连接报错: 在这里插入图片描述上图的问题除了修改gitlab主机名(hostname)之外,还可以修改drone-runner默认clone(克隆)地址解决
。如下代码(这里看不懂没关系,请继续往下看后面会解释
):kind: pipeline type: docker name: default clone: disable: true #禁用默认克隆 steps: - name: clone-test image: alpine/git pull: if-not-exists # 如果在本地缓存中找不到图像,则仅拉取图像 commands: - git clone http://192.168.200.30/root/test.git #自定义克隆地址 - git version - name: greeting image: alpine commands: - echo hello - echo world - 浏览器访问gitlab(
http://192.168.200.30
),gitlab默认设置了root用户密码;修改默认root用户密码,点击这里:
[root@master drone]# docker exec -it gitlab bash
root@192:/# cat /etc/gitlab/initial_root_password |grep Password:
Password: RUb s6cnRsJk7S7Mg785nHewbwzoL4Cblfk/nnGKWZA=
- 创建 OAuth 应用程序( Application)
创建一个 GitLab OAuth 应用程序。Consumer Key 和 Consumer Secret
用于授权Drone访问 GitLab 资源
。注意:这里我提前在gitlab创建好了test仓库(空仓库),用于我们下面的演示;
在这里插入图片描述 - Application URL地址是
Drone服务地址后必须跟一个/login
。例:http://192.168.200.30:82/login
在这里插入图片描述 - Application生成的Consumer ID和 Consumer Secret,下面我们会用于安装Drone,gitlab授权drone:
在这里插入图片描述容器部署DroneDrone部署需要安装
docker-server
(Drone 与流行的源代码控制管理提供商无缝集成) WEB界面和docker-runner
守护进程执行器 - 创建一个
共享密钥
,用于drone-runner和drone-server之间的通信:[root@master drone]# openssl rand -hex 16 8172cd9155d16593d4f6a445b70e2d6edocker run --volume=/var/lib/drone:/data --env=DRONE_GITLAB_SERVER=http://192.168.200.30/ #GitLab 服务器 url,默认https://github.com --env=DRONE_GITLAB_CLIENT_ID=56ef91f20270b6f945f722e2b93e2e9eacad65f0b5edcad997d4842df47cc5a8 #GitLab oauth 客户端 ID(必填项) --env=DRONE_GITLAB_CLIENT_SECRET=159ab07250d7b02f171408a1a6e21f506295b33b5174c211b7dcb59b548e05a3 #GitLab oauth 客户端密码 (必填项) --env=DRONE_RPC_SECRET=8172cd9155d16593d4f6a445b70e2d6e #验证服务器和运行器之间的 rpc 连接(drone-server和drone-runner连接时必填项) --env=DRONE_SERVER_HOST=192.168.200.30:82 #供drone服务主机名或 IP 地址 (必填项) --env=DRONE_SERVER_PROTO=http #drone服务使用的协议 (必填项) --publish=82:80 --publish=443:443 --restart=always --detach=true --name=drone --env=DRONE_USER_CREATE=username:root,admin:true #Drone管理员用户创建 drone/drone:2 * drone启动参数很多,下面解释下: DRONE_GITLAB_SERVER: GitLab 服务器 url,默认https://github.com DRONE_GITLAB_CLIENT_ID: GitLab oauth 客户端 ID(必填项) DRONE_GITLAB_CLIENT_SECRET: GitLab oauth 客户端密码 (必填项) DRONE_RPC_SECRET: 验证服务器和运行器之间的 rpc 连接(drone-server和drone-runner连接时必填项) DRONE_SERVER_HOST: 提供drone服务主机名或 IP 地址 (必填项) DRONE_SERVER_PROTO: drone服务使用的协议 (必填项) DRONE_USER_CREATE: Drone管理员用户创建 - 部署drone-server:
- 部署drone-runner docker run --detach --volume=/var/run/docker.sock:/var/run/docker.sock --env=DRONE_RPC_PROTO=http #用于连接 Drone 服务器的协议 --env=DRONE_RPC_HOST=192.168.200.30:82 #提供 Drone 服务器的主机名 --env=DRONE_RPC_SECRET=8172cd9155d16593d4f6a445b70e2d6e #用于向 Drone 服务器进行身份验证的共享密钥 --env=DRONE_RUNNER_CAPACITY=2 #限制运行器可以执行的并发管道的数量 --env=DRONE_RUNNER_NAME=test-runner #设置runner的名字 --publish=3000:3000 --restart=always --name=runner drone/drone-runner-docker:1
* drone-runner启动参数很多,下面解释下: DRONE_RPC_PROTO: 用于连接 Drone 服务器的协议 DRONE_RPC_HOST: 提供 Drone 服务器的主机名 DRONE_RPC_SECRET: 用于向 Drone 服务器进行身份验证的共享密钥 DRONE_RUNNER_CAPACITY: 限制运行器可以执行的并发管道的数量 DRONE_RUNNER_NAME: 设置runner的名字
- 验证drone-runner是否连接上drone-server(
successfully pinged the remote server
):[root@master drone]# docker logs -ft runner 2022-05-10T05:21:02.637256271Z time="2022-05-10T05:21:02Z" level=info msg="starting the server" addr=":3000" 2022-05-10T05:21:02.640121666Z time="2022-05-10T05:21:02Z" level=info msg="successfully pinged the remote server" 2022-05-10T05:21:02.640157924Z time="2022-05-10T05:21:02Z" level=info msg="polling the remote server" arch=amd64 capacity=2 endpoint="http://192.168.200.30:82" kind=pipeline os=linux type=docker - 浏览器访问drone-server Web界面(
http://192.168.200.30:82
),点击继续: 在这里插入图片描述 - 点解继续后,会跳转到这个Application URL地址(
http://192.168.200.30:82/login
)gitlab给Drone(Application)授权: 在这里插入图片描述 - 注册drone用户: 在这里插入图片描述
- 点击Drone右上角SYNC(同步),进入我们的test仓库下激活存储库,发现错误(这个错误我们需要
打开gitlab的出入站请求
) 在这里插入图片描述 - 回到gitlab,点击
Admin-->settings
: 在这里插入图片描述 - 打开出站请求,并
打开允许web hooks(挂钩) 和服务向本地网络发出请求
: 在这里插入图片描述 - 回到drone,test仓库再一次激活(成功),并
开启Trusted
特权容器(docker-runner在使用docker执行器时,类似使用root权限)注意
:这里还有一个问题,如果出现没有Trusted选项的情况,需要在启动运行drone-server服务是添加:--env=DRONE_USER_CREATE=username:root,admin:true
流水线脚本编写.drone.yml
- 在gitlab依次点击,创建
.drone.yml
文件: 在这里插入图片描述kind: pipeline type: docker name: default steps: - name: greeting image: alpine commands: - echo hello - echo world.drone.yml文件属性解释: - .drone.yml文件内容(写的比较简单,
主要了解流水线操作流程
),如下:- kind:定义了对象的种类,此示例定义了一个pipeline(管道)对象;
- type:定义pipeline(管道)的类型,此示例定义了一个 Docker 管道,其中每个管道步骤都在 Docker 容器内执行;
- name:定义了pipeline(管道)的名称;
- steps:定义了一系列串行执行的pipeline(管道)步骤,出现一个步骤失败,立即退出; name:定义管道步骤的名称; image:定义了一个执行 shell 命令的 Docker 镜像; * commands:在docker容器内执行shell命令;
流水线触发
- 在自己项目下(test)点击:
settings-->webhooks
: 在这里插入图片描述 - 这里不需要再次创建webhooks(挂钩),Drone连接后会
自动创建一个默认的webhooks
: 在这里插入图片描述 - 回到drone会看到,我们编写的流水线文件被
自动触发
(之后gitlab仓库代码更新或上传新代码都会自动触发).drone.yml: 在这里插入图片描述 - 点击我们的流水线,可以查看流水线
详细步骤、步骤的状态和步骤的logs
: 在这里插入图片描述
总结 遇到的问题
我这里的.drone.yml文件写的比较简单,主要时了解过程入门。如果需要练习可以试着部署自己的项目;
最后请各位注意三个我在学习gitlab drone遇到的问题
:
下列小括号‘()’中是解决方法;
- clone克隆地址连接不上(修改默认clone克隆)
- 没有Trusted选项,启动drone-server时添加(
--env=DRONE_USER_CREATE=username:root,admin:true
) - .drone.yml文件中sed命令报错:
sed: -e expression #1, char 34: unknown option to s
(改成感叹号!或者| 分割,如:sed -i 's! 源内容 ! 替换内容 !g' )
推荐文章
- 【kubernetes】新版helm3的三大概念 快速指南 自定义charts模板
- 【容器】docker-comopse安装 案例练习
- 【GitLab】使用Docker和Docker-Compose部署-个人、私有代码仓库
- 【kubevirt】VirtualMachineInstanceReplicaSet(vmis)-扩缩容-弹性伸缩
- 【openstack】cloudkitty组件,入门级安装(快速)
- 【openstack】Designate组件,入门级安装(快速)
- 【Istio是什么?】 还不知道你就out了,一文40分钟快速理解
- 【Istio实际操作篇】Istio入门10分钟快速安装
- 【代理是什么?】nginx快速入门 反向代理hexo个人博客
- 【还不会搭建博客吗?】centos7系统部署hexo博客新手入门-进阶,看这一篇就够了
- 【没接触过kubevirt?】15分钟快速入门kubevirt
参考资料
https://docs.drone.io/