1、部署gitlab

1.1 部署gitlab

docker run -d \
  --name gitlab \
  -p 8443:443 \
  -p 9999:80 \
  -p 9998:22 \
  -v /data/gitlab/config:/etc/gitlab \
  -v /data/gitlab/logs:/var/log/gitlab \
  -v /data/gitlab/data:/var/opt/gitlab \
  -v /etc/localtime:/etc/localtime \
  --restart=always \
  lizhenliang/gitlab-ce-zh:latest

访问地址:http://IP:9999

初次会先设置管理员密码 ,然后登陆,默认管理员用户名root,密码就是刚设置的。

root:admin888

1.2 创建项目,提交测试代码

进入后先创建项目,提交代码,以便后面测试
centos7.9环境基于docker和pipeline构建jenkins的ci平台_java
centos7.9环境基于docker和pipeline构建jenkins的ci平台_git_02

yum install -y git

mkdir git_demoair
cd git_demoair
# 将代码解压,并且推送到git仓库中
unzip tomcat-java-demo-master.zip 
cd tomcat-java-demo-master
git init
git config --global user.email "admin@163.com"
git config --global user.name "admin"
git remote add origin http://10.11.0.232:9999/root/java-demo.git
git add .
git commit -m "init commit"
git push -u origin master

# git删除目录命令(保留目录:git rm -r --cached src db Dockerfile LICENSE pom.xml README.md)
git rm -r xx目录
git commit -m "delete xx目录"
git push origin master

2、部署Harbor镜像仓库

2.1 安装docker与docker-compose

# wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# yum install docker-ce -y
# yum install docker-compose
# systemctl start docker
# systemctl enable docker

2.2 解压离线包部署

# tar zxvf harbor-offline-installer-v1.9.1.tgz
# cd harbor
# vi harbor.yml
hostname: 10.11.0.150
port: 8888
# ./prepare
# ./install.sh

2.3 在Jenkins主机配置Docker可信任

由于habor未配置https,还需要在docker配置可信任。

# cat /etc/docker/daemon.json 
{"registry-mirrors": ["http://qj4ewogx.mirror.aliyuncs.com"],
  "insecure-registries": ["10.11.0.150"]
}
# systemctl restart docker

3、部署Jenkins

3.1 准备JDK和Maven环境

# tar xf jdk-8u261-linux-x64.tar.gz
# mv jdk1.8.0_261 /usr/local/jdk
# tar zxf apache-maven-3.6.1-bin.tar.gz
# mv apache-maven-3.6.1 /usr/local/maven
docker run -d --name jenkins -p 80:8080 -p 50000:50000 -u root  \
   -v /data/jenkins_home:/var/jenkins_home \
   -v /var/run/docker.sock:/var/run/docker.sock   \
   -v /usr/bin/docker:/usr/bin/docker \
   -v /usr/local/maven:/usr/local/maven \
   -v /usr/local/jdk:/usr/local/jdk \
   -v /etc/localtime:/etc/localtime \
   --name jenkins jenkins/jenkins:lts

密码: admin/admin888
maven 的设置
maven设置网络代理 和 源地址


ccproxy
true
http
10.11.0.150
808
127.0.0.1

基于 centos:7 镜像制作自定义mycentos:v2

# 交互式运行centos:7

# docker run -it --name=mycentos

# 在运行的mycentos容器中修改网络

# vi /etc/profile
export http_proxy=http://10.11.0.150:808
export https_proxy="https://10.11.0.150:808"
export ftp_proxy=http://10.11.0.150:808
export socks_proxy="socks://10.11.0.150:808/"
export http_proxy=http://10.11.0.150:808
export https_proxy=https://10.11.0.150:808

# echo "proxy=http://10.11.0.150:808" >> /etc/yum.conf
# source /etc/profile
# 替换yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

# 安装常用工具
yum install -y iproute net-tools telnet wget curl tree iftop htop iotop lrzsz

# 提交镜像为 mycentos:v1
# docker commit mycentos mycentos:v1

编译安装tomcat

下载地址:https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.43/bin/apache-tomcat-8.5.43.tar.gz

编写Dockerfile

FROM mycentos:v2
LABEL maintainer www.chinasoft.com

ENV VERSION=8.5.43

