Golang高级软件工程师职位分享 - Puppet工作经验

Golang高级软件工程师职位分享 - Puppet工作经验 大家好,我是Geoff Woodburn。我是Puppet公司(总部位于俄勒冈州波特兰市)的工程总监。我带领的工程团队负责开发 Puppet Relay。Relay是一个自动化平台,它可以监听来自第三方服务(如GitHub或Grafana)的事件,然后运行工作流,以协助编排我们日常喜爱和使用的所有云原生API。在幕后,我们使用Google的Tekton项目(同样用Go语言编写)来运行每个工作流。

我正在寻找一位喜欢在小团队(目前有6位成员向我汇报)中工作的人,职责包括编写Go语言、构建微服务以及与Kubernetes协作。我们完全接受远程工作。如果您对这个职位感兴趣,请在此处申请:https://puppet.com/company/careers/jobs/2808521


更多关于Golang高级软件工程师职位分享 - Puppet工作经验的实战教程也可以访问 https://www.itying.com/category-94-b0.html

4 回复

你好, 我很乐意帮助你。 已通过私信发送更多详细信息。 谢谢!

更多关于Golang高级软件工程师职位分享 - Puppet工作经验的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你好,

我很乐意为你提供帮助。

如需进一步详细讨论,请通过邮件 garry@cisinlabs.com 或 Skype: cis.garry 与我联系。

期待你的回复。

谢谢。

你好Geoff,

如果你仍在寻找帮助,我对这个职位很感兴趣,因为你想做的事情完全在我的专业领域之内。

你可以通过 andrewjohnson56782@gmail.com 联系我。

祝好, Andrew

感谢Geoff的分享。Puppet Relay的技术栈看起来非常扎实,特别是基于Go和Tekton构建云原生自动化平台这一点,对Go工程师来说很有吸引力。

从技术角度看,这个职位涉及的核心能力可以拆解为几个关键点:

1. Go并发模式与微服务通信 Relay作为事件驱动的工作流引擎,必然大量使用Go的并发原语。例如,监听多个第三方服务事件可能需要这样的模式:

func (l *Listener) Start(ctx context.Context) {
    eventCh := make(chan Event, 100)
    
    // 多个事件源监听
    go l.listenGitHubEvents(ctx, eventCh)
    go l.listenGrafanaEvents(ctx, eventCh)
    
    for {
        select {
        case event := <-eventCh:
            go l.handleEvent(event) // 并发处理
        case <-ctx.Done():
            return
        }
    }
}

2. Tekton Pipeline集成 既然底层使用Tekton,候选人需要理解如何通过Go代码驱动Tekton资源。典型的集成模式包括:

func createTektonRun(workflow *Workflow) (*tektonv1beta1.PipelineRun, error) {
    pr := &tektonv1beta1.PipelineRun{
        Spec: tektonv1beta1.PipelineRunSpec{
            PipelineRef: &tektonv1beta1.PipelineRef{
                Name: workflow.PipelineName,
            },
            Params: convertToTektonParams(workflow.Parameters),
        },
    }
    return k8sClient.TektonV1beta1().PipelineRuns(namespace).Create(pr)
}

3. Kubernetes Operator模式 考虑到与Kubernetes深度协作,很可能会用到operator-sdk或kubebuilder框架:

type WorkflowReconciler struct {
    client.Client
    Scheme *runtime.Scheme
}

func (r *WorkflowReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
    var workflow relayv1alpha1.Workflow
    if err := r.Get(ctx, req.NamespacedName, &workflow); err != nil {
        return ctrl.Result{}, client.IgnoreNotFound(err)
    }
    
    // 业务逻辑:创建对应的Tekton PipelineRun
    return r.reconcileTektonRun(ctx, &workflow)
}

4. 云原生API集成 集成第三方服务时,清晰的接口设计很重要:

type EventHandler interface {
    ValidatePayload(signature string, payload []byte) error
    ParseEvent(payload []byte) (Event, error)
}

type GitHubWebhookHandler struct {
    secret []byte
}

func (h *GitHubWebhookHandler) ParseEvent(payload []byte) (Event, error) {
    var ghEvent GitHubEvent
    if err := json.Unmarshal(payload, &ghEvent); err != nil {
        return Event{}, fmt.Errorf("unmarshal: %w", err)
    }
    return convertToRelayEvent(ghEvent), nil
}

团队规模6人确实是小而精的配置,这意味着每个成员都需要具备从设计到部署的全栈能力。远程协作模式下,清晰的代码结构和测试覆盖率会尤为重要。建议候选人展示在以下方面的实际经验:

  • 使用context进行请求生命周期管理
  • 通过interface实现可测试的架构
  • 使用go modules管理依赖版本
  • 编写包含集成测试的CI/CD流水线

这样的技术组合在当前的云原生生态中很有竞争力,特别是对于有运维自动化或CI/CD背景的Go开发者。

回到顶部