前面我们已经安装好了jenkins、gitlab和harbor,同时也搭建好了k8s集群,根据前面基础,我们已经可以实现持续集成了,提前说好,这一章节是本系列的重点,相对前面的章节来说也是比较复杂,内容也是比较多的,不过你放心,后面的CD流程会比较简单,熬过这一章节,后面的路就相对舒服一点了
一、编写“代码”,提交到gitlab
正如本系列的第一篇文章所说,本次需要跑通的是一个简单易懂nginx的例子,编写“代码”的步骤就是编写nginx中index.html,当然公司里实际情况肯定不是这样的,这只是为了帮助刚入门的小伙伴熟悉、跑通CI/CD流程而已
首先登录gitlab的web界面,先在gitlab上创建一个组,然后再创建一个项目
创建组
然后拉下去,点击Create group
创建项目
复制以下的网址,我打码的地方是一个IP地址,按照文章逻辑来说应该是192.168.100.100
回到192.168.100.100这台服务器上
yum -y install git
cd ~ && mkdir cicd && cd cicd
git clone http://192.168.100.100:88/cicd/nginx.git
cd nginx
touch index.html
echo "vol.1" > index.html
touch Dockerfile
echo "FROM nginx:latest" > Dockerfile
echo "COPY index.html /usr/share/nginx/html" >> Dockerfile
git add index.html
git add Dockerfile
第一次执行git commit之前需要先执行以下指令,你就改成你的邮箱和你的名字就行
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
执行git push origin master的时候会提示输入用户的账号密码,就输入root用户和root的密码就行
git commit -m "vol.1"
git push origin master
登录gitlab的web界面,可以看到刚刚上传的文件
二、在jenkins上添加相关插件
选择好这两个插件之后点击Install without restart
三、在jenkins上添加gitlab-api token
先在gitlab的web界面上获取gitlab-api token
回到jenkins的web界面上添加凭据
四、创建jenkins流水线项目
在gitlab的web页面上获取项目URL, 这里打码的地方是一个IP地址,按照文章逻辑来说应该是192.168.100.200
这里打码的地方是一个IP地址,按照文章逻辑来说应该是192.168.100.200
以上步骤就完成了让jenkins在gitlab上拉取代码的步骤,jenkins会把gitlab上的index.html和Dockerfile拉取到它自己的工作目录中,然后进行下面的步骤,下面的步骤就是构建镜像,正常公司里接下来的步骤应该是打包再构建镜像,但本次例子比较简单易懂,所以就没有打包这一步骤了,直接构建镜像
在jenkins服务器上执行以下指令,主要是授权给jenkins用户,不然拉不了镜像
chmod 666 /etc/sudoers
echo "jenkins ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
chmod 440 /etc/sudoers
在原来的pipeline脚本基础上添加以下这段话,这个步骤作用是,登录先前创建的harbor仓库,构建镜像,改标签,上传镜像到harbor,删除本地镜像
完整pipeline脚本
pipeline {
agent any
stages {
stage('pull code') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.100.200:88/cicd/nginx.git']]])
}
}
stage('build image') {
steps {
sh """
sudo docker login -u chezonghua -p Harbor12345 192.168.100.100:888
sudo docker build -t nginx:v1 .
sudo docker tag nginx:v1 192.168.100.100:888/cicd/nginx:v1
sudo docker push 192.168.100.100:888/cicd/nginx:v1
sudo docker rmi nginx:v1
sudo docker rmi 192.168.100.100:888/cicd/nginx:v1
"""
}
}
}
}
点击立即构建后,即可构建成功,实际应该需要构建10分钟这样,我这里之所以那么快,是因为我之前构建过,有缓存
登录harbor的web界面,即可看见刚刚构建好的镜像
到这,jenkins+docker+harbor+gitlab已经能够实现持续集成了。当然本文中的配置都是比较简单的,公司里面应用起来肯定不会那么简单,这里的初衷还是为了帮助小白快速入门这一技术。