文章目录
- 环境介绍
-
- 1.部署gitlab仓库
- 2.部署jenkins
- 3.安装harbo仓库
- 4.在第四台主机部署docker,并制作tomcat镜像上传至harbor仓库中
- 5.上传代码到gitlab仓库
- 6.在jenkins主机安装docker并制作流水线脚本上线项目
环境介绍
主机名 |
安装软件 |
ip |
系统名 |
gitlab |
gitlab |
192.168.37.120 |
centos8 |
jenkins |
jenkins+tomcat+docker |
192.168.37.130 |
centos8 |
Harbor |
harbor+docker |
192.168.37.140 |
centos8 |
docker |
docker |
192.168.37.91 |
rocky linux8 |
1.部署gitlab仓库
//关闭防火墙和selinux
[root@gitlab ~]# systemctl disable --now firewalld
[root@gitlab ~]# setenforce 0
//配置yum源
[root@gitlab ~]# rm -rf /etc/yum.repos.d/*
[root@gitlab ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2495 100 2495 0 0 3027 0 --:--:-- --:--:-- --:--:-- 3024
[root@gitlab ~]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[root@gitlab ~]# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
[root@gitlab ~]# sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
[root@gitlab ~]# sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
[root@gitlab ~]# yum makecache
//安装依赖源
[root@gitlab ~]# yum -y install git wget curl openssh-server openssh-clients postfix cronie perl
[root@gitlab ~]# systemctl start postfix
[root@gitlab ~]# systemctl enable postfix
[root@gitlab ~]# wget http://mirror.centos.org/centos/7/os/x86_64/Packages/policycoreutils-python-2.5-34.el7.x86_64.rpm
[root@gitlab ~]# rpm -ivh --nodeps policycoreutils-python-2.5-34.el7.x86_64.rpm --force
warning: policycoreutils-python-2.5-34.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:policycoreutils-python-2.5-34.el7################################# [100%]
//下载gitlab包并安装
[root@gitlab ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-16.4.1-ce.0.el7.x86_64.rpm
[root@gitlab ~]# rpm -ivh gitlab-ce-16.4.1-ce.0.el7.x86_64.rpm
warning: gitlab-ce-16.4.1-ce.0.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID f27eab47: NOKEY
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:gitlab-ce-16.4.1-ce.0.el7 ################################# [100%]
It looks like GitLab has not been configured yet; skipping the upgrade script.
*. *.
*** ***
***** *****
.****** *******
******** ********
,,,,,,,,,***********,,,,,,,,,
,,,,,,,,,,,*********,,,,,,,,,,,
.,,,,,,,,,,,*******,,,,,,,,,,,,
,,,,,,,,,*****,,,,,,,,,.
,,,,,,,****,,,,,,
.,,,***,,,,
,*,.
_______ __ __ __
/ ____(_) /_/ / ____ _/ /_
/ / __/ / __/ / / __ `/ __ \
/ /_/ / / /_/ /___/ /_/ / /_/ /
\____/_/\__/_____/\__,_/_.___/
//修改配置文件
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
//修改 /etc/gitlab/gitlab.rb 的第32行、1011行、1115行
##! https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
external_url 'http://192.168.37.120' //改成自己主机的域名或ip
## Roles for multi-instance GitLab
(省略)
# gitlab_workhorse['listen_addr'] = "/var/opt/gitlab/gitlab-workhorse/sockets/socket"
gitlab_workhorse['auth_backend'] = "http://localhost:8080" //取消注释
##! Enable Redis keywatcher, if this setting is not present it defaults to true
(省略)
# puma['listen'] = '127.0.0.1'
puma['port'] = 8080 //取消注释
# puma['socket'] = '/var/opt/gitlab/gitlab-rails/sockets/gitlab.socket'
(省略)
//重载配置文件
[root@gitlab ~]# gitlab-ctl reconfigure
//重启gitlab
[root@gitlab ~]# gitlab-ctl restart
//设置密码
[root@gitlab gitlab]# gitlab-rails console -e production
--------------------------------------------------------------------------------
Ruby: ruby 3.0.6p216 (2023-03-30 revision 23a532679b) [x86_64-linux]
GitLab: 16.4.1 (e6801ed8d44) FOSS
GitLab Shell: 14.28.0
PostgreSQL: 13.11
------------------------------------------------------------[ booted in 35.34s ]
Loading production environment (Rails 7.0.6)
irb(main):001:0> user = User.where(id: 1).first
=> #
irb(main):002:0> user.password = '789qwsazxcv'
=> "789qwsazxcv"
irb(main):003:0> user.password_confirmation = '789qwsazxcv'
=> "789qwsazxcv"
irb(main):004:0> user.save!
=> true
irb(main):005:0> exit
2.部署jenkins
//安装依赖包
[root@jenkins ~]# yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
//下载tomcat源码包
[root@jenkins ~]# wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.80/bin/apache-tomcat-9.0.80.tar.gz
//解压tomcat包到/usr/local
[root@jenkins ~]# tar xf apache-tomcat-9.0.82.tar.gz -C /usr/local/
[root@jenkins ~]# cd /usr/local/
[root@localhost local]# ls
apache-tomcat-9.0.82 bin etc games include lib lib64 libexec sbin share src
[root@jenkins local]# ln -s apache-tomcat-9.0.82 tomcat
[root@jenkins local]# ls
apache-tomcat-9.0.82 bin etc games include lib lib64 libexec sbin share src tomcat
[root@jenkins ~]# ls
anaconda-ks.cfg apache-tomcat-9.0.82.tar.gz jenkins.war
[root@jenkins ~]# yum -y install java-17-openjdk java-17-openjdk-devel
[root@jenkins ~]# alternatives --config java
There are 2 programs which provide 'java'.
Selection Command
-----------------------------------------------
*+ 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/jre/bin/java)
2 java-17-openjdk.x86_64 (/usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/java)
Enter to keep the current selection[+], or type selection number: 2
[root@jenkins ~]# java -jar jenkins.war
[root@jenkins ~]# cd /usr/local/tomcat/
[root@jenkins tomcat]# ls
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
[root@jenkins tomcat]# cd webapps/
[root@jenkins webapps]# /usr/local/tomcat/bin/shutdown.sh
[root@jenkins webapps]# /usr/local/tomcat/bin/startup.sh
[root@jenkins webapps]# ls
jenkins jenkins.war
//安装jenkins插件时安装所有插件
3.安装harbo仓库
[root@Harbor ~]# curl -SL https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
100 56.8M 100 56.8M 0 0 1972k 0 0:00:29 0:00:29 --:--:-- 4772k
[root@Harbor ~]# cd /usr/local/bin/docker-compose
bash: cd: /usr/local/bin/docker-compose: Not a directory
[root@Harbor ~]# cd /usr/local/bin/
[root@Harbor bin]# ls docker-compose
docker-compose
[root@Harbor bin]# chmod a+x docker-compose
[root@Harbor bin]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
//下载harbor仓库源码包
[root@Harbor ~]# wget https://github.com/goharbor/harbor/releases/download/v2.9.1/harbor-offline-installer-v2.9.1.tgz
[root@Harbor ~]# tar xf harbor-offline-installer-v2.9.1.tgz -C /usr/local
//安装harbor
[root@Harbor ~]# cd /usr/local/harbor/
[root@Harbor harbor]# mv harbor.yml.tmpl harbor.yml
...
hostname: 192.168.37.140
...
[root@Harbor harbor]# ./install.sh
[root@Harbor harbor]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 2048 127.0.0.1:1514 0.0.0.0:*
LISTEN 0 2048 0.0.0.0:80 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 2048 [::]:80 [::]:*
[root@Harbor harbor]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4fe1af4a85a2 goharbor/harbor-jobservice:v2.9.1 "/harbor/entrypoint.…" 24 hours ago Up 3 hours (healthy) harbor-jobservice
8355c5b7b29b goharbor/nginx-photon:v2.9.1 "nginx -g 'daemon of…" 24 hours ago Up 3 hours (healthy) 0.0.0.0:80->8080/tcp, :::80->8080/tcp nginx
56ce50b43a99 goharbor/harbor-core:v2.9.1 "/harbor/entrypoint.…" 24 hours ago Up 3 hours (healthy) harbor-core
3d52f79c5633 goharbor/registry-photon:v2.9.1 "/home/harbor/entryp…" 24 hours ago Up 3 hours (healthy) registry
6efc44a6c948 goharbor/harbor-db:v2.9.1 "/docker-entrypoint.…" 24 hours ago Up 3 hours (healthy) harbor-db
f9c7018bb4fe goharbor/harbor-portal:v2.9.1 "nginx -g 'daemon of…" 24 hours ago Up 3 hours (healthy) harbor-portal
ce16ec2fffe1 goharbor/harbor-registryctl:v2.9.1 "/home/harbor/start.…" 24 hours ago Up 3 hours (healthy) registryctl
dff36236cdd6 goharbor/redis-photon:v2.9.1 "redis-server /etc/r…" 24 hours ago Up 3 hours (healthy) redis
634c1e2af5b5 goharbor/harbor-log:v2.9.1 "/bin/sh -c /usr/loc…" 24 hours ago Up 3 hours (healthy) 127.0.0.1:1514->10514/tcp harbor-log
![基于Docker容器DevOps应用方案_第1张图片](http://img.e-com-net.com/image/info8/21d9710f2fb847b5a897eac7895c2ada.jpg)
4.在第四台主机部署docker,并制作tomcat镜像上传至harbor仓库中
[root@docker ~]# cd /etc/yum.repos.d/
[root@docker yum.repos.d]# ls
CentOS-Base.repo
[root@docker yum.repos.d]# curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1919 100 1919 0 0 5436 0 --:--:-- --:--:-- --:--:-- 5420
[root@docker yum.repos.d]# sed -i 's@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@g' docker-ce.repo
[root@docker yum.repos.d]#
[root@docker yum.repos.d]# cd
[root@docker ~]#
[root@docker ~]#
[root@docker ~]# yum -y install docker-ce
[root@docker ~]# mkdir tomcat
[root@docker ~]# cd tomcat/
[root@docker tomcat]# touch dockerfile
[root@docker tomcat]# cat dockerfile
FROM centos:centos8
MAINTAINER "www.ayachinene.com"
RUN rm -rf /etc/yum.repos.d/* &&\
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo &&\
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo &&\
yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel wget &&\
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.82/bin/apache-tomcat-9.0.82.tar.gz -P /opt/ &&\
cd /opt/ && tar xf apache-tomcat-9.0.82.tar.gz -C /usr/local && cd /usr/local &&\
ln -s apache-tomcat-9.0.82 tomcat
CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
[root@docker tomcat]# docker build -t 192.168.37.140/library/tomcat:v0.2 .
[root@docker ~]# vim /etc/docker/daemon.json
[root@docker ~]# cat /etc/docker/daemon.json
{
"insecure-registries": ["http://192.168.37.140"]
}
[root@docker ~]# systemctl daemon-reload
[root@docker ~]# systemctl restart docker
[root@docker ~]# docker login http://192.168.37.140
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[root@docker ~]# docker push 192.168.37.140/library/tomcat:v0.2
The push refers to repository [192.168.37.140/library/tomcat]
13ca10dfd080: Pushed
74ddd0ec08fa: Pushed
v0.2: digest: sha256:d98c07abfa4d2290a53e6aff134978021a3afa6824628cb38b715f57e54ed4fb size: 742
5.上传代码到gitlab仓库
![基于Docker容器DevOps应用方案_第2张图片](http://img.e-com-net.com/image/info8/779effdb15b449b79644a86a7f175d33.jpg)
![基于Docker容器DevOps应用方案_第3张图片](http://img.e-com-net.com/image/info8/bfca502c8ee449e2afa6658ed140e76f.jpg)
[root@gitlab ~]# git config --global user.name "root"
[root@gitlab ~]# git config --global user.email "[email protected]"
[root@gitlab ~]# git clone http://192.168.37.120/root/tomcat-java-demo.git
Cloning into 'tomcat-java-demo'...
warning: You appear to have cloned an empty repository.
[root@gitlab ~]# ls
123 policycoreutils-python-2.5-34.el7.x86_64.rpm
anaconda-ks.cfg test
gitlab-ce-16.4.1-ce.0.el7.x86_64.rpm tomcat-java-demo
plpl
[root@gitlab ~]# cd tomcat-java-demo/
[root@gitlab tomcat-java-demo]# ls
[root@gitlab tomcat-java-demo]# ls
db deploy.yaml Dockerfile jenkinsfile LICENSE pom.xml README.md src
[root@gitlab tomcat-java-demo]# git add .
[root@gitlab tomcat-java-demo]# git commit -m "add README"
[root@gitlab tomcat-java-demo]# git push --set-upstream
Username for 'http://192.168.37.120': root
Password for 'http://[email protected]':
Enumerating objects: 181, done.
Counting objects: 100% (181/181), done.
Delta compression using up to 4 threads
Compressing objects: 100% (168/168), done.
Writing objects: 100% (181/181), 1.12 MiB | 6.34 MiB/s, done.
Total 181 (delta 4), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (4/4), done.
To http://192.168.37.120/root/tomcat-java-demo.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
6.在jenkins主机安装docker并制作流水线脚本上线项目
//安装maven打包工具
[root@jenkins 美女]# yum -y install maven
//选择java版本
[root@jenkins 美女]# alternatives --config java
There are 2 programs which provide 'java'.
Selection Command
-----------------------------------------------
* 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/jre/bin/java)
+ 2 java-17-openjdk.x86_64 (/usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/java)
Enter to keep the current selection[+], or type selection number: 2
//安装docker
[root@jenkins ~]# curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1919 100 1919 0 0 2993 0 --:--:-- --:--:-- --:--:-- 2993
[root@jenkins ~]# cd /etc/yum.repos.d/
[root@jenkins yum.repos.d]# ls
CentOS-Base.repo docker-ce.repo
[root@jenkins yum.repos.d]# sed -i 's@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@g' docker-ce.repo
[root@jenkins yum.repos.d]# yum -y install docker-ce
[root@jenkins ~]# systemctl start docker
//制作流水线脚本
pipeline {
agent any
stages {
stage("pull code"){
steps {
git 'http://192.168.37.120/root/tomcat-java-demo.git'
}
}
stage("mvn pkgs"){
steps {
sh """
mvn clean package -Dmaven.test.skip=true
"""
}
}
stage("mkdir tomcat"){
steps {
sh """
mv /root/.jenkins/workspace/美女/target/ly-simple-tomcat-0.0.1-SNAPSHOT.war /root/tomcat/meinv.war
"""
}
}
stage("docker"){
steps {
sh """
docker pull 192.168.37.140/library/tomcat:v0.2
docker run -d -p 80:8080 --name www -v /root/tomcat/:/usr/local/tomcat/webapps/ -it 192.168.37.140/library/tomcat:v0.2
"""
}
}
}
}
![基于Docker容器DevOps应用方案_第4张图片](http://img.e-com-net.com/image/info8/b28028da78ab43479066227520d86f0c.jpg)
![基于Docker容器DevOps应用方案_第5张图片](http://img.e-com-net.com/image/info8/c6fae706773c4cb991fc809347847ce3.jpg)