Argo Workflows Contributor Workshop

Run In Devcontainer

devcontainer 란?

컨테이너 환경 안에서 vscode를 통해 개발을 할 수 있게 해주는 vscode 확장자이면, devcontainer cli로도 사용할 수 있다.

프로젝트 내 devcontainer.json 이라는 파일에 도구 및 런타임 스택을 정의한다.

devcontainer로 사용시 컨테이너로 개발 환경이 격리되기 때문에 안전하게 사용할 수 있다.

devcontainer setting code 분석

devcontainer.json

{
  "image": "mcr.microsoft.com/vscode/devcontainers/base:ubuntu",
  "appPort": 8080,
  "features": {
    "ghcr.io/devcontainers/features/go:1": {
      "version": "1.20"
    },
    "ghcr.io/devcontainers/features/node:1": {
      "version": "16"
    },
    "ghcr.io/devcontainers/features/docker-in-docker:2": {},
    "ghcr.io/devcontainers/features/python:1": {}
  },
  "forwardPorts": [9000, 9090, 2746, 8080],
  "hostRequirements": {
    "cpus": 4
  },
  "runArgs": ["--add-host=host.docker.internal:host-gateway"],
  "onCreateCommand": ".devcontainer/pre-build.sh",
  "workspaceMount": "source=${localWorkspaceFolder},target=/home/vscode/go/src/github.com/argoproj/argo-workflows,type=bind",
  "workspaceFolder": "/home/vscode/go/src/github.com/argoproj/argo-workflows",
  "remoteEnv": {
    "PATH": "${containerEnv:PATH}:/home/vscode/go/bin",
    "GOPATH": "/home/vscode/go"
  }
}

pre-build.sh

#!/usr/bin/env sh
set -eux

# Add hosts
sudo bash -c 'echo "127.0.0.1 dex" >> /etc/hosts'
sudo bash -c 'echo "127.0.0.1 minio" >> /etc/hosts'
sudo bash -c 'echo "127.0.0.1 postgres" >> /etc/hosts'
sudo bash -c 'echo "127.0.0.1 mysql" >> /etc/hosts'
sudo bash -c 'echo "127.0.0.1 azurite" >> /etc/hosts'

# install kubernetes
wget -q -O - <https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh> | bash
k3d cluster get k3s-default || k3d cluster create --image rancher/k3s:v1.27.3-k3s1 --wait
k3d kubeconfig merge --kubeconfig-merge-default

# install kubectl
curl -LO <https://dl.k8s.io/release/v1.27.3/bin/linux/$>(go env GOARCH)/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl cluster-info

# install kit
curl -q <https://raw.githubusercontent.com/kitproj/kit/main/install.sh> | sh

# install protocol buffer compiler (protoc)
sudo apt update
sudo apt install -y protobuf-compiler

# Make sure go path is owned by vscode
sudo chown -R vscode:vscode /home/vscode/go

# download dependencies and do first-pass compile
CI=1 kit pre-up

# Patch CoreDNS to have host.docker.internal inside the cluster available
kubectl get cm coredns -n kube-system -o yaml | sed "s/  NodeHosts: |/  NodeHosts: |\\n    `grep host.docker.internal /etc/hosts`/" | kubectl apply -f -