Argo Workflows Contributor Workshop
컨테이너 환경 안에서 vscode
를 통해 개발을 할 수 있게 해주는 vscode
확장자이면, devcontainer cli
로도 사용할 수 있다.
프로젝트 내 devcontainer.json
이라는 파일에 도구 및 런타임 스택을 정의한다.
devcontainer
로 사용시 컨테이너로 개발 환경이 격리되기 때문에 안전하게 사용할 수 있다.
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 -