1、docker准备
准备一台服务器,安装好docker,docker官网有详细的安装步骤,不赘述
docker安装(ubuntu为例)
2、搭建gitlab
docker 安装完毕,首先要搭建gitlab
docker 安装gitlab 见官方文档
# 官方模板
sudo docker run --detach \
--hostname gitlab.example.com \ #主机名
--publish 443:443 --publish 80:80 --publish 22: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-ee:latest
# 我的配置
sudo docker run --detach \
--hostname www.***.top:13080 \
--publish 13443:443 --publish 13080:80 --publish 13022: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
部署以后,发生了第一个问题,就是代码无法提交;
总一下,究其原因有三:
- 在部署好的gitlab上,创建一个项目,拷贝的代码仓库地址,路径默认没有端口,ssh是默认向主机22端口,推送数据,
- 由于对docker不熟悉,--publish 13022:22不明所以,后来查明为服务端口:容器端口,--publish 13022:22实际暴露的是主机的13022端口;
- 阿里云服务器中,在安全策略中,13022端口要设置对外开放,当然也包括 13080 和 13443;
解决了这个问题以后,gitlab就算彻底部署成功了;
3、drone安装
drone是一款基于自动化部署的平台
打开官网有介绍
Automate Software Build and Testing
自动化软件 构建和测试
Drone is a self-service Continuous Integration platform for busy development teams
drone 是一个自助服务持续集成平台 为繁忙的开发团队
Configuration as a code
Pipelines are configured with a simple, easy‑to‑read file that you commit to your git repository. 用一个小的、简单的文件 配置管道 ,并将它推送到你的git仓库 Each Pipeline step is executed inside an isolated Docker container that is automatically downloaded at runtime. 每一个管道步骤实施 在一个独立的docker容器,并且该容器在运行时自动下载
Any Source Code Manager
Any Platform
Any Language
.... 这些都是他的特点也是他的优点,当然还有很多...
开始安装
可以给多个平台,我们选择gitlab安装
按照步骤一次操作
说一下我安装过程中的注意点
1、gitlab Applications
在gitlab Applications 中配置中,Redirect URI中路径地址要加上/login;
2、docker drone
docker run \
--volume=/var/lib/drone:/data \
--env=DRONE_GITLAB_SERVER=https://gitlab.com \ # gitlab的地址
--env=DRONE_GITLAB_CLIENT_ID=05136e57d80189bef462 \ # gitlab Applications 配置的应用中
--env=DRONE_GITLAB_CLIENT_SECRET=7c229228a77d2cbddaa61ddc78d45e \ # gitlab Applications 配置的应用中
--env=DRONE_RPC_SECRET= bea26a2221fd8090ea38720fc445eca6 \ # Create a Shared Secret `openssl rand -hex 16 创建的`
--env=DRONE_SERVER_HOST=drone.company.com \ # drone 的 host
--env=DRONE_SERVER_PROTO=http \ # drone 的 协议
--publish=23080:80 \
--publish=230443:443 \
--restart=always \
--detach=true \
--name=drone \ drone/drone:2
3、docker drone-runer
docker run --detach \
--volume=/var/run/docker.sock:/var/run/docker.sock \
--env=DRONE_RPC_PROTO=http \
--env=DRONE_RPC_HOST=drone.company.com \ # drone 的 host
--env=DRONE_RPC_SECRET= bea26a2221fd8090ea38720fc445eca6 \ # Create a Shared Secret
--env=DRONE_RUNNER_CAPACITY=2 \
--env=DRONE_RUNNER_NAME=drone-runner \
--publish=23000:3000 \
--restart=always \
--name=runner \ drone/drone-runner-docker:1
4、部署成功以后
1、浏览器打开drone的host,第一次没有登录,会跳转到gitlab授权,授权登录即可
2、在drone主页面,点击SYNC按钮,会将gitlab的代码仓库,同步到drone;
3、点开其中一个项目,点击SETTINGS,点击ACTIVATE REPOSITORY按钮,此时gitlab对应代码仓库,settings webhooks 会添加一条对应的hooks,gitlab提交代码,触发hook这条;
注意:这条hooks 是drone自动添加的,如果删除,在gitlab中手动添加,gitlab不会触发手动添加hook(即使配置一样);
如何解决:在SETTINGS底端点击DISABLE REPOSITORY按钮,将hook删掉,在重新进行上述操作,生成新的hooks;
5、.docker.yml 部署
1、在项目中添加.docker.yml文件
2、官方测试模板
kind: pipeline
type: docker
name: default
steps:
- name: backend
image: golang
commands:
- go build
- go test
- name: frontend
image: node
commands:
- npm install
- npm run test