男神鹏:在外部 Coding 中如何实现 CICD
零. 前置条件
- docker安装成功;
- 配置镜像加速;
docker-machine ssh default
sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror=加速地址 |g" /var/lib/boot2docker/profile
exit
docker-machine restart default
一. 构建基础镜像
- 运行centos基础镜像
docker pull centos:centos7
docker run -itd --privileged centos:centos7 /usr/sbin/init
docker exec -it 容器ID /bin/bash
- 安装golang1.13
tar zxvf /soft/go1.13.12.linux-amd64.tar.gz -C /usr/local
vim /etc/profile.d/go.sh
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
export GOPATH=/root/go
export PATH=$PATH:$GOPATH/bin
source go.sh
使用命令 go version
验证golang是否安装成功
注意:/soft 目录是 docker宿主机与容器里文件共享目录。
例如:docker run -it -v /machine:/soft centos:centos7 /bin/bash
,启动容器。即可实现宿主机/machine目录与容器内/soft文件共享
- 安装 protobuf 编译插件
- protoc
- 请从页面中选择对应平台的版本下载解压,并将protoc复制到/usr/bin/
unzip /soft/protoc-3.7.0-linux-x86_64.zip -d /usr/local/protobuf
cp /usr/local/protobuf/bin/protoc /usr/bin/protoc
- 请从页面中选择对应平台的版本下载解压,并将protoc复制到/usr/bin/
- protoc-gen-go:
go get github.com/golang/protobuf/protoc-gen-go@v1.3.2
- protoc-gen-micro:
go get github.com/micro/protoc-gen-micro@v1.0.0
- protoc
注意:如果protoc安装完成,运行protoc --version
报错:protoc: error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directory
请运行命令: libatomic-4.8.5-39.el7.x86_64.rpm下载地址yum -y install gcc gcc-c++
rpm -ivh /soft/libatomic-4.8.5-39.el7.x86_64.rpm
protoc-gen-micro 和 protoc-gen-go 如果未能成功安装,请尝试:go env -w GOPROXY=https://goproxy.io,direct
go env -w GO111MODULE=on
再进行安装,安装成功之后会在$GOPATH/bin
目录生成 protoc-gen-micro / protoc-gen-go 两个文件。
- 容器内安装docker:
// 卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
// 安装所需的软件包
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
// 设置仓库
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
//列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序
yum list docker-ce --showduplicates | sort -r
//安装特定版本,例如:docker-ce-18.09.1
yum install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io
注意:容器内docker安装完成,运行docker version
提示docker客户端正常启动,docker服务端启动失败,这是正常现象。
如果想要正常启动容器内docker服务端,可保存镜像后,使用docker run -v /var/run/docker.sock:/var/run/docker.sock ...
启动。CI流程不必尝试此命令
- 安装其它命令:
yum install -y git make
二. 推送镜像到Docker制品库
- 保存镜像:
docker commit 容器ID golang:1.13v11
- 设置凭证
docker login -u songrongliang@digibms.com cloud-industry-docker.pkg.coding.net
- 给本地的镜像打标签
docker tag <LOCAL_IMAGE_TAG> cloud-industry-docker.pkg.coding.net/billing-app/docker/<PACKAGE>
- 推送镜像到制品库
docker push cloud-industry-docker.pkg.coding.net/billing-app/docker/<PACKAGE>
三. 配置构建计划
- 创建构建计划
新建构建计划 -- 空白模板 -- 使用静态配置的 Jenkinsfile --前往配置详情 - 环境变量
外部构建环境变量:
DOCKER_USERNAME = 100008089439
DOCKER_PWD = LRSxVZwaZ#kj
NAMESPACE = cloudindustry
BASE_IMAGE = alpine-ci:3.11
MICRO_SELECTOR = static
MICRO_SERVER_ADDRESS = :8080
QCI_MODULE = .
- 设置运行环境
流程配置中设置构建环境为制品库中的镜像
并配置运行参数-v /var/run/docker.sock:/var/run/docker.sock
- 配置 shell 脚本
自定义构建过程增加执行shell脚本阶段,/bin/bash qci_build.sh