# docker-cicd
**Repository Path**: gitliuxing/docker-cicd
## Basic Information
- **Project Name**: docker-cicd
- **Description**: 基于Docker的CI/CD环境
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2021-12-02
- **Last Updated**: 2022-03-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Reverse Proxy and Monitoring with Traefik
## CI/CD pipeline built and deployed with Docker Compose
Runs containers for Traefik, Jenkins, Nexus Repository, Gogs (self-hosted Git service) and MySQL (dependency for Gogs)
## 一、前置条件
1、操作系统要求
我采用的是:Centos7 64位、系统内核版本为3.10以上
2、准备存档数据的目录,要与docker-compose.yaml文件中volume映射设置的一致;
mkdir /root/zsrd-data
// jenkins目录的特殊要求
## 二、安装JDK
1、检查是否已安装JDK及卸载
yum list installed | grep [java][jdk]
2、如果不合要求,卸载JAVA环境
yum -y remove java-1.6.0-openjdk* //表时卸载所有openjdk相关文件输入
3、查看可安装的JDK软件包列表
yum search java | grep -i --color jdk
4、选择版本安装
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
5、查看JDK是否安装成功
java -version
6、配置环境变量
JDK默认安装路径/usr/lib/jvm,在/etc/profile文件添加如下命令
```
# set java environment
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME CLASSPATH PATH
```
7、保存关闭profile文件,执行如下命令生效
source /etc/profile
8、验证JAVA_HOME
echo $JAVA_HOME
## 二、安装并配置MAVEN
1、确定版本,并下载并解压相应的安装包
```
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz
tar -xf apache-maven-3.8.1-bin.tar.gz -C /usr/local/
```
2、设置环境变量
```
vi /etc/profile
# 在文件末尾添加以下设置
M2_HOME=/usr/local/apache-maven-3.8.1
MAVEN_HOME=$M2_HOME
export PATH=$PATH:$MAVEN_HOME/bin
source /etc/profile
```
3、配置国内镜像源
```
vi $MAVEN_HOME/conf/settings.xml
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
```
## 二、安装Docker及Docker-compose
1、查看是否已安装Docker,删除旧的Docker(如果未安装,跳过)
```
// 查看安装情况
yum list installed | grep docker
// 逐一删除
yum remove -y ...
```
2、安装docker
```
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
systemctl enable docker
systemctl start docker
systemtcl status docker
docker version
```
3、安装docker-compose
```
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose version
```
## 三、启动容器
进入本地目录,执行
```
docker-compose up -d
```
## 四、设置Jenkins
### 1、目录权限
### 2、在浏览器中
### 建立管理员账号
jenkins/jenkins
### 设置JDK
管理Jenkins -> 全局工具设置
### 设置Maven
# 1 Docker安装
## 1.1 安装环境:此处在Centos7进行安装,可以使用命令 lsb_release -a 查看Centos版本1

## 1.2 在Centos7安装docker要求系统为64位、系统内核版本为3.10以上,可以使用命令 uname -f 查看

# 2 用yum源安装
## 2.1查看是否已经安装docker列表,如果存在则按照以下命令操作,如果不存在则按照3离线安装模式

## 2.2 安装docker 输入命令 yum -y install docker

## 2.3 启动docker,输入命令 ststemtcl start docker

## 2.4 查看docker服务状态,输入命令 systemtcl status docker

# 3 离线安装模式
## 3.1 安装包官方地址:http://download.docker.com/linux/static/stable/x86_64/ 可以先下载到本地,然后通过ftp工具上传到服务器上,或者在服务器上使用命令下载 wget http://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz

## 3.2 解压 输入命令 tar -zxvf docker-18.06.3-ce.tgz

## 3.3 将解压出来的docker文件复制到 /usr/bin/目录下 输入命令 cp docker/*/usr/bin/

## 3.4 在/etc/system/system/目录下新增docker.service文件,内容如下,这样可以将docker注册为service服务。
# [Unit]
# Description=Docker Application Container Engine
# Documentation=https://docs.docker.com
# After=network-online.target firewalld.service
# Wants=network-online.target
# [Service]
# Type=notify
# # the default is not to use systemd for cgroups because the delegate issues still
# # exists and systemd currently does not support the cgroup feature set required
# # for containers run by docker
# ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=127.0.0.1
# ExecReload=/bin/kill -s HUP $MAINPID
# # Having non-zero Limit*s causes performance problems due to accounting overhead
# # in the kernel. We recommend using cgroups to do container-local accounting.
# LimitNOFILE=infinity
# LimitNPROC=infinity
# LimitCORE=infinity
# # Uncomment TasksMax if your systemd version supports it.
# # Only systemd 226 and above support this version.
# #TasksMax=infinity
# TimeoutStartSec=0
# # set delegate yes so that systemd does not reset the cgroups of docker containers
# Delegate=yes
# # kill only the docker process, not all processes in the cgroup
# KillMode=process
# # restart the docker process if it exits prematurely
# Restart=on-failure
# StartLimitBurst=3
# StartLimitInterval=60s
# [Install]
# WantedBy=multi-user.target
此处的—insecure-registrt=127.0.0.1(此处改成你私服id)设置是针对有搭建了自己私服Harbor时运行docker进行不安全的访问,否则访问将会呗拒绝。
## 3.5 启动docker,给docker.service文件添加执行权限,输入命令 chmod +x /etc/systemd/system/docker.service

## 启动,输入命令 systemtcl start docker

## 设置开机启动 输入命令 systemtcl enable docker.service

## 查看docker服务状态 输入命令 systemtcl status docker

## 上图表示docker已经安装成功;
# 二、安装jenkins
## 1.安装环境
1.1 操作系统 centos7.3
1.2 下载Jenkins 输入命令 sudo docker pull Jenkins
## 2 启动Jenkins前准备
2.1 创建jenkins文件夹,用于和容器内文件夹做磁盘挂载,命令 mkdir /home/root/jenkins
注意:在安装jenkins时,挂载文件夹/home/root/Jenkins/的归属用户id必须是1000,否则会抛出无操作权限异常
2.2 查看文件夹的归属者,命令 ls- -nd 文件夹名称
2.3 修改文件夹的归属者和组,命令 sudo chown -R 1000:1000 jenkins/
# 3 启动Jenkins
## 3.1 启动jenkins命令 sudo docker run -itd -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true -v /home/root/jenkins:/var/jenkins_home Jenkins
## 3.2 查看运行状态,输入命令 sudo dockers ps
# 4 初次使用Jenkins
## 4.1 获取管理员密码 在浏览器输入 localhost:8080 进入Jenkins,首次进入愮获取管理员的密码,如图:

## 4.2 密码获取方式
4.2.1 在jenkins启动的时候,我们设置了文件夹的挂载,所以我们直接可以在本地jenkins目录下查看密码,命令 cat /home/root/Jenkins/secrets/initialAdminsPassword
4.2.2 在没有挂载磁盘时,获取密码,输入命令 sudo docker exec Jenkins cat /var/Jenkins_home/secrets/initialAdminPassword
# 5 安装插件
## 5.1 可以自定义安装,也可以安装推荐插件

## 5.2 开始安装

## 5.3 创建用户

## 5.4 完成

## 5.5 Jdk安装

## 5.6 MAVEN环境安装

## 5.7 安装jenkind对于maven插件
5.7.1 找到 “系统管理“ - “安装插件” ,点击 “可选插件”,找到如下maven插件的版本 插件名称 Maven Integration
## 5.8 构建触发器在Build when a change is pushed to GitLab. GitLab CI Service 前打勾并复制那个url然后点击Generate按钮 生成一串secret token 保存起来

# 三、创建SpringBoot项目
## 1.配置项目打包自动构建镜像到服务器,创建src/main/docker/Dockerfile文件

## 2.将配置的Dockerfile文件服务名改为自己的服务名

FROM java:8
VOLUME /tmp
ADD web.jar web.jar
RUN bash -c 'touch /web.jar'
#设置镜像时间与系统时间一致
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone \
#设置编码
ENV LANG C.UTF-8
ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/web.jar" ]
## 3 POM文件build标签中添加docker配置
com.spotify
docker-maven-plugin
1.2.2
build-image
package
build
myimages
latest
${project.basedir}/src/main/docker
http://192.168.30.137:2375
/
${project.build.directory}
${project.build.finalName}.jar
此时执行构建会自动打包生成镜像并上传镜像到服务器中
## 4 使用idea连接docker服务器

## 5 打包项目,生成镜像

# 四、Jenkins配置服务器连接
## 1 添加配置



## 2 新建构建任务







docker stop 打包好的镜像名称 || ture #停止旧容器
docker rm 打包好的镜像名称 || ture #删除旧容器
docker rmi 打包好的镜像名称 || ture #删除旧镜像
#!/bin/bash #配置上面指令报错不影响下面构建
echo "Hello"
## 3 执行构建

## 4 配置构建完成后运行容器

# 五、Git配置
## 1 返回到gitlab的工程当中 选settings下边的Integrations

## 2 将刚刚复制的jenkins ci地址与secret token粘贴上来 按照如图打勾 保存

## 3 还是那个页面 test一下刚刚的webhook是否可用 如图所示

## 4 如图所示 200的话 那么已经ok了

## 5 这时候到jenkins看看 已经开始构建了 点击它

## 6 点击console output 可以查看日志

## 7 这个就是构建过程的日志

## 8 现在测试webhook已经测试成功了 接下来在idea中push代码jenkins会自动构建,构建完成查看docker服务器镜像是否运行成功

## 如果出现上图,则自动构建完成,可以正常访问项目了。