行业报告 AI展会 数据标注 标注供求
数据标注数据集
主页 > 数据挖掘 正文

手把手教你用 Gitlab 和 Jenkins 构建持续集成环境

最近用到持续集成顺便总结在这里,都是用的版。搭建过程中还有一个demo,提交代码到 gitlab 自动触发 jenkins 任务,自动编译代码和 docker 镜像并上传。
 
安装运行 Gitlab
gitlab 国内安装很麻烦,用官方的源装不了,因为在国外,太慢,链接会断掉。国内清华有 gitlab 的 apt 和 yum 源,但是我试过安装 CentOS 7 的 gitlab ,到最后都会一直卡住结束不了。直接下载清华 gitlab 的 rpm mirror 安装也是一样,所以我还是选择用 docker 启动 gitlab(提前配好 docker hub 加速器)
 
准备镜像
docker pull gitlab/gitlab-ee:latest
 
准备 gitlab 所需目录
mkdir gitlab
cd gitlab
mkdir config logs data
 
准备启动脚本 (替换想要的启动端口,ip 地址替换为访问你的 gitlab 的地址,也可以替换想要的挂载目录)
 
#! /bin/bash
 
sudo docker run -d --rm \
    -p 8088:8088 \
    --name gitlab \
    --env GITLAB_OMNIBUS_CONFIG="external_url 'http://118.24.64.246:8088/'; gitlab_rails['lfs_enabled'] = true;" \
    -v $PWD/config:/etc/gitlab \
    -v $PWD/logs:/var/log/gitlab \
    -v $PWD/data:/var/opt/gitlab \
    gitlab/gitlab-ee:latest
EOF
 
赋予执行权限
chmod +x run
 
启动 gitlab
./run
 
查看 gitlab 控制台输出
docker logs -f gitlab
访问 gitlab,打开脚本中配置的 external_url 地址,设置管理员密码和注册 gitlab 账号,登录并添加自己的 SSH key 。创建 repo ,git clone 到本地,后面我们提交代码到这个 repo ,触发 jenkins 的持续集成。
 
安装运行 Jenkins
jenkins 建议直接安装在宿主机,不用 docker 方式,因为持续集成需要安装各种我们用到的工具,这些工具可能后面根据需要才安装,重启不能让这些工具丢失。比如编译 源码需要装 jdk 环境,编译和上传 docker 镜像需要安装 docker 环境,并且还需要提前 docker login 好,不然上传不了。
 
jenkins 建议直接安装在宿主机,不用 docker 方式,因为持续集成需要安装各种我们用到的工具,这些工具可能后面根据需要才安装,重启不能让这些工具丢失。比如编译 java 源码需要装 jdk 环境,编译和上传 docker 镜像需要安装 docker 环境,并且还需要提前 docker login 好,不然上传不了。
 
因为 jenkins 用 java 写的,所以确保机器上装有 jdk 或 openjdk 环境,准备一个 jenkins 用的目录,下载 war 包
 
mkdir jenkins
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
 
运行
nohup java -jar jenkins.war --httpPort=8080 &> jenkins.log &
 
查看 jenkins 输出
tail -f jenkins.log
第一次打开 jenkins web 界面,要求输出管理员初始密码,生成在服务器上,界面上提示有路径
 
查看密码
cat /root/.jenkins/secrets/initialAdminPassword
粘贴密码并继续,安装推荐的插件,等待安装完成
 
创建管理员,保存并完成
 
至此,jenkins 安装完成
 
Jenkins 安装需要的插件
 
打开 Jenkins-系统设置-管理插件
 
在可选插件里选择并安装需要的插件:Git 、 GitLab 、Build Authentication Token Root (Git插件在默认推荐插件里已安装,在可选插件列表里可能没有)
 
点击 “直接安装”,勾选 “安装完成后重启Jenkins(空闲时)“,等待安装完成自动重启 jenkins
 
由于后面 Jenkins 的机器上需要用到 docker,所以保证 jenkins 所在机器安装好 docker 并 配好 docker hub 的加速器,并且 docker login 登录镜像要上传的仓库。
 
Gitlab 创建 repo
我们这里就以一个简单的 golang 程序做实例,实现提交代码自动编译代码,然后 docker 编译镜像并上传至 CCR (腾讯云的 docker 镜像仓库)
 
在 gitlab 上创建空 repo,clone 到本地,添加三个文件
 
main.go (源码)
package main
 
func main() {
  println("hello world")
}
Dockerfile (编译镜像用的 Dockerfile)
FROM alpine:latest
 
