CI实现方法之--Gitlab+Drone

网友投稿 308 2022-10-12

CI实现方法之--Gitlab+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

所有节点安装docker1) 安装必要的系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 2) 添加软件源 sudo yum-config-manager --add-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. 部署Harbor2.2.1. 安装docker-compose

curl -L -s`-`uname -m` -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

2.2.2. 下载harbor

解压后配置harbo.yamlhostname: 172.31.48.86 //修改为实际节点内网IP屏蔽 安装Harbor

./install.sh --with-clair

2.2.5. 安装结果检查

docker-compose ps //正常回显如下

2.3. 部署Drone2.3.1. 部署drone主应用如何取得

DRONE_GITLAB_CLIENT_ID 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=\ --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=\ --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=\ -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

3.2.2. 项目go-server中创建相关文件

1) 增加主应用代码文件:server.go

package main import ( "fmt" "log" "net/http" ) func hello(w r *{ fmt.Fprintf(w, "Hello World") } func main() { hello) if err := 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

username: from_secret: registry_username password: from_secret: registry_password

后续:

本次测试到此就告一段落,测试只是CICD中冰山一角,其他部分也会陆续更新。在这个新兴技术不断涌现的今天,通过不断的学习跟上时代步伐。现在有很多同学对k8s有研究,除了k8s本身外,其他围绕k8s附加功能也值得一学,希望本文及后续可以开启你k8s之路。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java零基础入门数组
下一篇:一文讲透Cluster API的前世、今生与未来
相关文章

 发表评论

暂时没有评论,来抢沙发吧~