使用SSH密钥在容器化的GoCD服务器和代理中访问GoCD材料。
如果你已将Git仓库配置为GoCD的材料,那么有多种方式让GoCD访问该仓库。其中一种流行的方法是配置SSH密钥。当使用Docker作为GoCD服务器和代理时,这一过程会稍微复杂一些。以下是配置SSH密钥的步骤,这些密钥可以同时用于多个容器。
- 使用gocd-server镜像创建一个Docker容器:
docker run -itd -v/some/location/on/host:/home/go/.ssh gocd/gocd-server:v18.12.0
容器启动后,会提供容器ID。
- 以
go
用户身份进入容器
docker exec -it -u go -w /home/go <container_id> /bin/bash
- 为
go
用户生成SSH密钥。
ssh-keygen -t rsa -b 4096 -C "something to identify this key: like an email address"
执行上述命令后,你会注意到在/home/go/.ssh
目录下创建了两个文件,id_rsa
和id_rsa.pub
.
id_rsa
对应于私钥,稍后你可以将其提供给GoCD以访问私有仓库。id_rsa.pub
是公钥,需要添加到你的SCM账户中。
按照以下提供的说明为各自的提供商添加新的SSH密钥:
GitHub:https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/
Bitbucket:https://confluence.atlassian.com/bitbucket/set-up-an-ssh-key-728138079.html
GitLab:https://docs.gitlab.com/ee/gitlab-basics/create-your-ssh-keys.html
- 将公钥添加到你的账户后,尝试通过执行
git clone
来访问私有仓库,使用SSH协议。大多数SCM在你通过浏览器访问仓库时会提供通过SSH克隆的命令。当你第一次执行git clone命令时会出现提示。选择“是”并继续克隆过程。这将创建一个名为known_hosts
在/home/go/.ssh
的文件。或者使用ssh-keyscan
命令来创建known_hosts
.
ssh-keyscan [host] > /home/go/.ssh/known_hosts
,其中[host]可以是github.com、bitbucket.com、gitlab.com等。
- 中文件的所有权和权限是:
/home/go/.ssh
is:
-rw------- 1 go go 3243 Jan 11 07:00 id_rsa
-rw-r--r-- 1 go go 754 Jan 11 07:00 id_rsa.pub
-rw-r--r-- 1 go go 407 Jan 11 07:01 known_hosts
They should 不不应被篡改。
- 在主机上,相同的文件如下所示:
ls -l /some/location/on/host
total 24
-rw------- 1 1000 1000 3243 Jan 10 23:10 id_rsa
-rw-r--r-- 1 1000 1000 754 Jan 10 23:10 id_rsa.pub
-rw-r--r-- 1 1000 1000 407 Jan 10 23:10 known_hosts
上述内容适用于Linux。如果你在主机上有UID和GID为1000的用户,则可能略有不同。对于Mac,外观可能会略有不同。
- 在多个容器中使用
现在已经为go
创建了SSH密钥,你可以在不同的GoCD服务器和代理中使用它们。
docker run -itd -v/some/location/on/host:/home/go/.ssh gocd/gocd-server:v18.12.0
docker run -itd -v/some/location/on/host:/home/go/.ssh gocd/gocd-agent-alpine-3.6:v18.12.0