Merge branch 'dev_devops' of http://gitea.trustie.net/jasder/forgeplus into dev_devops
This commit is contained in:
commit
c45b8184c6
|
@ -0,0 +1,13 @@
|
|||
kind: pipeline
|
||||
name: default
|
||||
|
||||
platform:
|
||||
os: linux
|
||||
arch: arm64
|
||||
|
||||
steps:
|
||||
- name: test
|
||||
image: ruby
|
||||
commands:
|
||||
- bundle install --jobs=3 --retry=3
|
||||
- rake
|
405
README.md
405
README.md
|
@ -2332,7 +2332,7 @@ http://localhost:3000/api//api/repositories/3868/delete_file | jq
|
|||
|
||||
|
||||
返回值
|
||||
```
|
||||
```json
|
||||
{
|
||||
"commit": {
|
||||
"sha": "7b70509105b587e71f5692b9e8ab70851e321f64",
|
||||
|
@ -2368,7 +2368,7 @@ curl -X POST \
|
|||
-d "account=xx" \
|
||||
-d "secret=xxx" \
|
||||
-d "ip_num=xx.xx.xx.xx" \
|
||||
-d "repo_id=5988" \
|
||||
-d "project_id=5988" \
|
||||
https://localhost:3000/api/dev_ops/cloud_accounts.json | jq
|
||||
```
|
||||
|
||||
|
@ -2379,7 +2379,7 @@ https://localhost:3000/api/dev_ops/cloud_accounts.json | jq
|
|||
|account |是|string |云服务器ssh连接登录用户名 |
|
||||
|secret |是|string |云服务器ssh连接登录秘密 |
|
||||
|ip_num |否|string |云服务器公网IP |
|
||||
|repo_id |否|string |repository id|
|
||||
|project_id |否|string |project's id|
|
||||
|
||||
*返回参数说明:*
|
||||
|
||||
|
@ -2390,7 +2390,7 @@ https://localhost:3000/api/dev_ops/cloud_accounts.json | jq
|
|||
|redirect_url |string|重定向地址,请求成功后,需要调整到该地址进行认证|
|
||||
|
||||
返回值
|
||||
```
|
||||
```json
|
||||
{
|
||||
"status": 0,
|
||||
"message": "success",
|
||||
|
@ -2399,6 +2399,40 @@ https://localhost:3000/api/dev_ops/cloud_accounts.json | jq
|
|||
```
|
||||
---
|
||||
|
||||
#### 获取仓库的.trustie-pipeline.yml
|
||||
```
|
||||
GET /api/dev_ops/builds/get_trustie_pipeline
|
||||
```
|
||||
*示例*
|
||||
```
|
||||
curl -X GET \
|
||||
-d "project_id=4844" \
|
||||
http://localhost:3000/api/dev_ops/builds/get_trustie_pipeline.json | jq
|
||||
```
|
||||
*请求参数说明:*
|
||||
|
||||
|参数名|必选|类型|说明|
|
||||
|-|-|-|-|
|
||||
|project_id |是|int |project's id |
|
||||
|ref |否|string |分支名称、tag名称或是提交记录id,默认为master分支 |
|
||||
|
||||
|
||||
*返回参数说明:*
|
||||
|
||||
|参数名|类型|说明|
|
||||
|-|-|-|
|
||||
|name |string|文件夹或文件名称|
|
||||
|path |string|文件夹或文件相对路径|
|
||||
|content |string|文件内容,|
|
||||
|
||||
```
|
||||
{
|
||||
"name": ".trustie-pipeline.yml",
|
||||
"path": ".trustie-pipeline.yml",
|
||||
"content": "..jsaf"
|
||||
}
|
||||
```
|
||||
|
||||
#### 获取语言列表
|
||||
```
|
||||
GET /api/dev_ops/languages
|
||||
|
@ -2419,7 +2453,7 @@ curl -X GET http://localhost:3000/api/dev_ops/languages.json | jq
|
|||
|cover_url |string|语言的logo链接|
|
||||
|
||||
返回值
|
||||
```
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": 114,
|
||||
|
@ -2451,7 +2485,7 @@ curl -X GET http://localhost:3000/api/dev_ops/languages/common.json | jq
|
|||
|cover_url |string|语言的logo链接|
|
||||
|
||||
返回值
|
||||
```
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": 114,
|
||||
|
@ -2489,7 +2523,7 @@ curl -X GET http://localhost:3000/api/dev_ops/languages/114.json | jq
|
|||
|cover_url |string|语言的logo链接|
|
||||
|
||||
返回值
|
||||
```
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": 114,
|
||||
|
@ -2508,9 +2542,17 @@ GET /api/dev_ops/builds
|
|||
|
||||
*示例*
|
||||
```
|
||||
curl -X GET http://localhost:3000/api/dev_ops/builds | jq
|
||||
curl -X GET \
|
||||
-d 'project_id=4844' \
|
||||
http://localhost:3000/api/dev_ops/builds | jq
|
||||
```
|
||||
|
||||
*请求参数说明:*
|
||||
|
||||
|参数名|必选|类型|说明|
|
||||
|-|-|-|-|
|
||||
|project_id |是|int |project's id |
|
||||
|
||||
*返回参数说明:*
|
||||
|
||||
|参数名|类型|说明|
|
||||
|
@ -2521,32 +2563,34 @@ curl -X GET http://localhost:3000/api/dev_ops/builds | jq
|
|||
|event |string|build's event|
|
||||
|
||||
返回值
|
||||
```
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": 100207,
|
||||
"repo_id": 296163,
|
||||
"number": 42,
|
||||
"id": 1,
|
||||
"repo_id": 8,
|
||||
"trigger": "@hook",
|
||||
"number": 1,
|
||||
"status": "success",
|
||||
"event": "pull_request",
|
||||
"action": "sync",
|
||||
"link": "https://github.com/octoat/hello-world/compare/e3320539a4c0...9fc1ad6ebf12",
|
||||
"message": "updated README",
|
||||
"before": "e3320539a4c03ccfda992641646deb67d8bf98f3",
|
||||
"after": "9fc1ad6ebf12462f3f9773003e26b4c6f54a772e",
|
||||
"event": "push",
|
||||
"action": "",
|
||||
"link": "",
|
||||
"timestamp": 0,
|
||||
"message": "更新 '.trustie-pipeline.yml'\n",
|
||||
"before": "5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324",
|
||||
"after": "5e52ce51a239f5c8dd0b489a8a71e94f976179b4",
|
||||
"ref": "refs/heads/master",
|
||||
"source_repo": "spaceghost/hello-world",
|
||||
"source": "develop",
|
||||
"source_repo": "",
|
||||
"source": "master",
|
||||
"target": "master",
|
||||
"author_login": "octocat",
|
||||
"author_name": "The Octocat",
|
||||
"author_email": "octocat@github.com",
|
||||
"author_avatar": "http://www.gravatar.com/avatar/7194e8d48fa1d2b689f99443b767316c",
|
||||
"sender": "bradrydzewski",
|
||||
"started": 1564085874,
|
||||
"finished": 1564086343,
|
||||
"created": 1564085874,
|
||||
"updated": 1564085874,
|
||||
"author_login": "jasder",
|
||||
"author_name": "jasder",
|
||||
"author_email": "email.com",
|
||||
"author_avatar": "",
|
||||
"sender": "jasder",
|
||||
"started": 1595317786,
|
||||
"finished": 1595318426,
|
||||
"created": 1595317786,
|
||||
"updated": 1595317786,
|
||||
"version": 3
|
||||
}
|
||||
]
|
||||
|
@ -2560,13 +2604,16 @@ GET /api/dev_ops/builds/:number
|
|||
|
||||
*示例*
|
||||
```
|
||||
curl -X GET http://localhost:3000/api/dev_ops/builds/42 | jq
|
||||
curl -X GET \
|
||||
-d 'project_id=4844' \
|
||||
http://ocalhost:3000/api/dev_ops/builds/1 | jq
|
||||
```
|
||||
|
||||
*请求参数说明:*
|
||||
|
||||
|参数名|必选|类型|说明|
|
||||
|-|-|-|-|
|
||||
|project_id |int|project's id|
|
||||
|number |是|int |build's number |
|
||||
|
||||
*返回参数说明:*
|
||||
|
@ -2578,54 +2625,80 @@ curl -X GET http://localhost:3000/api/dev_ops/builds/42 | jq
|
|||
|event |string|build's event|
|
||||
|
||||
返回值
|
||||
```
|
||||
```json
|
||||
{
|
||||
"id": 100207,
|
||||
"repo_id": 296163,
|
||||
"number": 42,
|
||||
"status": "pending",
|
||||
"event": "pull_request",
|
||||
"action": "sync",
|
||||
"link": "https://github.com/octoat/hello-world/compare/e3320539a4c0...9fc1ad6ebf12",
|
||||
"message": "updated README",
|
||||
"before": "e3320539a4c03ccfda992641646deb67d8bf98f3",
|
||||
"after": "9fc1ad6ebf12462f3f9773003e26b4c6f54a772e",
|
||||
"id": 1,
|
||||
"repo_id": 8,
|
||||
"trigger": "@hook",
|
||||
"number": 1,
|
||||
"status": "success",
|
||||
"event": "push",
|
||||
"action": "",
|
||||
"link": "http://localhost:3000/jasder/forgeplus/compare/5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324...5e52ce51a239f5c8dd0b489a8a71e94f976179b4",
|
||||
"timestamp": 0,
|
||||
"message": "更新 '.trustie-pipeline.yml'\n",
|
||||
"before": "5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324",
|
||||
"after": "5e52ce51a239f5c8dd0b489a8a71e94f976179b4",
|
||||
"ref": "refs/heads/master",
|
||||
"source_repo": "spaceghost/hello-world",
|
||||
"source": "develop",
|
||||
"source_repo": "",
|
||||
"source": "master",
|
||||
"target": "master",
|
||||
"author_login": "octocat",
|
||||
"author_name": "The Octocat",
|
||||
"author_email": "octocat@github.com",
|
||||
"author_avatar": "http://www.gravatar.com/avatar/7194e8d48fa1d2b689f99443b767316c",
|
||||
"sender": "bradrydzewski",
|
||||
"started": 0,
|
||||
"finished": 0,
|
||||
"created": 1564085874,
|
||||
"updated": 1564085874,
|
||||
"version": 1,
|
||||
"author_login": "jasder",
|
||||
"author_name": "jasder",
|
||||
"author_email": "2053003901@qq.com",
|
||||
"author_avatar": "http://localhost:3000/user/avatar/jasder/-1",
|
||||
"sender": "jasder",
|
||||
"started": 1595317786,
|
||||
"finished": 1595318426,
|
||||
"created": 1595317786,
|
||||
"updated": 1595317786,
|
||||
"version": 3,
|
||||
"stages": [
|
||||
{
|
||||
"id": 199937,
|
||||
"repo_id": 296163,
|
||||
"build_id": 100207,
|
||||
"id": 1,
|
||||
"repo_id": 8,
|
||||
"build_id": 1,
|
||||
"number": 1,
|
||||
"name": "default",
|
||||
"kind": "pipeline",
|
||||
"type": "docker",
|
||||
"status": "pending",
|
||||
"status": "success",
|
||||
"errignore": false,
|
||||
"exit_code": 0,
|
||||
"machine": "15e89c0f84f1",
|
||||
"machine": "121.36.81.172",
|
||||
"os": "linux",
|
||||
"arch": "amd64",
|
||||
"started": 0,
|
||||
"stopped": 0,
|
||||
"created": 1564085874,
|
||||
"updated": 1564086343,
|
||||
"version": 1,
|
||||
"arch": "arm64",
|
||||
"started": 1595317786,
|
||||
"stopped": 1595318426,
|
||||
"created": 1595317786,
|
||||
"updated": 1595318426,
|
||||
"version": 4,
|
||||
"on_success": true,
|
||||
"on_failure": false
|
||||
"on_failure": false,
|
||||
"steps": [
|
||||
{
|
||||
"id": 1,
|
||||
"step_id": 1,
|
||||
"number": 1,
|
||||
"name": "clone",
|
||||
"status": "success",
|
||||
"exit_code": 0,
|
||||
"started": 1595317786,
|
||||
"stopped": 1595318373,
|
||||
"version": 4
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"step_id": 1,
|
||||
"number": 2,
|
||||
"name": "test",
|
||||
"status": "success",
|
||||
"exit_code": 0,
|
||||
"started": 1595318373,
|
||||
"stopped": 1595318426,
|
||||
"version": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -2639,13 +2712,16 @@ POST /api/dev_ops/builds/:number
|
|||
|
||||
*示例*
|
||||
```
|
||||
curl -X POST http://localhost:3000/api/dev_ops/builds/42 | jq
|
||||
curl -X POST \
|
||||
-d 'project_id=4844' \
|
||||
http://localhost:3000/api/dev_ops/builds/1 | jq
|
||||
```
|
||||
|
||||
*请求参数说明:*
|
||||
|
||||
|参数名|必选|类型|说明|
|
||||
|-|-|-|-|
|
||||
|project_id |int|project's id|
|
||||
|number |是|int |build's number |
|
||||
|
||||
*返回参数说明:*
|
||||
|
@ -2657,56 +2733,34 @@ curl -X POST http://localhost:3000/api/dev_ops/builds/42 | jq
|
|||
|event |string|build's event|
|
||||
|
||||
返回值
|
||||
```
|
||||
```json
|
||||
{
|
||||
"id": 100207,
|
||||
"repo_id": 296163,
|
||||
"number": 42,
|
||||
"id": 2,
|
||||
"repo_id": 8,
|
||||
"trigger": "jasder",
|
||||
"number": 2,
|
||||
"status": "pending",
|
||||
"event": "pull_request",
|
||||
"action": "sync",
|
||||
"link": "https://github.com/octoat/hello-world/compare/e3320539a4c0...9fc1ad6ebf12",
|
||||
"message": "updated README",
|
||||
"before": "e3320539a4c03ccfda992641646deb67d8bf98f3",
|
||||
"after": "9fc1ad6ebf12462f3f9773003e26b4c6f54a772e",
|
||||
"event": "push",
|
||||
"action": "",
|
||||
"link": "http://localhost:3000/jasder/forgeplus/compare/5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324...5e52ce51a239f5c8dd0b489a8a71e94f976179b4",
|
||||
"timestamp": 0,
|
||||
"message": "更新 '.trustie-pipeline.yml'\n",
|
||||
"before": "5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324",
|
||||
"after": "5e52ce51a239f5c8dd0b489a8a71e94f976179b4",
|
||||
"ref": "refs/heads/master",
|
||||
"source_repo": "spaceghost/hello-world",
|
||||
"source": "develop",
|
||||
"source_repo": "",
|
||||
"source": "master",
|
||||
"target": "master",
|
||||
"author_login": "octocat",
|
||||
"author_name": "The Octocat",
|
||||
"author_email": "octocat@github.com",
|
||||
"author_avatar": "http://www.gravatar.com/avatar/7194e8d48fa1d2b689f99443b767316c",
|
||||
"sender": "bradrydzewski",
|
||||
"author_login": "jasder",
|
||||
"author_name": "jasder",
|
||||
"author_email": "2053003901@qq.com",
|
||||
"author_avatar": "http://localhost:3000/user/avatar/jasder/-1",
|
||||
"sender": "jasder",
|
||||
"started": 0,
|
||||
"finished": 0,
|
||||
"created": 1564085874,
|
||||
"updated": 1564085874,
|
||||
"version": 1,
|
||||
"stages": [
|
||||
{
|
||||
"id": 199937,
|
||||
"repo_id": 296163,
|
||||
"build_id": 100207,
|
||||
"number": 1,
|
||||
"name": "default",
|
||||
"kind": "pipeline",
|
||||
"type": "docker",
|
||||
"status": "pending",
|
||||
"errignore": false,
|
||||
"exit_code": 0,
|
||||
"machine": "15e89c0f84f1",
|
||||
"os": "linux",
|
||||
"arch": "amd64",
|
||||
"started": 0,
|
||||
"stopped": 0,
|
||||
"created": 1564085874,
|
||||
"updated": 1564086343,
|
||||
"version": 1,
|
||||
"on_success": true,
|
||||
"on_failure": false
|
||||
}
|
||||
]
|
||||
"created": 1595321350,
|
||||
"updated": 1595321350,
|
||||
"version": 1
|
||||
}
|
||||
```
|
||||
---
|
||||
|
@ -2718,13 +2772,16 @@ DELETE /api/dev_ops/builds/:number
|
|||
|
||||
*示例*
|
||||
```
|
||||
curl -X DELETE http://localhost:3000/api/dev_ops/builds/42 | jq
|
||||
curl -X DELETE \
|
||||
-d 'project_id=4844' \
|
||||
http://localhost:3000/api/dev_ops/builds/2 | jq
|
||||
```
|
||||
|
||||
*请求参数说明:*
|
||||
|
||||
|参数名|必选|类型|说明|
|
||||
|-|-|-|-|
|
||||
|project_id |int|project's id|
|
||||
|number |是|int |build's number |
|
||||
|
||||
*返回参数说明:*
|
||||
|
@ -2736,7 +2793,83 @@ curl -X DELETE http://localhost:3000/api/dev_ops/builds/42 | jq
|
|||
|event |string|build's event|
|
||||
|
||||
返回值
|
||||
```
|
||||
```json
|
||||
{
|
||||
"id": 2,
|
||||
"repo_id": 8,
|
||||
"trigger": "jasder",
|
||||
"number": 2,
|
||||
"status": "killed",
|
||||
"event": "push",
|
||||
"action": "",
|
||||
"link": "http://localhost:3000/jasder/forgeplus/compare/5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324...5e52ce51a239f5c8dd0b489a8a71e94f976179b4",
|
||||
"timestamp": 0,
|
||||
"message": "更新 '.trustie-pipeline.yml'\n",
|
||||
"before": "5e7c6f7dfd5ce6cc6e287fcbc000dadd9992b324",
|
||||
"after": "5e52ce51a239f5c8dd0b489a8a71e94f976179b4",
|
||||
"ref": "refs/heads/master",
|
||||
"source_repo": "",
|
||||
"source": "master",
|
||||
"target": "master",
|
||||
"author_login": "jasder",
|
||||
"author_name": "jasder",
|
||||
"author_email": "2053003901@qq.com",
|
||||
"author_avatar": "http://localhost:3000/user/avatar/jasder/-1",
|
||||
"sender": "jasder",
|
||||
"started": 1595321352,
|
||||
"finished": 1595321590,
|
||||
"created": 1595321350,
|
||||
"updated": 1595321352,
|
||||
"version": 3,
|
||||
"stages": [
|
||||
{
|
||||
"id": 2,
|
||||
"repo_id": 8,
|
||||
"build_id": 2,
|
||||
"number": 1,
|
||||
"name": "default",
|
||||
"kind": "pipeline",
|
||||
"type": "docker",
|
||||
"status": "killed",
|
||||
"errignore": false,
|
||||
"exit_code": 0,
|
||||
"machine": "121.36.81.172",
|
||||
"os": "linux",
|
||||
"arch": "arm64",
|
||||
"started": 1595321352,
|
||||
"stopped": 1595321590,
|
||||
"created": 1595321350,
|
||||
"updated": 1595321352,
|
||||
"version": 4,
|
||||
"on_success": true,
|
||||
"on_failure": false,
|
||||
"steps": [
|
||||
{
|
||||
"id": 3,
|
||||
"step_id": 2,
|
||||
"number": 1,
|
||||
"name": "clone",
|
||||
"status": "killed",
|
||||
"exit_code": 130,
|
||||
"started": 1595321353,
|
||||
"stopped": 1595321590,
|
||||
"version": 3
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"step_id": 2,
|
||||
"number": 2,
|
||||
"name": "test",
|
||||
"status": "skipped",
|
||||
"exit_code": 130,
|
||||
"started": 1595321590,
|
||||
"stopped": 1595321590,
|
||||
"version": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
---
|
||||
|
||||
|
@ -2747,16 +2880,19 @@ GET /api/dev_ops/builds/:number/logs/:stage/:step
|
|||
|
||||
*示例*
|
||||
```
|
||||
curl -X GET http://localhost:3000/api/dev_ops/builds/42/logs/ | jq
|
||||
curl -X GET \
|
||||
-d 'project_id=4844' \
|
||||
http://localhost:3000/api/dev_ops/builds/2/logs/1/1 | jq
|
||||
```
|
||||
|
||||
*请求参数说明:*
|
||||
|
||||
|参数名|必选|类型|说明|
|
||||
|-|-|-|-|
|
||||
|project_id |int|project's id|
|
||||
|number |是|int |build's number |
|
||||
|stage |是|int |build's stage id |
|
||||
|step |是|int |build's step id |
|
||||
|stage |是|int |build's stage number |
|
||||
|step |是|int |build's step number |
|
||||
|
||||
*返回参数说明:*
|
||||
|
||||
|
@ -2767,52 +2903,47 @@ curl -X GET http://localhost:3000/api/dev_ops/builds/42/logs/ | jq
|
|||
|event |string|build's event|
|
||||
|
||||
返回值
|
||||
```
|
||||
```json
|
||||
[
|
||||
{
|
||||
"proc": "clone",
|
||||
"pos": 0,
|
||||
"out": "+ git init\n"
|
||||
"out": "+ git fetch origin +refs/heads/master:\n",
|
||||
"time": 1
|
||||
},
|
||||
{
|
||||
"proc": "clone",
|
||||
"pos": 1,
|
||||
"out": "Initialized empty Git repository in /drone/src/github.com/octocat/hello-world/.git/\n"
|
||||
"out": "Initialized empty Git repository in /drone/src/.git/\n",
|
||||
"time": 1
|
||||
},
|
||||
{
|
||||
"proc": "clone",
|
||||
"pos": 2,
|
||||
"out": "+ git remote add origin https://github.com/octocat/hello-world.git\n"
|
||||
"out": "warning: redirecting to https://testgitea2.trustie.net/jasder/forgeplus.git/\n",
|
||||
"time": 1
|
||||
},
|
||||
{
|
||||
"proc": "clone",
|
||||
"pos": 3,
|
||||
"out": "+ git fetch --no-tags origin +refs/heads/master:\n"
|
||||
"out": "From http://testgitea2.trustie.net/jasder/forgeplus\n",
|
||||
"time": 493
|
||||
},
|
||||
{
|
||||
"proc": "clone",
|
||||
"pos": 4,
|
||||
"out": "From https://github.com/octocat/hello-world\n"
|
||||
"out": " * branch master -> FETCH_HEAD\n",
|
||||
"time": 493
|
||||
},
|
||||
{
|
||||
"proc": "clone",
|
||||
"pos": 5,
|
||||
"out": " * branch master -> FETCH_HEAD\n"
|
||||
"out": " * [new branch] master -> origin/master\n",
|
||||
"time": 493
|
||||
},
|
||||
{
|
||||
"proc": "clone",
|
||||
"pos": 6,
|
||||
"out": " * [new branch] master -> origin/master\n"
|
||||
"out": "+ git checkout 5e52ce51a239f5c8dd0b489a8a71e94f976179b4 -b master\n",
|
||||
"time": 493
|
||||
},
|
||||
{
|
||||
"proc": "clone",
|
||||
"pos": 7,
|
||||
"out": "+ git reset --hard -q 62126a02ffea3dabd7789e5c5407553490973665\n"
|
||||
},
|
||||
{
|
||||
"proc": "clone",
|
||||
"pos": 8,
|
||||
"out": "+ git submodule update --init --recursive\n"
|
||||
"out": "Already on 'master'\n",
|
||||
"time": 496
|
||||
}
|
||||
]
|
||||
```
|
||||
|
|
|
@ -342,7 +342,8 @@ class ApplicationController < ActionController::Base
|
|||
elsif params[:debug] == 'student'
|
||||
User.current = User.find 8686
|
||||
elsif params[:debug] == 'admin'
|
||||
user = User.find 1
|
||||
logger.info "@@@@@@@@@@@@@@@@@@@@@@ debug mode....."
|
||||
user = User.find 36480
|
||||
User.current = user
|
||||
cookies.signed[:user_id] = user.id
|
||||
end
|
||||
|
@ -384,7 +385,7 @@ class ApplicationController < ActionController::Base
|
|||
|
||||
def current_user
|
||||
if Rails.env.development?
|
||||
User.current = User.find 1
|
||||
User.current = User.find 36480
|
||||
else
|
||||
User.current
|
||||
end
|
||||
|
@ -743,6 +744,11 @@ class ApplicationController < ActionController::Base
|
|||
interactor.success? ? render_ok : render_error(interactor.error)
|
||||
end
|
||||
|
||||
# devops 权限验证
|
||||
def devops_authorize!
|
||||
render_forbidden unless @project.owner?(current_user)
|
||||
end
|
||||
|
||||
private
|
||||
def object_not_found
|
||||
uid_logger("Missing template or cant't find record, responding with 404")
|
||||
|
|
|
@ -1,43 +1,59 @@
|
|||
class ::DevOps::BuildsController < ApplicationController
|
||||
class DevOps::BuildsController < ApplicationController
|
||||
include RepositoriesHelper
|
||||
|
||||
before_action :require_login
|
||||
before_action :find_repo
|
||||
before_action :find_project
|
||||
before_action :devops_authorize!
|
||||
|
||||
def index
|
||||
cloud_account = @repo.dev_ops_cloud_account
|
||||
result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier).builds
|
||||
cloud_account = @project.dev_ops_cloud_account
|
||||
result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @project.owner.login, @project.identifier).builds
|
||||
|
||||
render json: result
|
||||
end
|
||||
|
||||
def detail
|
||||
cloud_account = @repo.dev_ops_cloud_account
|
||||
result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, number: params[:number]).build
|
||||
cloud_account = @project.dev_ops_cloud_account
|
||||
result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @project.owner.login, @project.identifier, number: params[:number]).build
|
||||
|
||||
render json: result
|
||||
end
|
||||
|
||||
def restart
|
||||
cloud_account = @repo.dev_ops_cloud_account
|
||||
result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, number: params[:number]).restart
|
||||
cloud_account = @project.dev_ops_cloud_account
|
||||
result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @project.owner.login, @project.identifier, number: params[:number]).restart
|
||||
|
||||
render json: result
|
||||
end
|
||||
|
||||
def delete
|
||||
cloud_account = @repo.dev_ops_cloud_account
|
||||
result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, number: params[:number]).stop
|
||||
cloud_account = @project.dev_ops_cloud_account
|
||||
result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @project.owner.login, @project.identifier, number: params[:number]).stop
|
||||
render json: result
|
||||
end
|
||||
|
||||
def logs
|
||||
cloud_account = @repo.dev_ops_cloud_account
|
||||
result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @repo.user.login, @repo.identifier, build: params[:build], stage: params[:stage], step: sync_params[:step]).logs
|
||||
cloud_account = @project.dev_ops_cloud_account
|
||||
result = DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, @project.owner.login, @project.identifier, build: params[:number], stage: params[:stage], step: params[:step]).logs
|
||||
|
||||
render json: result
|
||||
end
|
||||
|
||||
# get .trustie-pipeline.yml file
|
||||
def get_trustie_pipeline
|
||||
file_path_uri = URI.parse('.trustie-pipeline.yml')
|
||||
interactor = Repositories::EntriesInteractor.call(@project.owner, @project.identifier, file_path_uri, ref: params[:ref] || "master")
|
||||
if interactor.success?
|
||||
file = interactor.result
|
||||
return render json: {} if file[:status]
|
||||
|
||||
json = {name: file['name'], path: file['path'], content: render_decode64_content(file['content'])}
|
||||
render json: json
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def find_repo
|
||||
@repo = ::Repository.find params[:id]
|
||||
def find_project
|
||||
@project = Project.find params[:project_id]
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,25 +1,21 @@
|
|||
class DevOps::CloudAccountsController < ApplicationController
|
||||
before_action :require_login
|
||||
before_action :find_project
|
||||
before_action :devops_authorize!
|
||||
|
||||
def create
|
||||
ActiveRecord::Base.transaction do
|
||||
DevOps::CreateCloudAccountForm.new(devops_params).validate!
|
||||
logger.info "######### devops_params: #{devops_params}"
|
||||
logger.info "######### ......: #{(IPAddr.new devops_params[:ip_num]).to_i}"
|
||||
logger.info "######### ......: #{DevOps::CloudAccount.encrypted_secret(devops_params[:secret])}"
|
||||
|
||||
# 1. 保存华为云服务器帐号
|
||||
logger.info "######### ......ff: #{devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: DevOps::CloudAccount.encrypted_secret(devops_params[:secret]))}"
|
||||
create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: DevOps::CloudAccount.encrypted_secret(devops_params[:secret]))
|
||||
logger.info "######### create_params: #{create_params}"
|
||||
|
||||
|
||||
if cloud_account = @repo.dev_ops_cloud_account
|
||||
cloud_account
|
||||
if cloud_account = @project.dev_ops_cloud_account
|
||||
return render_error('该仓库已绑定了云帐号.')
|
||||
else
|
||||
cloud_account = DevOps::CloudAccount.new(create_params)
|
||||
cloud_account.user = current_user
|
||||
cloud_account.repo_id = @repo.id
|
||||
cloud_account.repo_id = @project.repository.id
|
||||
cloud_account.project_id = @project.id
|
||||
cloud_account.save!
|
||||
end
|
||||
|
||||
|
@ -31,11 +27,12 @@ class DevOps::CloudAccountsController < ApplicationController
|
|||
redirect_uri: gitea_oauth['redirect_uris'],
|
||||
gitea_oauth_id: gitea_oauth['id'],
|
||||
user_id: current_user.id,
|
||||
project_id: devops_params[:project_id])
|
||||
project_id: @project.id)
|
||||
oauth.save
|
||||
|
||||
rpc_secret = SecureRandom.hex 16
|
||||
logger.info "######### rpc_secret: #{rpc_secret}"
|
||||
|
||||
# 3. 创建drone server
|
||||
drone_server_cmd = DevOps::Drone::Server.new(oauth.client_id, oauth.client_secret, cloud_account.drone_host, rpc_secret).generate_cmd
|
||||
logger.info "######### drone_server_cmd: #{drone_server_cmd}"
|
||||
|
@ -49,12 +46,14 @@ class DevOps::CloudAccountsController < ApplicationController
|
|||
logger.info "######### result: #{result}"
|
||||
|
||||
|
||||
redirect_url = "#{Gitea.gitea_config[:domain]}/login/oauth/authorize?client_id=#{oauth.client_id}&redirect_uri=#{cloud_account.drone_url}/login&response_type=code"
|
||||
redirect_url = "#{cloud_account.drone_url}/login"
|
||||
logger.info "######### redirect_url: #{redirect_url}"
|
||||
if result
|
||||
|
||||
if result && !result.blank?
|
||||
render_ok(redirect_url: redirect_url)
|
||||
else
|
||||
render_error('激活失败')
|
||||
render_error('激活失败, 请检查你的云服务器信息是否正确.')
|
||||
raise ActiveRecord::Rollback
|
||||
end
|
||||
end
|
||||
rescue Exception => ex
|
||||
|
@ -63,10 +62,10 @@ class DevOps::CloudAccountsController < ApplicationController
|
|||
|
||||
private
|
||||
def devops_params
|
||||
params.permit(:account, :secret, :ip_num, :repo_id)
|
||||
params.permit(:account, :secret, :ip_num, :project_id)
|
||||
end
|
||||
|
||||
def find_project
|
||||
@repo = Repository.find params[:repo_id]
|
||||
@project = Project.find params[:project_id]
|
||||
end
|
||||
end
|
||||
|
|
|
@ -39,7 +39,7 @@ class DevOps::Drone::API < DevOps::Drone::Request
|
|||
# Activate user's project with Drone CI
|
||||
# POST api/repos/{owner}/{name}
|
||||
# eq:
|
||||
# DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.endpoint, project.owner.login, project.identifier).avtivate
|
||||
# DevOps::Drone::API.new(cloud_account.drone_token, cloud_account.drone_url, project.owner.login, project.identifier).activate
|
||||
def activate
|
||||
post(endpoint, "/api/repos/#{owner}/#{repo}", drone_token: drone_token)
|
||||
end
|
||||
|
|
|
@ -11,23 +11,10 @@ class DevOps::Drone::Client
|
|||
@rpc_secret = rpc_secret
|
||||
end
|
||||
|
||||
def run
|
||||
`docker run -d \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
-e DRONE_RPC_SERVER=drone-server-#{client_id}:9000 \
|
||||
-e DRONE_RPC_SECRET=#{rpc_secret} \
|
||||
-e DRONE_RUNNER_NAME=#{drone_ip} \
|
||||
--restart always \
|
||||
--name drone-agent--#{client_id} \
|
||||
--net="bridge" \
|
||||
drone/drone-runner-docker:1
|
||||
`
|
||||
end
|
||||
|
||||
def generate_cmd
|
||||
"docker run -d \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
-e DRONE_RPC_SERVER=drone-server-#{client_id}:9000 \
|
||||
-e DRONE_RPC_HOST=#{drone_ip}:80 \
|
||||
-e DRONE_RPC_SECRET=#{rpc_secret} \
|
||||
-e DRONE_RUNNER_NAME=#{drone_ip} \
|
||||
--restart always \
|
||||
|
|
|
@ -38,6 +38,11 @@
|
|||
request(:put, endpoint, path, options)
|
||||
end
|
||||
|
||||
def patch(endpoint, path, options={})
|
||||
validate_request_params!(endpoint)
|
||||
request(:patch, endpoint, path, options)
|
||||
end
|
||||
|
||||
def delete(endpoint, path, options={})
|
||||
validate_request_params!(endpoint)
|
||||
request(:delete, endpoint, path, options)
|
||||
|
@ -45,10 +50,21 @@
|
|||
|
||||
private
|
||||
def request(method, endpoint, path, **params)
|
||||
Rails.logger.info("[drone] request: #{method} #{path} #{params.except(:secret).inspect}")
|
||||
Rails.logger.info("[drone] request: #{method} #{path} #{params.except(:drone_token).inspect}")
|
||||
|
||||
client = Faraday.new(url: endpoint)
|
||||
response = client.public_send(method, path, params)
|
||||
client ||= begin
|
||||
Faraday.new(url: endpoint) do |req|
|
||||
req.request :url_encoded
|
||||
req.headers['Content-Type'] = 'application/json'
|
||||
req.response :logger # 显示日志
|
||||
req.adapter Faraday.default_adapter
|
||||
req.authorization :Bearer, params[:drone_token]
|
||||
req.headers['Authorization']
|
||||
end
|
||||
end
|
||||
response = client.public_send(method, path) do |req|
|
||||
req.body = params.except(:drone_token).to_json
|
||||
end
|
||||
|
||||
json_response(response)
|
||||
end
|
||||
|
|
|
@ -13,26 +13,6 @@ class DevOps::Drone::Server
|
|||
@client_secret = client_secret
|
||||
end
|
||||
|
||||
def run
|
||||
`
|
||||
docker run \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
-e DRONE_GITEA_SERVER=#{gitea_url} \
|
||||
-e DRONE_GITEA_CLIENT_ID=#{client_id} \
|
||||
-e DRONE_GITEA_CLIENT_SECRET=#{client_secret} \
|
||||
-e DRONE_RPC_SECRET=#{rpc_secret} \
|
||||
-e DRONE_SERVER_HOST=#{drone_host} \
|
||||
-e DRONE_SERVER_PROTO=http \
|
||||
-p "80:80" \
|
||||
-p "9000:9000" \
|
||||
--restart=always \
|
||||
--detach=true \
|
||||
--name=drone-server-#{client_id} \
|
||||
--net="bridge" \
|
||||
drone/drone:1
|
||||
`
|
||||
end
|
||||
|
||||
# TODO 一下代码方便测试,正式环境请移除
|
||||
# docker rm -f `docker ps -qa`
|
||||
def generate_cmd
|
||||
|
@ -46,7 +26,6 @@ class DevOps::Drone::Server
|
|||
-e DRONE_SERVER_HOST=#{drone_host} \
|
||||
-e DRONE_SERVER_PROTO=http \
|
||||
-p '80:80' \
|
||||
-p '9000:9000' \
|
||||
--restart=always \
|
||||
--detach=true \
|
||||
--name=drone-server-#{client_id} \
|
||||
|
|
|
@ -24,10 +24,11 @@ Rails.application.routes.draw do
|
|||
end
|
||||
resources :builds, only: :index do
|
||||
collection do
|
||||
get 'get_trustie_pipeline', to: 'builds#get_trustie_pipeline', as: 'get_trustie_pipeline'
|
||||
get ':number', to: 'builds#detail', as: 'detail'
|
||||
post ':number', to: 'builds#restart', as: 'restart'
|
||||
delete ':number', to: 'builds#delete', as: 'delete'
|
||||
get ':number/logs/:stage/:step', to: 'builds#detail', as: 'logs'
|
||||
get ':number/logs/:stage/:step', to: 'builds#logs', as: 'logs'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue