# 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 ![image](/img/1.png) ## 1.2 在Centos7安装docker要求系统为64位、系统内核版本为3.10以上,可以使用命令 uname -f 查看 ![image](/img/2.png) # 2 用yum源安装 ## 2.1查看是否已经安装docker列表,如果存在则按照以下命令操作,如果不存在则按照3离线安装模式 ![img](/img/3.png) ## 2.2 安装docker 输入命令 yum -y install docker ![img](/img/4.png) ## 2.3 启动docker,输入命令 ststemtcl start docker ![img](/img/5.png) ## 2.4 查看docker服务状态,输入命令 systemtcl status docker ![img](/img/6.png) # 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 ![img](/img/7.png) ## 3.2 解压 输入命令 tar -zxvf docker-18.06.3-ce.tgz ![img](/img/8.png) ## 3.3 将解压出来的docker文件复制到 /usr/bin/目录下 输入命令 cp docker/*/usr/bin/ ![img](/img/9.png) ## 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 ![img](/img/10.png) ## 启动,输入命令 systemtcl start docker ![img](/img/11.png) ## 设置开机启动 输入命令 systemtcl enable docker.service ![img](/img/12.png) ## 查看docker服务状态 输入命令 systemtcl status docker ![img](/img/13.png) ## 上图表示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,首次进入愮获取管理员的密码,如图: ![img](/img/14.png) ## 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 可以自定义安装,也可以安装推荐插件 ![img](/img/15.png) ## 5.2 开始安装 ![img](/img/16.png) ## 5.3 创建用户 ![img](/img/17.png) ## 5.4 完成 ![img](/img/18.png) ## 5.5 Jdk安装 ![img](/img/19.png) ## 5.6 MAVEN环境安装 ![img](/img/20.png) ## 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 保存起来 ![img](/img/21.png) # 三、创建SpringBoot项目 ## 1.配置项目打包自动构建镜像到服务器,创建src/main/docker/Dockerfile文件 ![img](/img/22.png) ## 2.将配置的Dockerfile文件服务名改为自己的服务名 ![img](/img/23.png) 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服务器 ![img](/img/24.png) ## 5 打包项目,生成镜像 ![img](/img/25.png) # 四、Jenkins配置服务器连接 ## 1 添加配置 ![img](/img/26.png) ![img](/img/27.png) ![img](/img/28.png) ## 2 新建构建任务 ![img](/img/29.png) ![img](/img/30.png) ![img](/img/31.png) ![img](/img/32.png) ![img](/img/33.png) ![img](/img/34.png) ![img](/img/35.png) docker stop 打包好的镜像名称 || ture #停止旧容器 docker rm 打包好的镜像名称 || ture #删除旧容器 docker rmi 打包好的镜像名称 || ture #删除旧镜像 #!/bin/bash #配置上面指令报错不影响下面构建 echo "Hello" ## 3 执行构建 ![img](/img/36.png) ## 4 配置构建完成后运行容器 ![img](/img/37.png) # 五、Git配置 ## 1 返回到gitlab的工程当中 选settings下边的Integrations ![img](/img/38.png) ## 2 将刚刚复制的jenkins ci地址与secret token粘贴上来 按照如图打勾 保存 ![img](/img/39.png) ## 3 还是那个页面 test一下刚刚的webhook是否可用 如图所示 ![img](/img/40.png) ## 4 如图所示 200的话 那么已经ok了 ![img](/img/41.png) ## 5 这时候到jenkins看看 已经开始构建了 点击它 ![img](/img/42.png) ## 6 点击console output 可以查看日志 ![img](/img/43.png) ## 7 这个就是构建过程的日志 ![img](/img/44.png) ## 8 现在测试webhook已经测试成功了 接下来在idea中push代码jenkins会自动构建,构建完成查看docker服务器镜像是否运行成功 ![img](/img/45.png) ## 如果出现上图,则自动构建完成,可以正常访问项目了。