前言
本文记录了自己在搭建集成自动化部署过程的步骤,以及遇到的问题,并重新整理了一下思路,还有一些简单的概念说明。主要是参考了大神的文章:Jenkins+Docker+Gitlab+Maven搭建持续集成环境 基于系统:CentOs 7.6
Java
Oracle下载jdk的tar包比如:jdk-8u221-linux-x64.tar(需要注册账号,并且点击接受license)
1、传到服务器某目录比如 /root 下
2、到指定目录新建放jdk的文件夹,作为jdk主目录
$cd /usr/local
$mkdir java
3、解压jdk的tar包到指定目录
$tar -zxvf /root/jdk-8u221-linux-x64.tar -C /usr/local/java/
4、配置环境变量
$vi /etc/profile
$export JAVA_HOME=/usr/local/java/jdk1.8.0_221
$export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
$export PATH=$PATH:$JAVA_HOME/bin
$source /etc/profile
$java -version
Maven
下载Maven的tar包比如:apache-maven-3.6.1-bin.tar.gz
1、上传到服务器某目录比如 /root
2、到指定目录新建放Maven主目录
$cd /usr/local
$mkdir maven
3、解压tar包到指定目录
$tar -zxvf apache-maven-3.6.0-bin.tar.gz -C /usr/local/maven/
4、配置环境变量
$vi /etc/profile
$export M2_HOME=/usr/local/maven/apache-maven-3.6.0
$export PATH=$PATH:$M2_HOME/bin
$source /etc/profile
$mvn -v
Git
1、用yum安装
$yum -y update
$yum install -y git
$git --version
2、创建git用户
$useradd git
$passwd git
$id git
3、服务端创建Git仓库
1)设置服务器目录
$cd /root
$mkdir git
$cd git
$mkdir gittest.git
$git init --bare gittest.git
$chown -R git:git gittest.git/
2)设置客户端公钥到服务端
C:\Users\用户名.ssh 下id_rsa.pub的内容copy到 /home/git/.ssh/authorized_keys
记得新建的文件夹owner为git,同时更改文件权限
$vi /home/git/.ssh/authorized_keys
$cd /home/git
$chown -R git:git .ssh
$chmod 700 .ssh
$cd .ssh
$chmod 600 authorized_keys
(i 粘贴 公钥)
3)确认公钥私钥(RSA)认证开启
$vi /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
$vi /etc/rc.d/init.d/sshd restart
4、禁止git用户ssh登入
$vi /etc/passwd
git:x:1002:1002::/home/git:/bin/sh
改为
git:x:1002:1002::/home/git:/usr/bin/git-shell
地址为:git@ip:/root/git/gittest.git
5、生成本机的git秘钥
$ssh-keygen -t rsa
三个回车,保存目录为
/root/.ssh/id_rsa
/root/.ssh/id_rsa.pub
Jenkins
目前docker版本的jenkins有点问题(版本号落后不支持在线安装插件),于是考虑在本机安装
1、下载rpm安装包到自定义目录 /root/jenkins-2.176.2-1.1.noarch.rpm
$rpm -ivh jenkins-2.176.2-1.1.noarch.rpm
2、配置jenkins的java目录
$vim /etc/init.d/jenkins
找到位置添加
/usr/local/java/jdk1.8.0_221/bin/java
3、启动服务
$service jenkins start
默认端口为8080,初始密码请参考登入页面的说明,具体配置请见后面
Docker
1、安装Docker
$yum install -y yum-utils device-mapper-persistent-data lvm2
$yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$yum install docker-ce
2、启动Docker
$service docker start
$docker ps
3、加入开机启动
$systemctl enable docker
$docker version
配置Swap
因为我的云服务器内存比较小,这里设置一下Swap,目录可以自己改
dd if=/dev/zero of=/var/swap bs=1024 count=1024000
mkswap /var/swap
mkswap -f /var/swap
swapon /var/swap
vi /etc/fstab
/var/swap swap swap defaults 0 0
查看依赖度,并设置新的
cat /proc/sys/vm/swappiness
sysctl vm.swappiness=60
加入开机启动
echo "vm.swappiness = 60" >> /etc/sysctl.conf
1、Docker网络环境配置
为了能自定义ip,Docker中需要配置自定义网络。
$docker network create --subnet=172.19.0.0/16 --gateway 172.19.0.1 mynetwork
$docker network inspect mynetwork
2、Docker部署Mysql
拉去镜像启动容器后,登入容器创建数据库等操作
$docker pull mysql:5.7
$docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 --net mynetwork --ip 172.19.0.3 -d mysql:5.7
$docker exec -it mysql bash
$mysql -u root -p"root"
$GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
$FLUSH PRIVILEGES;
$create database tjl;
3、Docker部署项目
这里用springboot的jar包进行部署测试
$ cd /root/product
$vi Dockfile
FROM java:8
MAINTAINER xiaofeng
VOLUME /tmp
ADD tjl-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
EXPOSE 8089
上传jar包到Dockfile同级目录 /root/product/tjl-0.0.1-SNAPSHOT.jar,并进行编译
docker build -t tjl .
启动容器
$docker run -d -p 8089:8089 --name tjl --link mysql:mysql -v /root/run_product/tmp:/tmp --net mynetwork --ip 172.19.0.4 tjl
$docker run -d -p 8090:8089 --name tjl2 --link mysql:mysql -v /root/run_product/tmp:/tmp --net mynetwork --ip 172.19.0.5 tjl
Dockfile这里要说明一下/tmp,指的是Docker容器中的目录/tmp映射到主机目录,主机目录是自动的,用inspect查看,并找到Mounts
$docker inspect tjl
"Mounts": [
{
"Type": "volume",
"Name": "997f738dd5d8c35b59cd7b284badab64ab9a4dbe0f6e962072f080e0a8977303",
"Source": "/var/lib/docker/volumes/997f738dd5d8c35b59cd7b284badab64ab9a4dbe0f6e962072f080e0a8977303/_data",
"Destination": "/tmp",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
3、运行nginx镜像
下载nginx镜像,并运行,注意有映射目录文件,请自己设置新增目录。
另配置文件中增加了ssl和负载均衡配置。
$docker pull nginx
$docker run -p 80:80 -p 443:443 -d --name nginxsslweb -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/conf.d/:/etc/nginx/conf.d/ -v /www:/www -v /root/nginx/logs/:/home/nginx/logs/ --net mynetwork --ip 172.19.0.6 nginx
$docker stop nginxsslweb
$openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /usr/local/ssl/nginx.key -out /usr/local/ssl/nginx.crt
$cd /root/nginx/conf.d
$mkdir ssl
$cp -r /usr/local/ssl/* /root/nginx/conf.d/ssl/
$vi /root/nginx/conf.d/default.conf
upstream mytomcat{
server 172.19.0.4:8089 weight=1;
server 172.19.0.5:8089 weight=1;
}
server{
listen 80;
server_name 120.78.150.156;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name 120.78.150.156;
ssl_certificate /etc/nginx/conf.d/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/conf.d/ssl/nginx.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
access_log /home/nginx/logs/httpsaccess.log;
location / {
proxy_pass http://mytomcat;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
4、配置jenkins
这里网上有许多资料,这里就简单说几点。
1)启动jenkins并登入网址端口8080
2)进入插件管理,安装Maven Integration Plugin插件
3)配置JAVA_HOME和MAVEN_HOME
4)新任务,选择Maven
5)选择git插件,这里要配置秘钥(注意是私钥,匹配git仓库的公钥)
6) pom.xml 文件需要加项目 tjl/pom.xml
7)在Post Steps里面写入shell脚本
思路就是把旧的容器停了,镜像删了,然后重新构建启动。要注意jenkins的输出目录,还有配置sudo
$vi /etc/sudoers
root ALL=(ALL) ALL
jenkins ALL=(ALL) NOPASSWD:ALL
##Post Steps脚本
sudo rm -rf /root/product/tjl-0.0.1-SNAPSHOT.jar
sudo cp /var/lib/jenkins/workspace/tjl2/tjl/target/tjl-0.0.1-SNAPSHOT.jar /root/product/tjl-0.0.1-SNAPSHOT.jar
sudo docker stop tjl
sudo docker stop tjl2
sudo docker rm -f tjl
sudo docker rm -f tjl2
sudo docker rmi tjl
sudo docker build -t tjl /root/product
sudo docker run -d -p 8089:8089 --name tjl --link mysql:mysql -v /root/product/tmp:/tmp --net mynetwork --ip 172.19.0.4 tjl
sudo docker run -d -p 8090:8089 --name tjl2 --link mysql:mysql -v /root/product/tmp:/tmp --net mynetwork --ip 172.19.0.5 tjl
7)点击立即构建等待完成。
8)配置触发构建条件,这里大家自行设置。
至此整个集成自动化部署已经搭建完成,快打开网址ip尝试一下吧。
常用命令:
查看容器ip
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql
容器启动日志
docker logs tjl
查看内存
free -mh