MAINTAINER roc<rockerchen@tencent.com>
 
COPY bd-ci-test /bin/bd-ci-test
 
CMD ["bd-ci-test"]
build (编译源码、镜像和上传镜像的脚本,替换 IMAGE 地址为要上传的地址)
#! /bin/bash
 
# 编译代码
docker run --rm \
  -v $PWD:/go/src/bd-ci-test \
  -w /go/src/bd-ci-test \
  golang:alpine go build
 
IMAGE="imroc/bd-ci-test:latest"
 
# 编译镜像
docker build -t $IMAGE .
 
# 上传镜像 (请提前登录好,docker login 只需登录一次)
docker push $IMAGE
 
# 清理
docker rmi $IMAGE
rm bd-ci-test
给 build 脚本执行权限
 
chmod +x build
 
配置 Jenkins
新建 jenkins 项目,选择 “构建一个自由风格的软件项目”
 
源代码管理选 Git,Repository URL 填写你 gitlab 上源码 repo 的地址,Credentials 是拉取代码时需要用到的身份认证(如果你的repo不是公有的,没有身份认证就会报错)
 
点击 Add 添加一个, Kind 选择 “Username with password”,输入 gitlab 账号密码
 
然后 Credentials 选择我们刚刚添加的(检测到账号密码正确就不会报错了),我们准备对 master 分支的代码做持续集成,所以 “Branches to build” 填 “*/master”
 
构建触发器选择 “Build when a change is pushed to GitLab” (后面的 URL 是我们需要在 gitlab 上配的 webhook 地址),按照下面勾选
 
点开高级,“Allowd branches” 勾选 “Filter branches by regex”,填写 “master”。点 “Generate” 生成 token,这个 token 用于填写到 gitlab 的 webhook 里,gitlab 检测到代码提交,会通知 webhook 里填写的 Jenkins 生成的回掉 URL,并带上这个 token,防止其它人触发 jenkins 的持续集成
 
注: 复制出 URL 和 token,我们后面配置 gitlab 的 webhook 会用到
 
增加构建步骤 “execute shell”
由于我们把持续集成的操作都写到 build 脚本了,所以直接填写执行 ./build 就可以了
 
最后点击保存,至此,jenkins 的持续集成配置好了,还需要配置 gitlab 的 webhook,用于代码提交通知 jenkins。
 
配置 Gitlab Webhook
打开 gitlab 的 repo 的 Settings-Integrations
 
URL 和 Secret Token 填写 jenkins 项目中构建触发器部分生成的,点击 “Add webhook”,搞定!
 
测试
现在我们可以提交代码测试一下
 
git add .
git commit -m "test"
git push
我们可以看 jenkins 的输出来看是否触发任务,由于我使用了一些 docker hub 的镜像来编译代码和镜像,如果没有提前 pull 下来,第一次运行任务可能会比较久,等待运行结束,刷新 jenkins 主页
 
如果运行成功,从 “上次成功” 下拉选择 “控制台输出”
 
可以看到运行任务过程的输出
 
如果都没问题,你可以看看你的镜像仓库,镜像已经成功上传,至此,这个简单的持续集成搭建完毕。
 
附录
Git Submodule
 
如果你的项目里面还引用了其它项目,也就是 git 的 submodules,怎么办?甚至 submodule 里面还要指定分支呢?
 
在创建 jenkins 项目的时候,在 源码管理-Git-Additional Behaviours-Add 选择 Advanced sub-modules behaviours
 
勾选下面两个选项
submodules 的分支靠 git 本来支持的 .gitmodules 文件来控制,用法举例:
 
git submodule add -b v1 https://github.com/imroc/req.git ref/req
查看 .gitmodules 文件格式:
 
$ cat .gitmodules
[submodule "ref/req"]
    path = ref/req
    url = https://github.com/imroc/req.git
    branch = v1
可以自己手动编辑或用 git submodule add 命令生成.
 
来源:https://imroc.io/posts/ci-with-gitlab-and-jenkins/ 作者:roc
 
声明:文章收集于网络,版权归原作者所有,为传播信息而发,如有侵权,请联系小编删除,谢谢!
 
 

微信公众号

声明:本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。

网友评论:

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
SEM推广服务

Copyright©2005-2028 Sykv.com 可思数据 版权所有    京ICP备14056871号

关于我们   免责声明   广告合作   版权声明   联系我们   原创投稿   网站地图  

可思数据 数据标注

扫码入群
扫码关注

微信公众号

返回顶部