logo头像

分享技术,品味人生

【解决方案】之jenkins+gitlab+docker

0 补充

  • 磁盘空间不足的简单扩容根目录办法
# https://www.jianshu.com/p/0d5afb8cc3b5
fdisk /dev/sda 增加分区, 以此输入p、n、p、w, 重启

lvm
pvcreate /dev/sda3
vgextend centos /dev/sda3
lvextend -L +79.9G /dev/mapper/centos-root
pvdisplay
quit
xfs_growfs /dev/mapper/centos-root

一、docker 环境安装

docker-ce 需要内核3.10以上版本,否则安装不成功

  • 克隆虚拟机模板, 设置IP为192.168.20.150 ![[虚拟机安装#一、克隆安装]]
  • 设置阿里云的源,安装docker-ce
cd /etc/yum.repos.d/
rename .repo .repbak ./*

wget -O /etc/yum.repos.d/aliyun-centos7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/aliyun-centos-docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum clean all
yum makecache fast
yum update -y
yum repolist


yum install -y yum-utils device-mapper-persistent-data lvm2
yum install -y docker-ce

systemctl stop firewalld
systemctl disable firewalld
systemctl enable docker
systemctl start docker
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://6yga1re5.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
docker --version
  • 安装docker-compose

docker-compose参考了daocloud的加速器

DaoCloud/docker-mirror: docker hub mirror, Docker镜像加速器 (github.com)

curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

docker 测试验证

  • hello linbaba
docker pull nginx:stable
docker run -it --rm -d -p 8081:80 --name web -d nginx:stable


mkdir -p /usr/local/docker/nginx_docker/html
echo "<center>hello linbaba</center>" > /usr/local/docker/nginx_docker/html/index.html

docker run -it --rm --name web\
       -v /usr/local/docker/nginx_docker/html:/usr/share/nginx/html \
       -p 8081:80 \
       -d nginx:stable

docker stop web
  • Dockerfile
# prepare
docker pull nginx:stable


mkdir -p /usr/local/docker/nginx_docker/html
cd /usr/local/docker/nginx_docker/
echo "<center>hello linbaba</center>" > /usr/local/docker/nginx_docker/html/index.html

tee Dockerfile <<-'EOF'
FROM nginx:stable
MAINTAINER linzhihui <linzhihui@hotmail.com>
COPY ./html/index.html /usr/share/nginx/html
EOF

docker build -t mynginx:v1.0.1 .
docker tag mynginx:v1.0.1 mynginx:latest

docker run -it --rm --name web\
       -p 8081:80 \
       -d mynginx:latest

docker stop web
  • compose
mkdir -p /usr/local/docker/nginx_docker/html

echo "<center>hello linbaba2</center>" > /usr/local/docker/nginx_docker/html/index.html

tee /usr/local/docker/nginx_docker/docker-compose.yml <<-'EOF'
version: "3.1"
services:
  nginx:
    image: nginx
    volumes:
      - ./html:/usr/share/nginx/html
    ports:
      - "8082:80"
    environment:
      - NGINX_HOST=foobar.com
      - NGINX_PORT=80
    container_name: nginx
EOF

cd /usr/local/docker/nginx_docker/

docker-compose up -d  # -d后台启动
docker-compose down # 停止容器并移除

docker-compose stop  # 停止
docker-compose start # 启动
docker-compose restart # 重启
  • Dockerfile和compose组合使用
- path
~~~CONSOLE
[root@docker1 docker]# tree
.
├── nginx_docker
│   ├── build.sh
│   ├── Dockerfile
│   └── html
│       └── index.html
└── test1_compose
    └── docker-compose.yml
~~~

- build.sh
~~~shell
#!/bin/bash
docker build -t mynginx:v1.0.2 .
docker tag mynginx:v1.0.2 mynginx:latest
~~~

- Dockerfile
~~~Dockerfile
FROM nginx:stable
MAINTAINER linzhihui <linzhihui@hotmail.com>
COPY ./html/index.html /usr/share/nginx/html
~~~

- docker-compose.yaml
~~~YAML
version: "3.1"
services:
  nginx:
    image: mynginx:latest
    volumes:
      - ./html:/usr/share/nginx/html
    ports:
      - "8080:80"
    environment:
      - NGINX_HOST=foobar.com
      - NGINX_PORT=80
    container_name: nginx
~~~

二、java设置

  • pc/maven

pc/idea

从51job下载到了最新的IntelliJ IDEA 2021.2.2 旗舰版

  • 破解通过添加plugin第三方仓库 http://plugins.zhile.io
  • 添加插件 IDE Eval Reset
  • 激活30天(每月循环操作,但可以勾选默认启动激活省去这个事):
    • Click Help or Get Help -> Eval Reset menu.
    • Click Reset -> Yes button.
    • Restart your IDE.

补充:

  • 修改idea代码提示快捷键为 Alt+/

    image-20211011140722667

  • 修改idea代码提醒忽略大小写

    image-20211011140751333

  • 添加yaml插件,方便application.yml文件编写

image-20211011140837231

  • 修正maven为alibaba源+本地仓加速
 <?xml version="1.0" encoding="UTF-8"?>  
 <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"   
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
           xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">  
   <mirrors>  
     <mirror>  
         <!--This sends everything else to /public -->  
         <id>nexus-aliyun</id>  
         <mirrorOf>*</mirrorOf>  
         <name>Nexus aliyun</name>  
         <url>http://maven.aliyun.com/nexus/content/groups/public</url>  
     </mirror>  
   </mirrors>  
   <localRepository>d:\repository</localRepository>   
     <servers>    
         <server>    
              <id>deploymentRepo</id>    
              <username>admin</username>    
              <password>linzhihui</password>    
         </server>    
         <server>    
              <id>snapshots</id>    
              <username>admin</username>    
              <password>linzhihui</password>    
        </server>  
     </servers>    
 </settings>   

image-20220426172654171

  • 更改主题为白色经典,方便查看

    image-20211012193438008

  • 添加控制台高亮插件 Grep Console
    image-20211012193501269

springBoot 测试

  • 新建spring initializr工程,选择jdk8, sping/web
  • 添加application平级下的controller.TestController.java
package com.example.demo.controller;  
  
import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.bind.annotation.RestController;  
  
@RestController  
public class TestController {  
  
    @GetMapping("/test")  
    public String test(){  
        return "hello springboot";  
    }  
}
  • 右上角bug启动,web访问
    image-20220426173445705

三、gitlab-container

mkdir -p /usr/local/docker/gitlab_docker
cd /usr/local/docker/gitlab_docker
tee docker-compose.yml <<-'EOF'
version: '3.1'
services:
  gitlab:
    image: 'gitlab/gitlab-ce:latest'
    container_name: gitlab
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.20.151:8929'
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
    ports:
      - '8929:8929'
      - '2224:2224'
    volumes:
      - './config:/etc/gitlab'
      - './logs:/var/log/gitlab'
      - './data:/var/opt/gitlab'
EOF

docker-compose up -d
docker-compose logs -f
docker exec -it gitlab bash
# 登录页面修改默认密码
docker exec -it gitlab cat /etc/gitlab/initial_root_password
  • 修改密码, root/password

java工程提交gitLab

  • gitlab上创建项目,设为public,默认不创建readme
    image-20220426182311706
  • idea控制台执行gitlab的声明账号信息
git config --global user.name "linzh"
git config --global user.email "linzhihui@hotmail.com"
  • idea对工程初始化git仓库
    image-20220426182322286

  • idea将项目提交本地仓库
    image-20220426182329494

  • idea将项目推到gitlab上
    image-20220426182335394

  • 点击origin设置远端git地址
    image-20220426182340583

  • 输入gitlab的账号密码
    image-20220426182345405

  • gitlab上检查代码正确提交上来了!
    image-20220426182350985

四、jenkins-container

4.1、jenkins安装配置

  • 版本选择官网最新推荐的lts版本
docker pull jenkins/jenkins:2.319.1-lts

mkdir -p /usr/local/docker/jenkins_docker/data
cd /usr/local/docker/jenkins_docker
chmod -R 777 data

tee docker-compose.yml <<-'EOF'
version: '3.1'
services:
  jenkins:
    image: 'jenkins/jenkins:2.319.1-lts'
    container_name: jenkins
    ports:
      - '8080:8080'
      - '50000:50000'
    volumes:
      - './data:/var/jenkins_home'
EOF

docker-compose up -d
docker-compose logs -f
# 查看密码,登录页面安装插件
docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
  • 修改密码, admin/password
  • 安装git parameter和publish over ssh,用于gitlab操作和远程ssh操作
    image-20220426200413361

容器安装jdk和maven客户端

  • 宿主机下载app、解压、改名,拷贝到容器的挂载目录并授权
cd
wget https://dlcdn.apache.org/maven/maven-3/3.8.5/binaries/apache-maven-3.8.5-bin.tar.gz
wget https://github.com/frekele/oracle-java/releases/download/8u212-b10/jdk-8u212-linux-x64.tar.gz
tar xvf apache-maven-3.8.5-bin.tar.gz
tar xvf jdk-8u212-linux-x64.tar.gz
mv apache-maven-3.8.5 maven
mv jdk1.8.0_212/ jdk

mv maven jdk /usr/local/docker/jenkins_docker/data/
chown -R 1000:1000 /usr/local/docker/jenkins_docker/data/maven
chown -R 1000:1000 /usr/local/docker/jenkins_docker/data/jdk
  • 配置maven的阿里云镜像和jdk编译配置
vim /usr/local/docker/jenkins_docker/data/maven/conf/settings.xml
<!--search maven的阿里云镜像、maven jdk8 setting.xml -->
    <mirror>
      <id>aliyunmaven</id>
      <mirrorOf>*</mirrorOf>
      <name>阿里云公共仓库</name>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>

    <profile>
      <id>jdk8</id>
      <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
      </activation>
      <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
      </properties>
    </profile> 

  <activeProfiles>
    <activeProfile>jdk8</activeProfile>
  </activeProfiles>
  • jenkins管理端、全局工具配置添加jdk和maven
    image-20220426215933566

image-20220426215942270

  • jenkins管理端、系统设置,添加宿主机,用于maven打包后推送封装镜像,后续可以考虑迁移到独立测试主机!
    image-20220426220002141

4.2、jenkins/CI过程

  • 操作步骤

    1. jenkins 调通gitlab,尝试==某分支最新代码==拉取
    2. maven打包
    3. 将war/jar拷贝到远程机器
    4. 在远程机器进行构建

jenkins调通gitlab

  • 新建item

image-20220426214324985

  • 添加任务名称,选择自由格式
    image-20220426214333983

  • 添加git仓库
    image-20220426214339663

  • 保存后查看控制台日志
    image-20220426214345265

  • 根据日志路径查看代码生成
    image-20220426214350967

jenkins用顶层maven打包

  • 修改任务配置,添加构建步骤
    image-20220426221704768

  • 设置maven顶层配置执行清理、打包并跳过测试
    image-20220426221730909

  • 检查workspace目录生成情况
    image-20220426221927776

jenkins拷贝jar到远程服务器

  • 添加构建后操作
    image-20220426222003552

  • 拷贝jar
    image-20220426222015404

image-20220426222230571

jenkns远端执行镜像打包

  • pom设置固定的jar名称,方便封装
  
<build>  
    <finalName>demo</finalName> 
    ……
</build>
  • 添加Dockerfile
FROM daocloud.io/library/java:8u40-jdk  
COPY demo.jar /usr/local/  
WORKDIR /usr/local/  
CMD java -jar demo.jar
  • 添加docker-compose.yaml
version: '3.1'  
services:  
  demo:  
    build:  
      context: ./  
      dockerfile: Dockerfile  
    image: demo:v1.0.0  
    container_name: demo  
    ports:  
      - 8081:8080
  • 配置jenkins构建后操作
    image-20220426225116965
cd /usr/local/test/docker
mv ../target/*jar ./
docker-compose down
docker-compose up -d --build
docker image prune -f
  • 测试

    查看jenkin构建日志ok、web访问也ok
    image-20220426225155445

4.3、jenkins/CD过程

  • 操作步骤

    1. ==主干指定TAG版本代码==拉取
    2. maven打包
    3. 将war/jar拷贝到远程机器
    4. 在远程机器进行替换配置、构建、生成镜像
    5. 镜像提交到仓库
    6. k8s对最新镜像进行编排

jenkins 按tag做cd

  • jenkins复制原来ci任务,为cd
    image-20220427094459460

  • 任务设置属性为依赖参数,并添加git参数
    image-20220427094515642

  • 给git参数选择属性,设置别名,用于构建时的分支切换
    image-20220427094523636

  • 构建阶段添加shell脚本,先进行版本切换
    image-20220427094532202

  • gitlab上对最新代码打上tag,用于后面的jenkins快速切换
    image-20220427094540638

image-20220427094630528

jenkins 按tag做cd,并独立image

- docker-compose.yaml
~~~yaml
version: '3.1'  
services:  
  demo:  
    build:  
      context: ./  
      dockerfile: Dockerfile  
    image: demo:${demoTag}  
    container_name: demo  
    ports:  
      - 8081:8080
~~~

- .env
~~~CONSOLE
# 默认版本号,不过会被jenkins的手选tag最终替代
demoTag=v2.0.5
~~~ 

- jenkins/构建后操作脚本
~~~shell
cd /usr/local/test/docker
mv ../target/*jar ./
echo "demoTag=$demoProjectTag" > ".env"
docker-compose down
docker-compose up -d --build 
docker image prune -f
~~~

image-20220427105015575

五、sonarqube质检

5.1、sonar安装配置

# sonarqueb已移除mysql支持,对postgres用最新即可
docker pull postgres:latest

# 版本来源官网推荐的稳定社区版
docker pull sonarqube:8.9.8-community

mkdir -p /usr/local/docker/sonarqube_docker
cd /usr/local/docker/sonarqube_docker
tee docker-compose.yml <<-'EOF'
version: '3.1'
services:
  db:
    image: 'postgres:latest'
    container_name: db
    ports:
      - '5432:5432'
    networks:
      - 'sonarnet'
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
  sonarqube:
    image: 'sonarqube:8.9.8-community'
    container_name: sonarqube
    depends_on:
      - 'db'
    ports:
      - '9000:9000'
    networks:
      - 'sonarnet'
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
networks:
  sonarnet:
    driver: bridge
EOF

 

echo "vm.max_map_count = 262144" >> /etc/sysctl.conf
sysctl -p

docker-compose up -d
docker-compose logs -f




# web登录9000口,默认账号密码都是admin,修改为 admin/password

# web/Administration/Marketplace 添加chinese,方便阅读代码建议

5.2、pc/idea质检测试

#idea用到的增加maven的setting.xml配置
<settings>
    <profiles>
        <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <sonar.login>admin</sonar.login>
                <sonar.password>password</sonar.password>
                <sonar.host.url>http://192.168.20.151:9000</sonar.host.url>
            </properties>
        </profile>
     </profiles>
</settings>

# 在idea的terminal中执行 mvn sonar:sonar 即可进行质检,报告在sonarqube网站查看即可

image-20220427154348144

5.3、linux/scanner-li质检测试

  • gg 搜索sonar-scanner,进入github项目,从文档中找到linux-64的下载路径,github上只有源码
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.7.0.2747-linux.zip
yum install -y unzip
unzip sonar-scanner-cli-4.7.0.2747-linux.zip
mv sonar-scanner-4.7.0.2747-linux/ sonar-scanner
tee /root/sonar-scanner/conf/sonar-scanner.properties <<-'EOF'
#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here

#----- Default SonarQube server
sonar.host.url=http://192.168.20.151:9000

#----- Default source code encoding
sonar.sourceEncoding=UTF-8
EOF

mv ~/sonar-scanner /usr/local/docker/jenkins_docker/data/
cd /usr/local/docker/jenkins_docker/data/workspace/demoProject-cd

/usr/local/docker/jenkins_docker/data/sonar-scanner/bin/sonar-scanner \
    -Dsonar.sources=./ \
    -Dsonar.projectname=demo \
    -Dsonar.login=d601eb06a3aea547095ad9a1455033439062eef0 \
    -Dsonar.projectKey=linux-scanner-test \
    -Dsonar.java.binaries=./target/

5.4、jenkins集成质检

  • jenkins 增加 sonarqube scanner 插件

image-20220427163228092

  • 系统设置,添加sonarqube服务器地址,首次添加无法录入密码,需保存后再次进入修改!

image-20220427163247673

image-20220427163253152

  • 全局设置,添加sonar-scanner插件地址

image-20220427163240449

  • 任务设置,在构建环节最后面,添加scanner任务

image-20220427163303962

image-20220427163308952

sonar.sources=./  
sonar.projectname=${JOB_NAME}  
sonar.projectKey=${JOB_NAME}  
sonar.java.binaries=./target

image-20220427163423041

六、Habor仓库

docker的仓库是默认registry,vm家的habor功能更强大和主流

  • gg搜索gohabor,从官网进入github下载离线tgz包

6.1、Habor安装配置

tar zxvf harbor-offline-installer-v2.5.0.tgz -C /usr/local/
/usr/local/harbor/
cp harbor.yml.tmpl harbor.yml

# 修改hostname和端口,并注释掉https和证书
./install.sh 

# web访问 admin/Harbor12345, 修改密码,添加项目repo公开仓库

6.2、linux/docker宿主机上传、下载测试

tee /etc/docker/daemon.json <<-'EOF'
{
  "insecure-registries": ["192.168.20.151:80"]
}
EOF
systemctl restart docker
cd /usr/local/harbor
docker-compose up -d

docker tag demo:v1.0.0 192.168.20.151:80/repo/demo:v1.0.0
docker login -u admin -p Harbor12345 192.168.20.151:80
docker push 192.168.20.151:80/repo/demo:v1.0.0

# 删除本地,再从网络拉取
docker rmi 0ace52fd71b4 -f
docker pull 192.168.20.151:80/repo/demo:v1.0.0

6.3、整合jenkins-整合宿主机docker、打包上传镜像

cd /var/run/
chown root:root docker.sock
chmod o+rw docker.sock

# 修改compose文件,增加3个docker文件支持,方便使用宿主机进行docker镜像打包
cd /usr/local/docker/jenkins_docker
tee docker-compose.yml <<-'EOF'
version: '3.1'
services:
  jenkins:
    image: 'jenkins/jenkins:2.319.1-lts'
    container_name: jenkins
    ports:
      - '8080:8080'
      - '50000:50000'
    volumes:
      - './data:/var/jenkins_home'
      - '/var/run/docker.sock:/var/run/docker.sock'
      - '/usr/bin/docker:/usr/bin/docker'
      - '/etc/docker/daemon.json:/etc/docker/daemon.json'
EOF

docker-compose up -d
docker exec -it jenkins bash
# 检查docker是否整合成功
docker version

image-20220428092907724

# 可以去除构建后操作和compose文件,在构建成功后,添加以下shell

mv target/*.jar docker/
docker build -t mytest:$demoProjectTag docker/
docker login -u admin -p Harbor12345 192.168.20.151:80
docker tag mytest:$demoProjectTag 192.168.20.151:80/repo/mytest:$demoProjectTag
docker push 192.168.20.151:80/repo/mytest:$demoProjectTag

6.4、整合jenkins-通知、下载镜像

  • 准备shell脚本,并手工测试
mkdir /usr/local/test
cd /usr/local/test
tee deploy.sh <<-'EOF'
#!/bin/bash
harbor_addr=$1
harbor_repo=$2
project=$3
version=$4
host_port=$5
container_port=$6

imageName=$harbor_addr/$harbor_repo/$project:$version
echo $imageName

containerId=`docker ps -a|grep ${project} | awk '{print $1}'`
echo $containerId

if [ "$containerId" != "" ] ; then
  docker stop $containerId
  docker rm $containerId
fi

tag=`docker images |grep ${project} | awk '{print $2}'`

if [[ "$tag" =~ "$version" ]] ; then
  docker rmi $imageName
fi

docker login -u admin -p Harbor12345 $harbor_addr
docker pull $imageName
docker run -d -p $host_port:$container_port --name $project $imageName

echo "SUCCESS"
EOF

chmod +x deploy.sh

./deploy.sh 192.168.20.151:80 repo demo v2.0.0 8081 8080
  • 整合jenkins, 添加构造后的操作、端口参数,便于日常调整
    image-20220428102539526
    image-20220428102600718
/usr/local/test/deploy.sh 192.168.20.151:80 repo demo $demoProjectTag $host_port $container_port

6.5、整合jenkins-发送webhook到dingtalk/微信

  • 企业微信
    • 先拉两人建群聊,添加机器人,获得webhook地址,及使用帮助
    • jenkins 安装qy wechat插件
    • 在构建后添加企业微信通知接口,pipeline方式下面有,比较麻烦
  • 钉钉
    • 基本类似企业微信,pipiline效果看上去还可以,具体未尝试,可参考哔哩哔哩_bilibili
  • 微信
    • 无webhook接口,不过可借助第三方,搜索pushplus

七、jenkins流水线作业

  • 新建pipeline/流水线任务
    • 添加参数,比如git/TAG,端口号、webhook地址等
    • 可以直接添加pipeline脚本,或用scm,调用gitlab根目录下的Jenkinsfile文件(推荐!)
    • jenkinsfile格式,可以用生成器将之前的脚本搬过来, 直接在gitlab上添加、修改即可!
// Jenkinsfile
pipeline {
    // 指定任务在哪个集群节点中执行
    agent any
    
    //
    environment {
        key = '[${currentBuild.durationString}]'
    }
    stages {
        stage('拉取git仓库代码') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '${demoProjectTag}']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.20.151:8929/root/demo.git']]])
        sh 'git checkout $demoProjectTag'
            }
        }
        stage('通过maven构建项目') {
            steps {
                sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
            }
        }
        stage('通过sonarqube做代码质检') {
            steps {
                sh '''/var/jenkins_home/sonar-scanner/bin/sonar-scanner \\
                        -Dsonar.sources=./ \\
                        -Dsonar.projectname=demo \\
                        -Dsonar.login=d601eb06a3aea547095ad9a1455033439062eef0 \\
                        -Dsonar.projectKey=${JOB_NAME} \\
                        -Dsonar.java.binaries=./target/'''
            }
        }
        stage('通过docker制作自定义镜像') {
            steps {
                sh '''mv target/*.jar docker/
                    docker build -t demo:$demoProjectTag docker/
                    docker login -u admin -p Harbor12345 192.168.20.151:80
                    docker tag demo:$demoProjectTag 192.168.20.151:80/repo/demo:$demoProjectTag
                    docker push 192.168.20.151:80/repo/demo:$demoProjectTag'''
            }
        }
        stage('将自定义镜像推送到harbor') {
            steps {
                sh '''
                    docker login -u admin -p Harbor12345 192.168.20.151:80
                    docker tag demo:$demoProjectTag 192.168.20.151:80/repo/demo:$demoProjectTag
                    docker push 192.168.20.151:80/repo/demo:$demoProjectTag
                '''
            }
        }
        stage('通过publish over ssh 通知目标服务器') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'test1.dev.lzh', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '/usr/local/test/deploy.sh 192.168.20.151:80 repo demo $demoProjectTag $host_port $container_port', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }
    }
    post {
        success{
            sh '/var/jenkins_home/sendMessage.sh $webhook SUCCESS $JOB_NAME $demoProjectTag $currentBuild.durationString'
        }
        failure{
            sh '/var/jenkins_home/sendMessage.sh $webhook FAILURE $JOB_NAME $demoProjectTag $currentBuild.durationString'
        }
  }
}
  • 补充企业微信的pipeline脚本,常规版块很容易使用,pipeline不像dingtalk好用
# 脚本放在jenkins的挂载目录,调用路径 /var/jenkins_home/sendMessage.sh
cd /usr/local/docker/jenkins_docker/data
tee sendMessage.sh <<-'EOF'
#!/bin/bash
WEBHOOK="$1"
TYPE="$2"
JOB_NAME="$3"
TAG="$4"
TIME="$5"

echo $TIME 

if [ "$TYPE" == "SUCCESS" ] ; then
  CONTENT="项目构建成功:${JOB_NAME}! \n> 版本:${TAG}\n> 持续时间:${TIME}"
else
  CONTENT="项目构建失败:${JOB_NAME}! >n- 版本:${TAG}\n> 持续时间:${TIME}"
fi

CONTENT='
   {
            "msgtype": "markdown",
            "markdown": {
                "content": "'$CONTENT'"
            }
   }

'

curl $WEBHOOK  -H 'Content-Type: application/json' -d "${CONTENT}"
EOF

# 附linux端测试代码
chmod +x sendMessage.sh 
./sendMessage.sh  https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=5977b028-7a64-4322-bde5-e26a6578286d SUCCESS demo V2.0.0 11111

九、好玩的应用

9.1、portainer UI

可以管理本地、远程的docker、swarm、k8s

docker run -d -p 9001:9000 --restart always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /opt/portainer:/data portainer/portainer

# admin/password 


# 添加远程管理主机, 资料来源 https://www.cnblogs.com/hutianyao/p/13539698.html

# 修改远程 Docker 的 docker.service 文件
vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

# 重启 Docker
## 重新加载配置文件
systemctl daemon-reload
## 重启服务
systemctl restart docker

9.2、oneNav

github上很不错的一键导航页面!

mkdir -p /usr/local/docker/onenav_docker
cd /usr/local/docker/onenav_docker
docker run -itd --name="onenav" -p 80:80 --restart always \
    -e USER='admin' -e PASSWORD='password' \
    -v /usr/local/docker/onenav_docker/data:/data/wwwroot/default/data \
    helloz/onenav

# 建议用BAISU主题,超级赞!

评论系统未开启,无法评论!