Docker CI
Docker CI
构建私有 Docker Registry
启动 registry
|
|
Insecure Registry
当尝试从配有配置TLS的Registry会报如下错
|
|
并且官方文档提到
While it’s highly recommended to secure your registry using a TLS certificate issued by a known CA, you may alternatively decide to use self-signed certificates, or even use your registry over plain http.
并且
Warning: it’s not possible to use an insecure registry with basic authentication
配置TLS
生成自签名证书
|
|
如果生成自签名证书的host地址是IP,则需要编辑/etc/ssl/openssl.cnf,在[v3_ca]段落内添加
|
|
否则客户端连接时会报错
Failed to tls handshake with 192.168.2.107 x509: cannot validate certificate for 192.168.2.107 because it doesn’t contain any IP SANs
然后重启容器启用TLS
|
|
然后通过拷贝domain.crt
到客户端/etc/docker/certs.d/myregistrydomain.com:5000/ca.crt
,让每个docker进程信任证书。
Storage
关于Aliyun OSS storage driver配置参数参考这里
- accesskeyid 阿里云accesskeyid
- accesskeysecret 阿里云accesskeysecret
- bucket 对应要存储到的bucket名称
- internal 是否使用内部网络
- region bucket对应的地区,例如oss-cn-beijing
- endpoint (可选),驱动可以自动根据bucket、inernal、region的参数值,配置endpoint的值
配置的具体内容,大概是这个样子
|
|
使用配置文件启动
|
|
Authentication
使用htpasswd后端授权的配置如下
|
|
使用htpasswd命令生成htpasswd
文件前,需要先安装apache2-utils
。 另外htpasswd授权必须配合TLS一同使用,并且只支持bcrypt
格式的密码
|
|
也可以使用registry容器中自带的htpasswd
命令
|
|
启用authentication后,certificate再次报错
报错的内容如下
|
|
原因是当启用authentication后,一些docke的版本需要在OS级别信任证书。Ubuntu下如下操作
|
|
持续集成
GitLab 钩子触发构建
首先需要在Jenkis的构建触发器中,配置身份验证令牌,然后在GitLab的Web hooks配置地址/buildWithParameters?token=TOKEN_NAME
。 之后每当有代码push到GitLab后,就会触发这个钩子,发起Jenkins的构建,最终将构建的镜像推送到私有Registry中。
Jenkin 构建
Jenkins的构建流程大致如下
- 编译、测试、打包工程
- 下载打包的结果工程,连同运行环境一起构建到Docker的镜像文件中
- Push到私有Registry
前面的编译、测试、打包的步骤通过Jenkins提供的选项来配置,后面的镜像构建通过脚本来进行
|
|
通知 Container
镜像推送的私有Registry,需要通过Nofification通知Endpoint,拉去最新的镜像文件来更新运行环境。
Endpoint的对于收到的Event的处理是需要自己来实现的,相关的API在这里。
手动触发更新
通过Nofification的方式处理更新需要会golang的一些语法才能进行。当然我们也可以通过Jenkins来手动触发更新。
首先我们需要通过http远程运行docker。docker默认监听Unix socket,需要让其支持通过http通讯,具体的配置可以参考这里。然后执行如下脚本
|
|