之前说过各家公司的 CICD 落地方案不同, 五花八门, 之前说过 java 的微服务, k8s 的集群环境, 在这位基础, 包括代码的编译, 代码的提交, 单元测试服务的发布, 关键的节点自动化起来. 源码: https://github.com/limingios/msA-docker/vagrant master 分支 CICD
Jenkins
java 编写的开源的工具, jenkins 比较灵活, 可以通过插件的方式, 添加所需要的插件, 除了扩展性还支持多台机器的分布式构建, jenkins 的用户群很庞大, 可以说是目前最主流的部署工具.
梳理流程 Git+jenkins+k8s
客户端发起代码 push 到 GitLab 上
GitLab 配置了 webhook 的东西, 它可以出发 jenkins 的构建
jenkins 做的事情就比较多 3.1 构建代码 3.2 静态分析 3.3 单元测试 3.4 build 镜像 3.5 推送 push 镜像仓库 3.6 调用 k8s 的 API
k8s 拉取镜像仓库的进行部署.
GitLab 安装 (101 这台主机)
源码中 server01
下载镜像
$ docker pull GitLab/GitLab-ce:latest
运行 GitLab 容器
使用 docker 命令运行容器, 注意修改 hostname 为自己喜欢的名字,-v 部分挂载目录要修改为自己的目录. 端口映射这里使用的都是安全端口, 如果大家的环境没有端口限制或冲突可以使用与容器同端口, 如:-p 443:443 -p 80:80 -p 22:22
生成启动文件 - start.sh
- cat <<EOF> start.sh
- #!/bin/bash
- HOST_NAME=GitLab.idig8.com
- GITLAB_DIR=`pwd`
- docker stop GitLab
- docker rm GitLab
- docker run -d \\
- --hostname \${HOST_NAME} \\
- -p 8443:443 -p 8080:80 -p 2222:22 \\
- --name GitLab \\
- -v \${GITLAB_DIR}/config:/etc/GitLab \\
- -v \${GITLAB_DIR}/logs:/var/log/GitLab \\
- -v \${GITLAB_DIR}/data:/var/opt/GitLab \\
- GitLab/GitLab-ce:latest
EOF
运行 start.sh 启动 GitLab
sh start.sh
配置环境
修改 host 文件, 使域名可以正常解析 192.168.66.101 GitLab.idig8.com
image.PNG
修改 SSH 端口 (如果主机端口使用的不是 22 端口)
修改文件:${GITLAB_DIR}/config/GitLab.rb 找到这一行:# gitlab_rails['gitlab_shell_ssh_port'] = 22 把 22 修改为你的宿主机端口 (这里是 2222). 然后将注释去掉.
重新启动容器
sh start.sh
GitLab 试用
地址: http://gitlab.idig8.com:8080/
设置管理员密码
首先根据提示输入管理员密码, 这个密码是管理员用户的密码. 对应的用户名是 root, 用于以管理员身份登录 GitLab.
创建账号 设置好密码后去注册一个普通账号
创建项目 注册成功后会跳到首页, 我们创建一个项目, 名字大家随意
添加 SSH key
项目建好了, 我们加一个 SSH key, 以后本地 pull/push 就简单啦
首先去到添加 SSH key 的页面
然后拿到我们的 sshkey 贴到框框里就行啦 怎么拿到呢? 看下面:
- # 先看看是不是已经有啦, 如果有内容就直接 copy 贴过去就行啦
- cat ~/.SSH/id_rsa.pub
- # 如果上一步没有这个文件 我们就创建一个, 运行下面命令 (邮箱改成自己的哦), 一路回车就好了
- SSH-keygen -t rsa -C "394498036@qq.com"
cat ~/.SSH/id_rsa.pub
PS: 目的是本地 push 的时候没有权限问题, 方便直接提交代码到 GitLab 上.
测试一下 点开我们刚创建的项目, 复制 SSH 的地址
添加个文件试试 (我的项目叫 microservice)
- #clone 代码
- cd existing_folder
- Git init
- Git remote add origin SSH://Git@GitLab.idig8.com:2222/liming/microservice.Git
- Git add .
- Git commit -m "Initial commit"
Git push -u origin master
Jenkins 安装 (102 这台主机)
源码中 server02
下载镜像
docker pull stephenreed/jenkins-java8-maven-Git
运行 Jenkins 容器
使用 docker 命令运行容器, 注意修改 hostname 为自己喜欢的名字,-v 部分挂载目录要修改为自己的目录. 端口映射这里使用的都是安全端口, 如果大家的环境没有端口限制或冲突可以使用与容器同端口, 如:-p 443:443 -p 80:80 -p 22:22
生成启动文件 - startJenkins.sh
- cat <<EOF> startJenkins.sh
- #!/bin/bash
- HOST_NAME=jenkins.idig8.com
- GITLAB_DIR=/root
- docker stop jenkins
- docker rm jenkins
- docker run -d \
- --hostname ${HOST_NAME} \
- -p 8888:8080 -p 50000:50000 \
- --name jenkins \
- -v ${GITLAB_DIR}/jenkins/:/etc/localtime:ro \
- -P stephenreed/jenkins-java8-maven-Git
EOF
运行 startJenkins.sh 启动 GitLab
sh startJenkins.sh
配置环境
修改 host 文件, 使域名可以正常解析 192.168.66.102 jenkins.idig8.com
查看初始化秘钥
- docker ps
- docker exec -it f3111725cd64 /bin/bash
cat /var/jenkins_home/secrets/initialAdminPassword
页面输入刚才的秘钥
选择插件
其他默认, Pipelines 全选
涉及到跨域, 需要关闭, 系统管理 - 全局安全
PS: 可能有的插件安装不了, 不要慌老铁, 进入到 jenkins 的管理页面会提示你更新 jenkins 更新下, 然后插件又可以自动下载安装完毕了.
来源: https://juejin.im/post/5c81db8cf265da2dac457bf0