基于Docker构建企业Jenkins CI平台

2021-12-07  本文已影响0人  小李飞刀_lql

CI/CD概述

001 持续集成(Continuous Integration,CI):代码合并、构建、部署、测试都在一起,不断地执行这个过程,并对结果反馈。
002 持续部署(Continuous Deployment,CD):部署到测试环境、预生产环境、生产环境。
003 持续交付(Continuous Delivery,CD):将最终产品发布到生产环境,给用户使用。

CI工作流程设计

1638841737250.png

Gitlab

root 12345678

[root@es3 ~]# cd tomcat-java-demo-master
git config --global user.email "lql_h@163.com"
git config --global user.name "root"

git init
git remote add origin http://192.168.153.18/root/tomcat-java-demo2.git
git add .
git commit -m "Initial commit"
git push -u origin master
1638842465059.png

jenkins

准备JDK和Maven环境

#将二进制包上传到服务器并解压到工作目录,用于让Jenkins容器挂载使用
[root@es3 ~]# mv jdk1.8.0_45/ /usr/local/jdk
[root@es3 ~]# mv apache-maven-3.5.0 /usr/local/maven

修改Maven源

[root@es3 conf]# vi /usr/local/maven/conf/settings.xml 

<mirrors>

<mirror>     
  <id>central</id>     
  <mirrorOf>central</mirrorOf>     
  <name>aliyun maven</name>
  <url>https://maven.aliyun.com/repository/public</url>     
</mirror>

</mirrors>

运行jenkins

docker run -d --name jenkins -p 81:8080 -p 50000:50000 -u root  \
   -v /opt/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 \
   --restart=always \
   --name jenkins jenkins/jenkins
-----------------------------------------------------------------------------------
[root@es3 conf]# docker logs  jenkins -f
Please use the following password to proceed to installation:
8d0c4f351338468e8b62e292d3e42444  
   

安装插件

修改下载源

[root@es3 conf]# cd /opt/jenkins_home/updates

[root@es3 updates]# sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json

[root@es3 updates]# sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

重启生效

[root@es3 updates]# docker restart jenkins

安装git插件和pipeline插件并重启

1638844277273.png

发布测试

在jenkins容器中验证登录

[root@es3 updates]# docker exec -it jenkins bash

root@238483a2c2d7:/# echo "192.168.153.27 reg.pcitc.com" >> /etc/hosts
root@238483a2c2d7:/# docker login reg.pcitc.com
Username: admin
Password: 

Login Succeeded

参数设置

def registry = "reg.pcitc.com"
def project = "welcome"
def app_name = "demo"
def image_name = "${registry}/${project}/${app_name}:${Branch}-${BUILD_NUMBER}"
def git_address = "http://192.168.153.18/root/tomcat-java-demo2.git"
def docker_registry_auth = "1f782a60-8e66-49a8-b154-bd303a663302"
def git_auth = "16932e0a-d8e8-4d6a-a07e-0adee8aa0dd6"

project

1638845206597.png
1638846293491.png

Branch

New Item -> Pipeline -> This project is parameterized -> String Parameter

- Name:Branch    # 变量名,下面脚本中调用 
- Default Value:master   # 默认分支
- Description:发布的代码分支  # 描述 
1638845619414.png

添加凭据

管理Jenkins->安全-->管理凭据->Jnekins->添加凭据->Username with password

- Username:用户名
- Password:密码
- ID:留空
- Description:描述
1638845883318.png

Pipeline脚本

#!/usr/bin/env groovy

def registry = "reg.pcitc.com"
def project = "welcome"
def app_name = "demo"
def image_name = "${registry}/${project}/${app_name}:${Branch}-${BUILD_NUMBER}"
def git_address = "http://192.168.153.18/root/tomcat-java-demo2.git"
def docker_registry_auth = "1f782a60-8e66-49a8-b154-bd303a663302"
def git_auth = "16932e0a-d8e8-4d6a-a07e-0adee8aa0dd6"

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

        stage('代码编译'){
           steps {
             sh """
                pwd
                ls
                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 lizhenliang
                    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 """
              docker rm -f tomcat-java-demo |true
              docker container run -d --name tomcat-java-demo -p 88:8080 ${image_name}
              """
            }
        }
    }
}

访问

http://192.168.153.27:88/
上一篇下一篇

猜你喜欢

热点阅读