GiteaDroneCi
以下安裝和操作均為Docker方式
1.安裝gitea
1.安裝gitea
docker run -d --privileged=true --name=gitea -p 10022:22 -p 10080:3000 gitea/gitea
訪問localhost:10080彈出交互安裝頁面
修改項(xiàng) | 值 |
---|---|
基礎(chǔ)URL | 宿主機(jī)ip:10080 |
SSH服務(wù)域名 | 宿主機(jī)ip |
其余選項(xiàng)可以默認(rèn),可以自行修改挚币。
2.創(chuàng)建一個(gè)測試項(xiàng)目碍沐,并通過http方式push到倉庫尝抖。
我這里隨便創(chuàng)建了一個(gè)springboot的web項(xiàng)目。
3.生成GiteaOauth
gitea右上角->設(shè)置->應(yīng)用->創(chuàng)建應(yīng)用
客戶端id:5667b0f2-2df0-497d-8c31-37e43f178a26
客戶端秘鑰:heaoKnIbKmGB3QGpE7NR5QLczaYtwlXA5PYweH3kcPp1
重定向到drone的url上
#我這里drone配置的是80端口
http://192.168.31.79/login
生成rpc秘鑰
openssl rand -hex 16
3.安裝drone
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必須要掛載膊爪,因?yàn)閐rone需要依賴宿主的docker,可以緩存鏡像等等瘩缆。
key | value |
---|---|
DRONE_GITEA_SERVER | GiteaServerUrl |
DRONE_GITEA_CLIENT_ID | 應(yīng)用的客戶端id |
DRONE_GITEA_CLIENT_SECRET | 應(yīng)用的客戶端秘鑰 |
DRONE_RPC_SECRET | 應(yīng)用的Rpc秘鑰 |
DRONE_USER_CREATE | 管理員用戶名對應(yīng)Gitea的用戶名 |
參考: https://docs.drone.io/server/provider/gitea/
3.安裝runner
docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_PROTO=http \
-e DRONE_RPC_HOST=192.168.31.79 \
-e DRONE_RPC_SECRET=dd6fed184d56520b5c72ff652f941eb2 \
-e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RUNNER_NAME=drone-runner \
-p 3000:3000 \
--restart always \
--name runner \
drone/drone-runner-docker
key | value |
---|---|
DRONE_RPC_HOST | drone的ip |
DRONE_GITEA_CLIENT_ID | 應(yīng)用的客戶端id |
DRONE_RPC_SECRET | 應(yīng)用的Rpc秘鑰 |
參考:https://docs.drone.io/runner/docker/installation/linux/
4.安裝私有鏡像倉庫
docker run -d -e ENV_DOCKER_REGISTRY_HOST=192.168.31.79 -e ENV_DOCKER_REGISTRY_PORT=5000 -p 9000:80 konradkleine/docker-registry-frontend:v2
#docker.json添加倉庫
"insecure-registries": [
"192.168.31.79:5000"
]
我這里沒有去持久化,自己使用時(shí)可以修改佃蚜,注意端口號庸娱。
5.配置Dockerfile
在項(xiàng)目的根目錄下創(chuàng)建一個(gè)Dockerfile文件
FROM openjdk:8
RUN ls
ADD /target/*.jar app.jar
ENTRYPOINT [ "sh", "-c", "java -jar /app.jar" ]
6.配置.Drone.yml
在項(xiàng)目的根目錄下創(chuàng)建一個(gè).Drone.yml文件(有個(gè).別忘了)
kind: pipeline
name: run #流水線名稱
type: docker #類型
steps:
- name: build #步驟名稱
image: maven:3.6.2-jdk-8 #該步驟使用的鏡像
commands:
- mvn clean package -Dmaven.test.skip #鏡像中執(zhí)行的命令
volumes:
- name: cache
path: /root/.m2 #掛載到宿主機(jī)的maven上避免每次都重新下載jar包
when:
branch: master #分支
event: [ push ] #觸發(fā)事件
- name: docker
image: plugins/docker # 構(gòu)建docker鏡像的鏡像
settings:
repo: 192.168.31.79:5000/mytest/test #本地鏡像倉庫,我這里搭建的默認(rèn)不需要密碼
tags: latest #版本
volumes:
- name: docker
path: /var/run/docker.sock #掛載sock (這里好像可以不掛載之前報(bào)錯(cuò)加上的谐算,可以不加試試)
when:
branch: master
event: [ push ]
volumes:
- name: cache
host:
path: /Users/yujian/.m2 #host目錄
- name: docker
host:
path: /var/run/docker.sock #宿主機(jī) docker.sock文件
7.授權(quán)drone
訪問drone的ip即可得到gitea的授權(quán)熟尉,點(diǎn)擊授權(quán)此時(shí)會自動(dòng)添加webhook。
8.激活項(xiàng)目
在drone->setting中激活項(xiàng)目并開啟Trusted信任該項(xiàng)目
9.提交代碼觸發(fā)流水線
都是綠色則構(gòu)建成功洲脂,這里drone執(zhí)行完畢后會調(diào)用system prune -f清理未啟動(dòng)的鏡像和容器斤儿。。本機(jī)操作需謹(jǐn)慎
10.總結(jié)
drone所有step在一個(gè)工作空間內(nèi),可以直接向下傳遞往果,比如build階段的jar包目錄為
/drone/src/target/SpringBootTestDemo-0.0.1-SNAPSHOT.jar
其他容器使用目錄為./target/SpringBootTestDemo-0.0.1-SNAPSHOT.jar即可獲取
補(bǔ)充:
上述的yaml只提供的交付到鏡像的步驟還可以添加來運(yùn)行一個(gè)容器
- name: start
image: plugins/docker
commands:
- docker run -d --name test 192.168.31.79:5000/mytest/test
volumes:
- name: docker
path: /var/run/docker.sock
when:
branch: master
event: [ push ]