mirror of https://github.com/k3s-io/k3s
re-organize development.md to addresses issue #13876
Signed-off-by: Mike Brown <brownwm@us.ibm.com>pull/6/head
parent
5acf6fb03d
commit
497c211208
|
@ -36,27 +36,29 @@ Documentation for other releases can be found at
|
||||||
|
|
||||||
This document is intended to be the canonical source of truth for things like
|
This document is intended to be the canonical source of truth for things like
|
||||||
supported toolchain versions for building Kubernetes. If you find a
|
supported toolchain versions for building Kubernetes. If you find a
|
||||||
requirement that this doc does not capture, please file a bug. If you find
|
requirement that this doc does not capture, please
|
||||||
other docs with references to requirements that are not simply links to this
|
[submit an issue](https://github.com/kubernetes/kubernetes/issues) on github. If
|
||||||
doc, please file a bug.
|
you find other docs with references to requirements that are not simply links to
|
||||||
|
this doc, please [submit an issue](https://github.com/kubernetes/kubernetes/issues).
|
||||||
|
|
||||||
This document is intended to be relative to the branch in which it is found.
|
This document is intended to be relative to the branch in which it is found.
|
||||||
It is guaranteed that requirements will change over time for the development
|
It is guaranteed that requirements will change over time for the development
|
||||||
branch, but release branches of Kubernetes should not change.
|
branch, but release branches of Kubernetes should not change.
|
||||||
|
|
||||||
## Building Kubernetes
|
## Building Kubernetes with Docker
|
||||||
|
|
||||||
Official releases are built using Docker containers. To build Kubernetes using
|
Official releases are built using Docker containers. To build Kubernetes using
|
||||||
Docker please follow [these
|
Docker please follow [these instructions]
|
||||||
instructions](http://releases.k8s.io/HEAD/build/README.md).
|
(http://releases.k8s.io/HEAD/build/README.md).
|
||||||
|
|
||||||
### Local OS/shell environment
|
## Building Kubernetes on a local OS/shell environment
|
||||||
|
|
||||||
Many of the Kubernetes development helper scripts rely on a fairly up-to-date GNU tools
|
Many of the Kubernetes development helper scripts rely on a fairly up-to-date
|
||||||
environment, so most recent Linux distros should work just fine
|
GNU tools environment, so most recent Linux distros should work just fine
|
||||||
out-of-the-box. Note that Mac OS X ships with somewhat outdated
|
out-of-the-box. Note that Mac OS X ships with somewhat outdated BSD-based tools,
|
||||||
BSD-based tools, some of which may be incompatible in subtle ways, so we recommend
|
some of which may be incompatible in subtle ways, so we recommend
|
||||||
[replacing those with modern GNU tools](https://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/).
|
[replacing those with modern GNU tools]
|
||||||
|
(https://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/).
|
||||||
|
|
||||||
### Go development environment
|
### Go development environment
|
||||||
|
|
||||||
|
@ -65,8 +67,50 @@ To build Kubernetes without using Docker containers, you'll need a Go
|
||||||
development environment. Builds for Kubernetes 1.0 - 1.2 require Go version
|
development environment. Builds for Kubernetes 1.0 - 1.2 require Go version
|
||||||
1.4.2. Builds for Kubernetes 1.3 and higher require Go version 1.6.0. If you
|
1.4.2. Builds for Kubernetes 1.3 and higher require Go version 1.6.0. If you
|
||||||
haven't set up a Go development environment, please follow [these
|
haven't set up a Go development environment, please follow [these
|
||||||
instructions](http://golang.org/doc/code.html) to install the go tools and set
|
instructions](http://golang.org/doc/code.html) to install the go tools.
|
||||||
up a GOPATH.
|
|
||||||
|
Set up your GOPATH and add a path entry for go binaries to your PATH. Typically
|
||||||
|
added to your ~/.profile:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
export GOPATH=$HOME/go
|
||||||
|
export PATH=$PATH:$GOPATH/bin
|
||||||
|
```
|
||||||
|
|
||||||
|
### Godep dependency management
|
||||||
|
|
||||||
|
Kubernetes build and test scripts use [godep](https://github.com/tools/godep) to
|
||||||
|
manage dependencies.
|
||||||
|
|
||||||
|
#### Install godep
|
||||||
|
|
||||||
|
Ensure that [mercurial](http://mercurial.selenic.com/wiki/Download) is
|
||||||
|
installed on your system. (some of godep's dependencies use the mercurial
|
||||||
|
source control system). Use `apt-get install mercurial` or `yum install
|
||||||
|
mercurial` on Linux, or [brew.sh](http://brew.sh) on OS X, or download directly
|
||||||
|
from mercurial.
|
||||||
|
|
||||||
|
Install godep (may require sudo):
|
||||||
|
|
||||||
|
```sh
|
||||||
|
go get -u github.com/tools/godep
|
||||||
|
```
|
||||||
|
|
||||||
|
Note:
|
||||||
|
At this time, godep version >= v63 is known to work in the Kubernetes project.
|
||||||
|
|
||||||
|
To check your version of godep:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ godep version
|
||||||
|
godep v74 (linux/amd64/go1.6.2)
|
||||||
|
```
|
||||||
|
|
||||||
|
Developers planning to managing dependencies in the `vendor/` tree may want to
|
||||||
|
explore alternative environment setups. See
|
||||||
|
[using godep to manage dependencies](godep.md).
|
||||||
|
|
||||||
|
### Local build using make
|
||||||
|
|
||||||
To build Kubernetes using your local Go development environment (generate linux
|
To build Kubernetes using your local Go development environment (generate linux
|
||||||
binaries):
|
binaries):
|
||||||
|
@ -121,7 +165,7 @@ git remote add upstream 'https://github.com/kubernetes/kubernetes.git'
|
||||||
### Create a branch and make changes
|
### Create a branch and make changes
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
git checkout -b myfeature
|
git checkout -b my-feature
|
||||||
# Make your code changes
|
# Make your code changes
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -181,143 +225,6 @@ reviews much easier.
|
||||||
|
|
||||||
See [Faster Reviews](faster_reviews.md) for more details.
|
See [Faster Reviews](faster_reviews.md) for more details.
|
||||||
|
|
||||||
## godep and dependency management
|
|
||||||
|
|
||||||
Kubernetes uses [godep](https://github.com/tools/godep) to manage dependencies.
|
|
||||||
It is not strictly required for building Kubernetes but it is required when
|
|
||||||
managing dependencies under the vendor/ tree, and is required by a number of the
|
|
||||||
build and test scripts. Please make sure that `godep` is installed and in your
|
|
||||||
`$PATH`, and that `godep version` says it is at least v63.
|
|
||||||
|
|
||||||
### Installing godep
|
|
||||||
|
|
||||||
There are many ways to build and host Go binaries. Here is an easy way to get
|
|
||||||
utilities like `godep` installed:
|
|
||||||
|
|
||||||
1) Ensure that [mercurial](http://mercurial.selenic.com/wiki/Download) is
|
|
||||||
installed on your system. (some of godep's dependencies use the mercurial
|
|
||||||
source control system). Use `apt-get install mercurial` or `yum install
|
|
||||||
mercurial` on Linux, or [brew.sh](http://brew.sh) on OS X, or download directly
|
|
||||||
from mercurial.
|
|
||||||
|
|
||||||
2) Create a new GOPATH for your tools and install godep:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
export GOPATH=$HOME/go-tools
|
|
||||||
mkdir -p $GOPATH
|
|
||||||
go get -u github.com/tools/godep
|
|
||||||
```
|
|
||||||
|
|
||||||
3) Add this $GOPATH/bin to your path. Typically you'd add this to your ~/.profile:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
export GOPATH=$HOME/go-tools
|
|
||||||
export PATH=$PATH:$GOPATH/bin
|
|
||||||
```
|
|
||||||
|
|
||||||
Note:
|
|
||||||
At this time, godep version >= v63 is known to work in the Kubernetes project
|
|
||||||
|
|
||||||
To check your version of godep:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ godep version
|
|
||||||
godep v66 (linux/amd64/go1.6.2)
|
|
||||||
```
|
|
||||||
|
|
||||||
If it is not a valid version try, make sure you have updated the godep repo
|
|
||||||
with `go get -u github.com/tools/godep`.
|
|
||||||
|
|
||||||
### Using godep
|
|
||||||
|
|
||||||
Here's a quick walkthrough of one way to use godeps to add or update a
|
|
||||||
Kubernetes dependency into `vendor/`. For more details, please see the
|
|
||||||
instructions in [godep's documentation](https://github.com/tools/godep).
|
|
||||||
|
|
||||||
1) Devote a directory to this endeavor:
|
|
||||||
|
|
||||||
_Devoting a separate directory is not strictly required, but it is helpful to
|
|
||||||
separate dependency updates from other changes._
|
|
||||||
|
|
||||||
```sh
|
|
||||||
export KPATH=$HOME/code/kubernetes
|
|
||||||
mkdir -p $KPATH/src/k8s.io
|
|
||||||
cd $KPATH/src/k8s.io
|
|
||||||
git clone https://github.com/$YOUR_GITHUB_USERNAME/kubernetes.git # assumes your fork is 'kubernetes'
|
|
||||||
# Or copy your existing local repo here. IMPORTANT: making a symlink doesn't work.
|
|
||||||
```
|
|
||||||
|
|
||||||
2) Set up your GOPATH.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
# This will *not* let your local builds see packages that exist elsewhere on your system.
|
|
||||||
export GOPATH=$KPATH
|
|
||||||
```
|
|
||||||
|
|
||||||
3) Populate your new GOPATH.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
cd $KPATH/src/k8s.io/kubernetes
|
|
||||||
godep restore
|
|
||||||
```
|
|
||||||
|
|
||||||
4) Next, you can either add a new dependency or update an existing one.
|
|
||||||
|
|
||||||
To add a new dependency is simple (if a bit slow):
|
|
||||||
|
|
||||||
```sh
|
|
||||||
cd $KPATH/src/k8s.io/kubernetes
|
|
||||||
DEP=example.com/path/to/dependency
|
|
||||||
godep get $DEP/...
|
|
||||||
# Now change code in Kubernetes to use the dependency.
|
|
||||||
./hack/godep-save.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
To update an existing dependency is a bit more complicated. Godep has an
|
|
||||||
`update` command, but none of us can figure out how to actually make it work.
|
|
||||||
Instead, this procedure seems to work reliably:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
cd $KPATH/src/k8s.io/kubernetes
|
|
||||||
DEP=example.com/path/to/dependency
|
|
||||||
# NB: For the next step, $DEP is assumed be the repo root. If it is actually a
|
|
||||||
# subdir of the repo, use the repo root here. This is required to keep godep
|
|
||||||
# from getting angry because `godep restore` left the tree in a "detached head"
|
|
||||||
# state.
|
|
||||||
rm -rf $KPATH/src/$DEP # repo root
|
|
||||||
godep get $DEP/...
|
|
||||||
# Change code in Kubernetes, if necessary.
|
|
||||||
rm -rf Godeps
|
|
||||||
rm -rf vendor
|
|
||||||
./hack/godep-save.sh
|
|
||||||
git co -- $(git st -s | grep "^ D" | awk '{print $2}' | grep ^Godeps)
|
|
||||||
```
|
|
||||||
|
|
||||||
_If `go get -u path/to/dependency` fails with compilation errors, instead try
|
|
||||||
`go get -d -u path/to/dependency` to fetch the dependencies without compiling
|
|
||||||
them. This is unusual, but has been observed._
|
|
||||||
|
|
||||||
After all of this is done, `git status` should show you what files have been
|
|
||||||
modified and added/removed. Make sure to `git add` and `git rm` them. It is
|
|
||||||
commonly advised to make one `git commit` which includes just the dependency
|
|
||||||
update and Godeps files, and another `git commit` that includes changes to
|
|
||||||
Kubernetes code to use the new/updated dependency. These commits can go into a
|
|
||||||
single pull request.
|
|
||||||
|
|
||||||
5) Before sending your PR, it's a good idea to sanity check that your
|
|
||||||
Godeps.json file and the contents of `vendor/ `are ok by running `hack/verify-godeps.sh`
|
|
||||||
|
|
||||||
_If `hack/verify-godeps.sh` fails after a `godep update`, it is possible that a
|
|
||||||
transitive dependency was added or removed but not updated by godeps. It then
|
|
||||||
may be necessary to perform a `hack/godep-save.sh` to pick up the transitive
|
|
||||||
dependency changes._
|
|
||||||
|
|
||||||
It is sometimes expedient to manually fix the /Godeps/Godeps.json file to
|
|
||||||
minimize the changes. However without great care this can lead to failures
|
|
||||||
with `hack/verify-godeps.sh`. This must pass for every PR.
|
|
||||||
|
|
||||||
6) If you updated the Godeps, please also update `Godeps/LICENSES` by running
|
|
||||||
`hack/update-godep-licenses.sh`.
|
|
||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,152 @@
|
||||||
|
<!-- BEGIN MUNGE: UNVERSIONED_WARNING -->
|
||||||
|
|
||||||
|
<!-- BEGIN STRIP_FOR_RELEASE -->
|
||||||
|
|
||||||
|
<img src="http://kubernetes.io/kubernetes/img/warning.png" alt="WARNING"
|
||||||
|
width="25" height="25">
|
||||||
|
<img src="http://kubernetes.io/kubernetes/img/warning.png" alt="WARNING"
|
||||||
|
width="25" height="25">
|
||||||
|
<img src="http://kubernetes.io/kubernetes/img/warning.png" alt="WARNING"
|
||||||
|
width="25" height="25">
|
||||||
|
<img src="http://kubernetes.io/kubernetes/img/warning.png" alt="WARNING"
|
||||||
|
width="25" height="25">
|
||||||
|
<img src="http://kubernetes.io/kubernetes/img/warning.png" alt="WARNING"
|
||||||
|
width="25" height="25">
|
||||||
|
|
||||||
|
<h2>PLEASE NOTE: This document applies to the HEAD of the source tree</h2>
|
||||||
|
|
||||||
|
If you are using a released version of Kubernetes, you should
|
||||||
|
refer to the docs that go with that version.
|
||||||
|
|
||||||
|
Documentation for other releases can be found at
|
||||||
|
[releases.k8s.io](http://releases.k8s.io).
|
||||||
|
</strong>
|
||||||
|
--
|
||||||
|
|
||||||
|
<!-- END STRIP_FOR_RELEASE -->
|
||||||
|
|
||||||
|
<!-- END MUNGE: UNVERSIONED_WARNING -->
|
||||||
|
|
||||||
|
# Using godep to manage dependencies
|
||||||
|
|
||||||
|
This document is intended to show a way for managing `vendor/` tree dependencies
|
||||||
|
in Kubernetes. If you are not planning on managing `vendor` dependencies go here
|
||||||
|
[Godep dependency management](development.md#godep-dependency-management).
|
||||||
|
|
||||||
|
## Alternate GOPATH for installing and using godep
|
||||||
|
|
||||||
|
There are many ways to build and host Go binaries. Here is one way to get
|
||||||
|
utilities like `godep` installed:
|
||||||
|
|
||||||
|
Create a new GOPATH just for your go tools and install godep:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
export GOPATH=$HOME/go-tools
|
||||||
|
mkdir -p $GOPATH
|
||||||
|
go get -u github.com/tools/godep
|
||||||
|
```
|
||||||
|
|
||||||
|
Add this $GOPATH/bin to your path. Typically you'd add this to your ~/.profile:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
export GOPATH=$HOME/go-tools
|
||||||
|
export PATH=$PATH:$GOPATH/bin
|
||||||
|
```
|
||||||
|
|
||||||
|
## Using godep
|
||||||
|
|
||||||
|
Here's a quick walkthrough of one way to use godeps to add or update a
|
||||||
|
Kubernetes dependency into `vendor/`. For more details, please see the
|
||||||
|
instructions in [godep's documentation](https://github.com/tools/godep).
|
||||||
|
|
||||||
|
1) Devote a directory to this endeavor:
|
||||||
|
|
||||||
|
_Devoting a separate directory is not strictly required, but it is helpful to
|
||||||
|
separate dependency updates from other changes._
|
||||||
|
|
||||||
|
```sh
|
||||||
|
export KPATH=$HOME/code/kubernetes
|
||||||
|
mkdir -p $KPATH/src/k8s.io
|
||||||
|
cd $KPATH/src/k8s.io
|
||||||
|
git clone https://github.com/$YOUR_GITHUB_USERNAME/kubernetes.git # assumes your fork is 'kubernetes'
|
||||||
|
# Or copy your existing local repo here. IMPORTANT: making a symlink doesn't work.
|
||||||
|
```
|
||||||
|
|
||||||
|
2) Set up your GOPATH.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# This will *not* let your local builds see packages that exist elsewhere on your system.
|
||||||
|
export GOPATH=$KPATH
|
||||||
|
```
|
||||||
|
|
||||||
|
3) Populate your new GOPATH.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd $KPATH/src/k8s.io/kubernetes
|
||||||
|
godep restore
|
||||||
|
```
|
||||||
|
|
||||||
|
4) Next, you can either add a new dependency or update an existing one.
|
||||||
|
|
||||||
|
To add a new dependency is simple (if a bit slow):
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd $KPATH/src/k8s.io/kubernetes
|
||||||
|
DEP=example.com/path/to/dependency
|
||||||
|
godep get $DEP/...
|
||||||
|
# Now change code in Kubernetes to use the dependency.
|
||||||
|
./hack/godep-save.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
To update an existing dependency is a bit more complicated. Godep has an
|
||||||
|
`update` command, but none of us can figure out how to actually make it work.
|
||||||
|
Instead, this procedure seems to work reliably:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd $KPATH/src/k8s.io/kubernetes
|
||||||
|
DEP=example.com/path/to/dependency
|
||||||
|
# NB: For the next step, $DEP is assumed be the repo root. If it is actually a
|
||||||
|
# subdir of the repo, use the repo root here. This is required to keep godep
|
||||||
|
# from getting angry because `godep restore` left the tree in a "detached head"
|
||||||
|
# state.
|
||||||
|
rm -rf $KPATH/src/$DEP # repo root
|
||||||
|
godep get $DEP/...
|
||||||
|
# Change code in Kubernetes, if necessary.
|
||||||
|
rm -rf Godeps
|
||||||
|
rm -rf vendor
|
||||||
|
./hack/godep-save.sh
|
||||||
|
git co -- $(git st -s | grep "^ D" | awk '{print $2}' | grep ^Godeps)
|
||||||
|
```
|
||||||
|
|
||||||
|
_If `go get -u path/to/dependency` fails with compilation errors, instead try
|
||||||
|
`go get -d -u path/to/dependency` to fetch the dependencies without compiling
|
||||||
|
them. This is unusual, but has been observed._
|
||||||
|
|
||||||
|
After all of this is done, `git status` should show you what files have been
|
||||||
|
modified and added/removed. Make sure to `git add` and `git rm` them. It is
|
||||||
|
commonly advised to make one `git commit` which includes just the dependency
|
||||||
|
update and Godeps files, and another `git commit` that includes changes to
|
||||||
|
Kubernetes code to use the new/updated dependency. These commits can go into a
|
||||||
|
single pull request.
|
||||||
|
|
||||||
|
5) Before sending your PR, it's a good idea to sanity check that your
|
||||||
|
Godeps.json file and the contents of `vendor/ `are ok by running `hack/verify-godeps.sh`
|
||||||
|
|
||||||
|
_If `hack/verify-godeps.sh` fails after a `godep update`, it is possible that a
|
||||||
|
transitive dependency was added or removed but not updated by godeps. It then
|
||||||
|
may be necessary to perform a `hack/godep-save.sh` to pick up the transitive
|
||||||
|
dependency changes._
|
||||||
|
|
||||||
|
It is sometimes expedient to manually fix the /Godeps/Godeps.json file to
|
||||||
|
minimize the changes. However without great care this can lead to failures
|
||||||
|
with `hack/verify-godeps.sh`. This must pass for every PR.
|
||||||
|
|
||||||
|
6) If you updated the Godeps, please also update `Godeps/LICENSES` by running
|
||||||
|
`hack/update-godep-licenses.sh`.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- BEGIN MUNGE: GENERATED_ANALYTICS -->
|
||||||
|
[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/godep.md?pixel)]()
|
||||||
|
<!-- END MUNGE: GENERATED_ANALYTICS -->
|
Loading…
Reference in New Issue