DevOps 实践:基于 Gitlab+Jenkins+Harbor+Docker 构建自动化代码发布系统
参考
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 → 下拉按钮,点击控制台输出,查看内容
全部评论