RUN source /etc/profile && \
        yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && \
	yum clean all && \
	rm -rf /var/cache/yum/*
COPY apache-tomcat-${VERSION}.tar.gz /
RUN source /etc/profile && \
    tar zxf apache-tomcat-${VERSION}.tar.gz && \
    mv apache-tomcat-${VERSION} /usr/local/tomcat && \
    rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \
    mkdir /usr/local/tomcat/webapps/test && \
    echo "ok" > /usr/local/tomcat/webapps/test/status.html && \
    sed -i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"' /usr/local/tomcat/bin/catalina.sh && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ENV PATH $PATH:/usr/local/tomcat/bin

WORKDIR /usr/local/tomcat

EXPOSE 8080
CMD ["catalina.sh", "run"]



java包

FROM java:8-jdk-alpine
LABEL maintainer www.chinasoft.com

ENV JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF8 -Duser.timezone=GMT+08"
RUN apk add -U tzdata && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY ./target/eureka-service.jar ./
EXPOSE 8888
CMD java-jar $JAVA_OPTS /eureka-service.jar

3.3 安装插件

如果安装慢,可以更新一下插件源地址

cd /data/jenkins_home/updates
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json 
sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

系统管理-->插件管理-->Installed

搜索git/pipeline,点击安装。

4、发布测试

4.1 添加参数化构建

This project is parameterized -> String Parameter

Name:Branch # 变量名,下面脚本中调用

Default Value:master # 默认分支

Description:发布的代码分支 # 描述

4.2 Pipeline脚本

def registry = "10.11.0.232"
def project = "welcome"
def app_name = "demo"
def image_name = "${registry}/${project}/${app_name}:${Branch}-${BUILD_NUMBER}"
def git_address = "http://10.11.0.232:9999/root/java-demo.git"
def docker_registry_auth = "fb0e0bfe-7875-40a0-bc08-8898c6644cca"
# jenkins凭证id
def git_auth = "e7c91602-823f-484c-ad6f-d1497bf2d36c"

pipeline {
    agent any
    stages {
        stage('拉取代码'){
            steps {
              checkout([$class: 'GitSCM', branches: [[name: '${Branch}']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
            }
        }

        stage('代码编译'){
           steps {
             sh """
                JAVA_HOME=/usr/local/jdk
                PATH=$JAVA_HOME/bin:/usr/local/maven/bin:$PATH
                mvn clean package -Dmaven.test.skip=true
                """ 
           }
        }

        stage('构建镜像'){
           steps {
                withCredentials([usernamePassword(credentialsId: "${docker_registry_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
                sh """
                  echo '
                    FROM ${registry}/library/tomcat:v1
                    LABEL maitainer chinasoft
                    RUN rm -rf /usr/local/tomcat/webapps/*
                    ADD target/*.war /usr/local/tomcat/webapps/ROOT.war
                  ' > Dockerfile
                  docker build -t ${image_name} .
                  docker login -u ${username} -p '${password}' ${registry}
                  docker push ${image_name}
                """
                }
           } 
        }

        stage('部署到Docker'){
           steps {
              sh """
              REPOSITORY=${image_name}
              docker rm -f tomcat-java-demo |true
              docker container run -d --name tomcat-java-demo -p 88:8080 ${image_name}
              """
            }
        }
    }
}

4.3 添加凭据

1、添加拉取git代码凭据,并获取id替换到上面git_auth变量值。
centos7.9环境基于docker和pipeline构建jenkins的ci平台_docker_03
centos7.9环境基于docker和pipeline构建jenkins的ci平台_docker_04

2、添加拉取harbor镜像凭据,并获取id替换到上面docker_registry_auth变量值。

harbor的jenkins凭据

centos7.9环境基于docker和pipeline构建jenkins的ci平台_docker_05

4.4 通过jenkins进行代码的发布

centos7.9环境基于docker和pipeline构建jenkins的ci平台_git_06
centos7.9环境基于docker和pipeline构建jenkins的ci平台_java_07
1、可以看到通过jenkins和pipeline能顺利编译并运行起项目

2、模拟代码修改并提交gitlab,并且重新执行jenkins编译,可以看到成功修改

[root@node01 git_demoair]# vim src/main/resources/templates/index.ftl
[root@node01 git_demoair]# git add .
[root@node01 git_demoair]# git commit -m "modify index.ftl"
centos7.9环境基于docker和pipeline构建jenkins的ci平台_git_08