DevOps 实践:基于 Gitlab+Jenkins+Harbor+Docker 构建自动化代码发布系统

738人浏览 / 0人评论

参考

https://www.bilibili.com/video/BV1LY4y1k76o/?spm_id_from=333.337.search-card.all.click&vd_source=c3f854044cf23983e6446412aa554ba4

逻辑图

工具及流程图

工具

流程图

环境部署

主机规划

主机准备

主机名配置

hostnamectl set-hostname dev
hostnamectl set-hostname gitlab-server
hostnamectl set-hostname jenkins-server
hostnamectl set-hostname harbor-server
hostnamectl set-hostname web-server

主机IP地址配置

#vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 修改:BOOTPROTO、IPADDR
#cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none" #配置为静态IP
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="ec87533a-8151-4aa0-9d0f-1e970affcdc6"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.10.2x" #把 2x 替换为对应的IP地址
PREFIX="24"
GATEWAY="192.168.10.2"
DNS1="119.29.29.29"

主机名与IP地址解析配置

# 在每台主机的 /etc/hosts 文件中添加如下解析:
192.168.10.20 dev
192.168.10.21 gitlab-server
192.168.10.22 jenkins-server
192.168.10.23 harbor-server
192.168.10.24 web-server

主机安全设置

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭 SELinux
sestatus

主机时间同步

# 添加定时任务
crontab -e
0 */1 * * * ntpdate time1.aliyun.com

# 查看定时任务
crontab -l

主机中工具安装

dev 主机

# 下载项目及上传代码至代码仓库
yum -y install git

gitlab-server 主机

1、获取 yum 源

https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/

https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/

# vim /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=gitlab
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
enabled=1
gpgcheck=0

2、安装

yum -y install gitlab-ce

3、配置

# vim /etc/gitlab/gitlab.rb
external_url='192.168.10.21'   #或者使用域名

4、启动

gitlab-ctl reconfigure
gitlab-ctl status

5、测试

# 查看root初始密码(24小时后过期,需要及时修改)
cat /etc/gitlab/initial_root_password

# 访问主机IP,root账号登录,修改密码

jenkins-server 主机

1、jdk 安装(jdk版本要和项目的相同)

2、安装 Jenkins

https://www.jenkins.io/download/ 安装 stable(LTS)稳定版的。

centos下安装:https://pkg.jenkins.io/redhat-stable/。

安装 epel-release 时如果使用官方镜像仓库速度慢,可以使用阿里云的:

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

3、配置 Jenkins

# vim /etc/init.d/jenkins 在81行下面添加如下内容:
/jdk安装位置/bin/java

# vim /etc/sysconfig/jenkins 在19行双引号中添加java命令路径:
JENKINS_JAVA_CMD="/jdk安装位置/bin/java"

4、Jenkins 启动

chkconfig list 或 chkconfig --list
systemclt daemon-reload
systemctl start jenkins

# 查看密码
cat /var/lib/jenkins/secrets/initialAdminPassword

# 访问 ip:8080,账号:admin
# 安装推荐的插件
# 提示创建第一个管理员账户,先不要创建,使用 admin 账户继续

5、安装 git

yum -y install git

6、安装 maven

https://maven.apache.org/

7、安装 Docker

wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl enable docker
systemctl start docker

harbor-server 主机

1、安装 Docker

2、安装 docker-compose

wget https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-darwin-x86_64

chmod +x docker-compose-darwin-x86_64

mv docker-compose-darwin-x86_64 /usr/bin/docker-compose

docker-compose version

3、安装 Harbor

wget https://github.com/goharbor/harbor/releases/download/v2.8.1/harbor-offline-installer-v2.8.1.tgz

tar xf harbor-offline-installer-v2.8.1.tgz -C /home

cd /home/harbor

mv harbor.yml.temp harbor.yml

vim harbor.yml
# hostname="192.168.10.23" #或者域名
# 注释掉 https 及其端口、证书、私钥

./prepare
./install

docker ps

#访问192.168.10.23,账号:admin,密码:Harbor12345

web-server 主机

需要安装Docker。

工具集成配置

配置 docker 主机使用 harbor

1、jenkins-server

#vim /etc/dokcer/daemon.json
{
	"insecure-registries": ["http://192.168.10.23"]
}

systemctl restart docker

docker login 192.168.10.23
Username: admin
Password: Harbor12345

docker logout

2、harbor-server

#vim /etc/dokcer/daemon.json
{
	"insecure-registries": ["http://192.168.10.23"]
}

