theme: geek-black
这是我参与更文挑战的第3天,活动详情查看: 更文挑战
GiteaDroneCi
以下安装和操作均为Docker方式
1.安装gitea
1.安装gitea shell docker run -d --privileged=true --name=gitea -p 10022:22 -p 10080:3000 gitea/gitea
访问localhost:10080弹出交互安装页面 |修改项| 值 | |--|--| | 基础URL | 宿主机ip:10080 | | SSH服务域名 | 宿主机ip | 其余选项可以默认,可以自行修改。
2.创建一个测试项目,并通过http方式push到仓库。
我这里随便创建了一个springboot的web项目。
3.生成GiteaOauth
gitea右上角->设置->应用->创建应用 shell 客户端id:5667b0f2-2df0-497d-8c31-37e43f178a26 客户端秘钥:heaoKnIbKmGB3QGpE7NR5QLczaYtwlXA5PYweH3kcPp1
重定向到drone的url上 ```
我这里drone配置的是80端口
http://192.168.31.79/login *生成rpc秘钥*
openssl rand -hex 16 ```
3.安装drone
shell docker run \ -v /var/run/docker.sock:/var/run/docker.sock \ --env=DRONE_GITEA_SERVER=http://192.168.31.79:10080/ \ --env=DRONE_GITEA_CLIENT_ID=5667b0f2-2df0-497d-8c31-37e43f178a26 \ --env=DRONE_GITEA_CLIENT_SECRET=heaoKnIbKmGB3QGpE7NR5QLczaYtwlXA5PYweH3kcPp1 \ --env=DRONE_RPC_SECRET=dd6fed184d56520b5c72ff652f941eb2 \ --env=DRONE_USER_CREATE=username:root,admin:true \ --env=DRONE_SERVER_HOST=192.168.31.79 \ --env=DRONE_SERVER_PROTO=http \ --publish=80:80 \ --publish=443:443 \ --restart=always \ --detach=true \ --name=drone \ drone/drone
端口号之类的可以自己改为没被占用的即可,sock必须要挂载,因为drone需要依赖宿主的docker,可以缓存镜像等等。 | key | value | |--|--| | DRONEGITEASERVER | GiteaServerUrl | | DRONEGITEACLIENTID | 应用的客户端id | | DRONEGITEACLIENTSECRET | 应用的客户端秘钥 | | DRONERPCSECRET | 应用的Rpc秘钥 | | DRONEUSERCREATE | 管理员用户名对应Gitea的用户名 | | DRONESERVERHOST | DroneServer的ip+端口 |
参考: https://docs.drone.io/server/provider/gitea/
3.安装runner
``` docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ -e DRONERPCPROTO=http \ -e DRONERPCHOST=192.168.31.79 \ -e DRONERPCSECRET=dd6fed184d56520b5c72ff652f941eb2 \ -e DRONERUNNERCAPACITY=2 \ -e DRONERUNNERNAME=drone-runner \ -p 3000:3000 \ --restart always \ --name runner \ drone/drone-runner-docker
```
| key | value | |--|--| | DRONERPCHOST | drone的ip+端口 | | DRONEGITEACLIENTID | 应用的客户端id | | DRONERPC_SECRET | 应用的Rpc秘钥 |
参考:https://docs.drone.io/runner/docker/installation/linux/
4.安装私有镜像仓库(Nexus)
shell docker run -d -p 7081:8081 -p 7082:8082 -p 7083:8083 -p 5000:5000 --name nexus3 sonatype/nexus3
按照指示获取初始密码后登陆,并修改密码 如上图创建一个Docker(hosts)类型的镜像仓库,并再Realms添加docker权限
shell #docker.json添加仓库 "insecure-registries": [ "192.168.31.79:5000" ]
我这里没有去持久化,自己使用时可以修改,注意端口号。
5.配置Dockerfile
在项目的根目录下创建一个Dockerfile文件 yaml FROM openjdk:8 RUN ls ADD /target/*.jar app.jar ENTRYPOINT [ "sh", "-c", "java -jar /app.jar" ]
6.配置.Drone.yml
在项目的根目录下创建一个.Drone.yml文件(有个.别忘了) yaml kind: pipeline name: run #流水线名称 type: docker #类型 steps: - name: 打包&单元测试 #步骤名称 image: maven:3.6.2-jdk-8 #该步骤使用的镜像 commands: - mvn clean package #镜像中执行的命令 volumes: - name: cache path: /root/.m2 #挂载到宿主机的maven上避免每次都重新下载jar包 when: branch: master #分支 event: [ push ] #触发事件 - name: 打包镜像 image: plugins/docker # 构建docker镜像的镜像 settings: repo: 192.168.31.79:5000/mytest/test #本地镜像仓库,我这里搭建的默认不需要密码 tags: latest #版本 registry: 192.168.31.79:5000 username: admin #nexus的用户名 password: 123123 #nexus的密码 insecure: true #http必须加这个默认是https tags: latest volumes: - name: docker path: /var/run/docker.sock #挂载sock (这里好像可以不挂载之前报错加上的,可以不加试试) when: branch: master event: [ push ] volumes: - name: cache host: path: /Users/yujian/.m2 #host目录 - name: docker host: path: /var/run/docker.sock #宿主机 docker.sock文件
7.授权drone
访问drone的ip即可得到gitea的授权,点击授权此时会自动添加webhook。
8.激活项目
在drone->setting中激活项目并开启Trusted信任该项目
9.提交代码触发流水线
都是绿色则构建成功,这里drone执行完毕后会调用system prune -f清理未启动的镜像和容器。。本机操作需谨慎
10.总结
drone所有step在一个工作空间内,可以直接向下传递,比如build阶段的jar包目录为 yaml /drone/src/target/SpringBootTestDemo-0.0.1-SNAPSHOT.jar
其他容器使用目录为./target/SpringBootTestDemo-0.0.1-SNAPSHOT.jar即可获取
看了下plugins/docker的源码 ```go if p.Cleanup { cmds = append(cmds, commandRmi(p.Build.Name)) // docker rmi cmds = append(cmds, commandPrune()) // docker system prune -f }
Dryrun: c.Bool("dry-run"), Cleanup: c.BoolT("docker.purge"), #改为在settings配置中purge = false就行 Login: docker.Login{ Registry: c.String("docker.registry"), Username: c.String("docker.username"), Password: c.String("docker.password"), Email: c.String("docker.email"), Config: c.String("docker.config"), }, ```
问题
使用过程如果发现点击授权重定向到login一直超时没反应,需要查看下docker network是不是有个drone开头的网络需要干掉,当时删掉的唐突没记录ip和原因,暂时没复现