remote agent now working and tested
This commit is contained in:
parent
7aedd78015
commit
e09f02db9e
5 changed files with 28 additions and 19 deletions
|
@ -59,7 +59,7 @@
|
|||
</section>
|
||||
|
||||
<section>
|
||||
<pre id="term" ng-if="task && task.state !== 'pending'">{{ logs }}</pre>
|
||||
<pre id="term"></pre>
|
||||
</section>
|
||||
|
||||
|
||||
|
|
|
@ -40,6 +40,14 @@ func (u *updater) SetCommit(user *common.User, r *common.Repo, c *common.Commit)
|
|||
// log err
|
||||
}
|
||||
|
||||
// we need this because builds coming from
|
||||
// a remote agent won't have the embedded
|
||||
// build list. we should probably just rethink
|
||||
// the messaging instead of this hack.
|
||||
if c.Builds == nil || len(c.Builds) == 0 {
|
||||
c.Builds, _ = u.store.BuildList(c)
|
||||
}
|
||||
|
||||
msg, err := json.Marshal(c)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -59,6 +67,14 @@ func (u *updater) SetBuild(r *common.Repo, c *common.Commit, b *common.Build) er
|
|||
return err
|
||||
}
|
||||
|
||||
// we need this because builds coming from
|
||||
// a remote agent won't have the embedded
|
||||
// build list. we should probably just rethink
|
||||
// the messaging instead of this hack.
|
||||
if c.Builds == nil || len(c.Builds) == 0 {
|
||||
c.Builds, _ = u.store.BuildList(c)
|
||||
}
|
||||
|
||||
msg, err := json.Marshal(c)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package server
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
@ -50,6 +51,7 @@ func GetRepoEvents(c *gin.Context) {
|
|||
}
|
||||
|
||||
func GetStream(c *gin.Context) {
|
||||
conf := ToSettings(c)
|
||||
store := ToDatastore(c)
|
||||
repo := ToRepo(c)
|
||||
runner := ToRunner(c)
|
||||
|
@ -71,12 +73,17 @@ func GetStream(c *gin.Context) {
|
|||
|
||||
var rc io.ReadCloser
|
||||
|
||||
addr, err := store.Agent(commit)
|
||||
// if the commit is being executed by an agent
|
||||
// we'll proxy the build output directly to the
|
||||
// remote Docker client, through the agent.
|
||||
if err == nil {
|
||||
resp, err := http.Get("http://" + addr)
|
||||
if conf.Agents != nil && conf.Agents.Secret != "" {
|
||||
addr, err := store.Agent(commit)
|
||||
if err != nil {
|
||||
c.Fail(500, err)
|
||||
return
|
||||
}
|
||||
url := fmt.Sprintf("http://%s/stream/%d?token=%s", addr, build.ID, conf.Agents.Secret)
|
||||
resp, err := http.Get(url)
|
||||
if err != nil {
|
||||
c.Fail(500, err)
|
||||
return
|
||||
|
|
|
@ -17,7 +17,7 @@ func NewAgentstore(db *sql.DB) *Agentstore {
|
|||
|
||||
// Agent returns an agent by ID.
|
||||
func (db *Agentstore) Agent(commit *common.Commit) (string, error) {
|
||||
var agent = new(common.Agent)
|
||||
var agent = new(agent)
|
||||
var err = meddler.QueryRow(db, agent, rebind(agentQuery), commit.ID)
|
||||
return agent.Addr, err
|
||||
}
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
package types
|
||||
|
||||
// Agent represents a worker that has connected
|
||||
// to the system in order to perform work
|
||||
type Agent struct {
|
||||
ID int64 `meddler:"agent_id,pk" json:"id,omitempty"`
|
||||
Kind string `meddler:"agent_kind" json:"kind,omitempty"`
|
||||
Addr string `meddler:"agent_addr" json:"address"`
|
||||
Token string `meddler:"agent_token" json:"token"`
|
||||
Cert string `meddler:"agent_cert" json:"-"`
|
||||
Key string `meddler:"agent_key" json:"-"`
|
||||
Active bool `meddler:"agent_active" json:"is_active"`
|
||||
IsHealthy bool `meddler:"-" json:"is_healthy,omitempty"`
|
||||
}
|
Loading…
Reference in a new issue