CI实现方法之--Gitlba+Drone
写在前面:
进入到云计算的PAAS时代,起源Google的Kubernetes无疑成为了PAAS云服务的落地平台。自2017年开始,K8s平台已经成为容器编排的事实标准,为组织设计和部署应用程序带来全新定义。在之后的几年里国有云,国外云厂商陆续在IAAS平台发布PASS层产品。
在此基础上出现了CICD,即持续集成与持续交付是软件开发和交付中的实践。项目从最初是瀑布模型,到敏捷开发,再到现在的DevOps。这是现代开发人员构建出色的产品的技术路线。随着DevOps的兴起,出现了持续集成(Continuous Integration)、持续交付(Continuous Delivery) 、持续部署(Continuous Deployment) 的新方法。
笔者基于自身需求做了如下测试,希望对同行有所助力,相关文章会持续更新。
一、测试前提条件
- 实验环境说明
测试主机:阿里云主机
操作系统:CentOS 7.7
测试主机配置:2C,8G
主机名 | 公网IP | 内网IP | ROLE | PORT |
---|---|---|---|---|
node1 | 39.104.88.120 | 172.16.0.93 | gitlab | 80 |
node2 | 39.104.93.96 | 172.16.0.94 | drone,jenkins | 80,8080 |
node3 | 39.104.70.51 | 172.16.0.98 | harbor | 80 |
- 所有节点安装docker
1) 安装必要的系统工具sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2) 添加软件源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3) 更新并安装Docker-CE
sudo yum makecache fast yum -y install docker-ce-18.09.9-3.el7
4) 启动Docker
systemctl start docker && systemctl enable docker
5) 配置Docker调优参数
tee /etc/docker/daemon.json << EOF { "oom-score-adjust": -1000, "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" }, "max-concurrent-downloads": 10, "max-concurrent-uploads": 10, "registry-mirrors": ["https://yefnfc9c.mirror.aliyuncs.com"], "insecure-registries" : ["0.0.0.0/0"], "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] } EOF
6) 重启docker生效
systemctl restart docker
二、测试
- 测试说明
2.部署说明
2.1. 部署gitlab
docker run --detach --hostname 39.104.88.120 --publish 443:443 --publish 80:80 --publish 1022: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:12.10.3-ce.0
注:39.104.88.120为本机实际节点外网IP
2.2. 部署Harbor
2.2.1. 安装docker-compose
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
2.2.2. 下载harbor
https://github.com/goharbor/harbor/releases/download/v1.10.2/harbor-online-installer-v1.10.2.tgz
2.2.3. 解压后配置harbo.yaml
hostname: 172.31.48.86 //修改为实际节点内网IP
屏蔽https配置部分
2.2.4. 安装Harbor
./install.sh --with-clair
2.2.5. 安装结果检查
docker-compose ps //正常回显如下
2.3. 部署Drone
2.3.1. 部署drone主应用
如何取得
DRONE_GITLAB_CLIENT_ID DRONE_GITLAB_CLIENT_SECRET
登录gitlab并配置gitlab外部认证
应用回调接口申请
注:本测试采用docker run 部署drone,所以Url为:http://39.104.93.96/login,按自身部署drone环境修改Url。
取得ApplicationID和secret
ApplicationID对应DRONE_GITLAB_CLIENT_ID
secret对应DRONE_GITLAB_CLIENT_SECRET
docker run \ --volume=/var/run/docker.sock:/var/run/docker.sock \ --volume=/var/lib/drone:/data \ --env=DRONE_LOGS_DEBUG=true \ --env=DRONE_GIT_ALWAYS_AUTH=false \ --env=DRONE_GITLAB_SERVER=http://39.104.88.120 \ --env=DRONE_GITLAB_CLIENT_ID=d6272993ac02c3bb4069d73bf0ff8dabeaff47c0739ae27d1a23e8b80e33faa5 \ --env=DRONE_GITLAB_CLIENT_SECRET=01f454fe0a55256a974d420b8ca023df6efc80b33d8a917dd16138b152b73253 \ --env=DRONE_RPC_SECRET=12345678\ --env=DRONE_RUNNER_CAPACITY=3 \ --env=DRONE_SERVER_HOST=39.104.93.96\ --env=DRONE_SERVER_PROTO=http \ --env=DRONE_TLS_AUTOCERT=false \ --publish=80:80 \ --publish=443:443 \ --restart=always \ --detach=true \ --name=drone \ drone/drone:1
参数说明:
2.3.2. 部署Drone-runner
docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ -e DRONE_RPC_PROTO=http \ -e DRONE_RPC_HOST=172.16.0.94 \ -e DRONE_RPC_SECRET=12345678 \ -e DRONE_RUNNER_CAPACITY=3 \ -e DRONE_RUNNER_NAME=${HOSTNAME} \ -p 3000:3000 \ --restart always \ --name runner \ drone/drone-runner-docker:1
参数说明:
Drone-runner检查
3.配置说明
3.1. 配置harbor
3.1.1. 增加项目:go-server
注:admin/Harbor12345
3.2. 配置gitlab
3.2.1. 增加项目:go-server
3.2.2. 项目go-server中创建相关文件
1) 增加主应用代码文件:server.go
package main import ( "fmt" "log" "net/http" ) func hello(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello World") } func main() { http.HandleFunc("/", hello) if err := http.ListenAndServe(":8080", nil); err != nil { log.Fatal(err) } }
2) 创建Dockerfile,会被.drone.yml调用
FROM golang WORKDIR /go ADD server /go CMD ["./server"]
3) 创建.drone.yml文件,此文件作用是按文件内容将任务传送至drone应用,进行CI动作。
注:此文件在配置drone完成后创建
kind: pipeline type: docker name: build steps: - name: build-code image: golang:alpine pull: if-not-exists # always never commands: - go build server.go - name: build-image image: plugins/docker settings: repo: 172.16.0.98/go-server/go-server registry: 172.16.0.98 use_cache: true username: from_secret: registry_username password: from_secret: registry_password tags: ${DRONE_BUILD_NUMBER} insecure: true mirror: https://yefnfc9c.mirror.aliyuncs.com/ trigger: branch: - master event: - push
3.3. 配置drone
3.3.1. 提示gitlab页确认后跳转drone
3.3.2. 点击已同步项目go-server
3.3.3. 点击已同步项目go-server后找到SETTINGS
3.3.4. SETTINGS设置Harbor登录信息
注:此处valuse值对应.drone.yml中常量值,下图标红处。key值为harbor用户及密码。
username: from_secret: registry_username password: from_secret: registry_password
注:完成后创建.drone.yml文件,接3.2.2 .drone.yml内容。
4.测试效果说明
4.1. drone效果
4.2. harbor效果
4.3. 再次触发build
修改gitlab中go-server代码,就会再次出发build。
后续:
本次测试到此就告一段落,测试只是CICD中冰山一角,其他部分也会陆续更新。在这个新兴技术不断涌现的今天,通过不断的学习跟上时代步伐。现在有很多同学对k8s有研究,除了k8s本身外,其他围绕k8s附加功能也值得一学,希望本文及后续可以开启你k8s之路。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
奔驰车载逻辑单元源代码遭泄露
上周,梅德赛斯-奔驰中安装的“智能汽车”组件源代码被泄露在网上。 研究人员发现奔驰品牌所属主体戴姆勒股份公司 (Daimler AG) 的一个 Git web 门户。他指出,自己能够在戴姆勒的代码托管门户上注册一个账户,之后下载包含车载逻辑单元 (OLUs) 源代码的580多个 Git 仓库。 OLU 简介 从戴姆勒网站上获悉,OLU 是一个组件,位于车辆的硬件和软件之间,“连接车辆和云端”。 网站指出,OLU“简化了对实时车辆数据的技术访问和管理”,并可使第三方开发人员创建能够从奔驰车检索数据的 app。这些 app 通常用于实现多种功能,如追踪正在行驶的汽车、追踪汽车的内部状况或在出现偷盗情况时冻结汽车。 不安全的 GitLab 安装程序泄露 OLU 源代码 研究人员表示,他使用了简单如 Google dorks(专门的谷歌搜索查询)的方法找到了戴姆勒的 GitLab 服务器。GitLab 是一款基于 web 的软件包,供企业用于集中处理 Git 仓库工作。Git 是一款专门用来追踪源代码变化的软件,可使多人工程团队编写代码,之后同步给一台中央服务器——在本案例中同步给戴姆勒基于 ...
- 下一篇
用Python发一封图文并茂的邮件
最近使用了不少通讯工具的接口, 比如企业微信机器人,钉钉,微信公众号的接口(未认证的订阅公众号),相对于邮件来说,它们的表现形式太弱。比如没有更丰富的版本方式。当然了,并不是说表现形式越棒就是约好的通知手段,这个依个人情况而定,而我恰恰需要比较丰富的表现形式,最终还是回到了邮件,邮件真香! 而个人微信号的接口我没有合适的微信号可以登录,如果网页版微信没有被封的话,我想这个是表现形式与消息时效性结合的最好的方式。 环境 虽说就发邮件这么个小事,很容易兼容Python2, Python3, 但是大家还是拥抱Python3吧, 我这里没有做python2的兼容写法,所以需要python3以上。 邮件的格式 邮件的格式主要就两种: plain和html plain就像一个普通的文本, 没有格式。 html就如其名, 是html的格式,相当于一个邮件就是一个静态的网页,这样的话可玩性就很高了,你可以通过css控制表现形式. 注意: 这里的css虽然语法一样,但,是否与浏览器渲染结果完全一致, 是不一定的。 那么可能有人要问了,我要发一个动态的网页怎么办? 发个链接呀 邮箱账号 无论是QQ邮箱抑或...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7