docker-compose down

systemctl restart docker

docker-compose up -d

docker login
docker logout

3、web-server

#vim /etc/dokcer/daemon.json
{
	"insecure-registries": ["http://192.168.10.23"]
}

systemctl restart docker

配置 jenkins 使用 docker

# 在jenkins-server主机上配置
# 验证系统中是否有jenkins用户
grep jenkins /etc/passwd

# 验证系统中是否有docker用户及用户组
grep docker /etc/group

# 添加jenkins用户到docker用户组
usermod -G docker jenkins
grep docker /etc/group

# 重启jenkins服务
systemctl restart jenkins

秘钥配置

1、dev主机至gitlab-ce

# dev主机生成秘钥
ssh-keygen

# 添加公钥到 gitlab-ce(gitlab网页后台添加)
cat /root/.ssh/id_rsa.pub

2、jenkins-server主机至gitlab-ce

# jenkins-server主机生成秘钥
ssh-keygen

# 添加公钥到 gitlab-ce
cat /root/.ssh/id_rsa.pub

# 配置jenkins-server主机的私钥到凭据列表(jenkins网页后台:Manage Jenkins → Manage Credentials → 全局 → 添加凭据 → 类型:ssh,范围:全局,id:1或随便,描述:jenkins-server to gitlab-server,username:root,单选项选择私钥,然后添加复制的私钥)
cat /root/.ssh/id_rsa

jenkins 插件安装

首页 → Manage Jenkins → Manage Plugins → 可选插件 → 搜索 → 勾选 → Download now and install after restart → 下面插件都下载后,勾选:安装完成后重启Jenkins

  • maven integration
  • git parameter
  • gitlab
  • Generic Webhook Trigger:用于项目自动化构建。
  • ssh:用于jenkins-server对web-server实施项目部署。

jenkins 全局工具配置

jdk 配置

在Jenkins主机执行 java -version 验证是否安装jdk,执行 echo $JAVA_HOME 查看jdk安装位置,复制该路径,登陆jenkins网页后台 → Global Tool Configuration → 新增jdk → 别名:jdk → 取消勾选:install automatically → 输入复制的安装路径 → 点击应用。

git 配置

验证:git version

maven 配置

验证:mvn --version,位置:echo $MAVEN_HOME,其他操作同jdk配置。

最后点击保存。

jenkins 系统配置

添加jenkins-server访问web-server凭据

首页 → Manage Jenkins → Manage Credentials → 全局 → 添加凭据 → 类型:username with password,范围:全局,用户名:root,密码:自己设置的密码(centos),id:2,描述:jenkins-server to web-server → 确定

配置ssh协议连接主机

首页 → Manage Jenkins → Configure System → ssh remote hosts → 新增

项目发布

jenkins创建项目任务

首页 → 新建item → 输入一个任务名称 → 构建一个maven项目 → 确定 → General,描述,勾选:this project is parameterized,添加参数:git parameter,名称:Tag,描述,参数类型:标签,默认值:1.0.0 → 源码管理,repository URL:gitlab中项目下clone with ssh,Credentials:jenkins-server to gitlab-server,指定分支:$Tag,勾选:递归更新子模块、Update tracking、use Credentials → 构建触发器:取消勾选build whenever a SNAPSHOT dependency is built → pre steps,Root POM:pom.xml,Goals and options:clean package -Dmaven.test.skip=true → Post Steps → add post-build step:execute shell,内容如下:

REPOSITORY=192.168.10.23/library/solo:${tag}
#构建镜像
cat > Dockerfile << EOF
FROM 192.168.10.23/library/tomcat:8575
RUN rm -rf /usr/local/tomcat/webapps/ROOT
COPY target/*.war /usr/local/tomcat/webapps/ROOT.war
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
EOF
docker build -t $REPOSITORY

# 上传镜像
docker login 192.168.10.23 -u admin -p Harbor123456
docker push $REPOSITORY
docker logout 192.168.10.23

然后再次点击:add post-build step:execute shell script on remote host useing ssh,选择web-server的ssh site,command命令如下:

REPOSITORY=192.168.10.23/library/solo:${tag}
#部署
docker rm -f blog-solo | true
docker image rm $REPOSITORY | true
docker container run -d --name blog-solo -p 80:8080 $REPOSITORY

然后点击应用,点击保存。

构建并发布

首页 → 点击name列下的solo任务,build with parameters → 开始构建 → 左边build history → 下拉按钮,点击控制台输出,查看内容

全部评论

搜索