CI/CD——在jenkins中自动化构建与部署java项目jpress的镜像且搭建一键部署gitlab与jenkins环境

CI/CD------使用Jenkins自动化构建java项目之使用传统方式部署java web项目jpresshttps://coffeemilk.blog.csdn.net/article/details/160801605?spm=1001.2014.3001.5502

一、一键部署gitlab并启用https与域名

Git实践------GitLab服务器的部署与使用https://coffeemilk.blog.csdn.net/article/details/160722357?spm=1001.2014.3001.5502

1.1、使用docker-compose一键部署gitlab并启用https与域名

bash 复制代码
#使用docker-compose一键部署gitlab并启用https与域名
#1-创建gitlab环境目录
mkdir -p /data/gitlab/{config,data,logs,ssl}
cd /data/gitlab


#2-创建私有证书
#2.1-生成自签名证书(有效期10年,适配自己的域名【如:gitlab2.ck.com】)
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout /data/gitlab/ssl/gitlab2.ck.com.key \
-out /data/gitlab/ssl/gitlab2.ck.com.crt \
-subj "/CN=gitlab2.ck.com" \
-addext "subjectAltName=DNS:gitlab2.ck.com"

#2.2-设置证书权限
chmod 600 /data/gitlab/ssl/gitlab2.ck.com.key
chmod 644 /data/gitlab/ssl/gitlab2.ck.com.crt


#3-【docker-compose.yml】文件完整内容
version: '3.8'

services:
  gitlab:
    # 固定使用 GitLab EE 最新稳定版(非latest,生产环境推荐)
    image: gitlab/gitlab-ee:18.9.6-ee.0
    container_name: gitlab-ee
    restart: always
    hostname: gitlab2.ck.com
    privileged: true    #给高权限,避免 GitLab 初始化权限不足。
    ports:
      # HTTPS 端口
      - "443:443"
      # HTTP 端口(自动重定向到HTTPS)
      - "80:80"
      # SSH 端口(主机端口22映射容器22,避免与主机SSH冲突)
      - "22:22"
      # 容器仓库专用端口
      - "5050:5050"
    volumes:
      # 配置文件持久化
      - ./config:/etc/gitlab
      # 数据持久化(仓库、数据库等)
      - ./data:/var/opt/gitlab
      # 日志持久化
      - ./logs:/var/log/gitlab
      # 自签名证书目录
      - ./ssl:/etc/gitlab/ssl
      # 【可选加固:挂载宿主机时区文件,双重保险】
      - /etc/localtime:/etc/localtime:ro
    environment:
      # 核心:系统时区 = 上海(所有日志基础)
      TZ: Asia/Shanghai
      # 核心配置:HTTPS 域名 + 自签名证书
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://gitlab2.ck.com'
        # 启用自签名SSL证书
        nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab2.ck.com.crt"
        nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab2.ck.com.key"
        # 强制HTTP重定向到HTTPS
        nginx['redirect_http_to_https'] = true
        # 禁用Let's Encrypt,使用自签名证书
        letsencrypt['enable'] = false
        # 修复SSH克隆地址(关键:对外显示22端口)
        gitlab_rails['gitlab_shell_ssh_port'] = 22
        # ====================== 时区强制配置(日志全上海时间)======================
        timezone = "Asia/Shanghai"
        gitlab_rails['time_zone'] = "Asia/Shanghai"
        gitlab_rails['log_timezone'] = "Asia/Shanghai"
        sidekiq['log_timezone'] = "Asia/Shanghai"
        nginx['log_time_format'] = "$$time_local"
        gitlab_rails['logging_format'] = "default"
        # ==========================================================================
        # 生产环境性能优化(可根据服务器配置修改)
        puma['worker_processes'] = 2
        postgresql['shared_buffers'] = "512MB"
        redis['max_memory'] = '512MB'
        #指定后台任务并发数【并发数 ≈ 服务器 CPU 核心数 × 3 ~ 5】
        sidekiq['max_concurrency'] = 10
        # ====================== 容器镜像仓库官方优化配置 ======================
        registry['enable'] = true
        registry_external_url 'https://gitlab2.ck.com:5050'

        # 关键:GitLab 内部访问 Registry 的地址(官网强制,缺了就 0B)
        gitlab_rails['registry_api_url'] = "http://127.0.0.1:5000"
        # 通知签名密钥(官方推荐,防止上传回调失败)
        gitlab_rails['registry_notification_secret'] = SecureRandom.hex(64)

        # Registry Nginx 官方标准配置
        registry_nginx['enable'] = true
        registry_nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab2.ck.com.crt"
        registry_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab2.ck.com.key"
        registry_nginx['redirect_http_to_https'] = true
        registry_nginx['proxy_read_timeout'] = "3600"
        registry_nginx['proxy_send_timeout'] = "3600"
        registry_nginx['client_max_body_size'] = "0"
        registry_nginx['proxy_buffering'] = "off"
        registry_nginx['ssl_verify_client'] = "off"

    # 修复GitLab启动报错:共享内存不足
    shm_size: '512m'
    #生产环境资源限制(目前最高6G内存、4核cpu)
    deploy:
      resources:
        limits:
          cpus: '4'
          memory: 6G
        reservations:
          cpus: '2'
          memory: 5G

    networks:
      - gitlab_network

networks:
  gitlab_network:
    driver: bridge            
  


#4-修改linux中SSH的原有端口22为22222,并放开gitlab的端口
vi /etc/ssh/sshd_config
systemctl restart sshd
systemctl status firewalld
firewall-cmd --permanent --add-port=22222/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=5050/tcp
firewall-cmd --reload
firewall-cmd --list-port


    
#5-一键启动gitlab并查看运行状态与日志(注意:gitlab启动后,大概需要等待3分钟才能使用)
docker-compose up -d
docker-compose ps
docker-compose logs

#5.1-查看gitlab的初始密码,默认密码是root
cat ./config/initial_root_password

#5.2-可进入容器中(查看状态与主核心puma日志)
docker exec -it gitlab-ee bash
gitlab-ctl status
gitlab-ctl tail puma

#5.3-也可不用进入容器查看日志
tail -f ./logs/nginx/current
tail -f ./logs/puma/current



#6-配置gitlab的域名解析+浏览器访问gitlab

#6.1-若是使用windows系统的浏览器访问gitlab则进行如下gitlab的域名解析(如:192.168.1.38 gitlab2.ck.com)
#编辑【C:\Windows\System32\drivers\etc\hosts】文件,在该文件末尾添加【192.168.1.38 gitlab2.ck.com】

#6.2-若是linux系统则在【/etc/hosts】文件末尾添加【192.168.1.38 gitlab2.ck.com】
cat >>/etc/hosts <<EOF
192.168.1.38 gitlab2.ck.com
EOF

#6.3-在浏览器输入【gitlab的IP:192.168.1.38】即可访问

注意:使用docker-compose.yml一键部署的gitlab核心数据是在data目录下,做好定期备份!!

1.2、 gitlab的web界面中文设置与密码修改

1.2.1、 配置root用户界面显示中文

使用root管理员用户登录到gitlab的web界面中,点击界面右上角的圆形图标-->【Preferencs-->Localization-->Language(选择Chinese,Simplified-简体中文)-->Save Changes】后按下【F5】键刷新网页即可显示中文,如下图所示:

1.2.2、 修改root用户密码

使用root管理员用户登录到gitlab的web界面中,点击界面右上角的【管理员(Admin)】-->【概览】-->【用户】-->【Administrator右侧的"编辑"】-->密码下面输入【新密码、确认密码】-->【保存更改】即可,如下图所示:

二、安装部署2.346.3版的jenkins

CI/CD------使用Jenkins实现自动化部署与持续集成之jenkins的安装部署https://coffeemilk.blog.csdn.net/article/details/160737557?spm=1001.2014.3001.5502CI/CD------使用Jenkins实现自动化部署与持续集成之jenkins插件与凭据配置https://coffeemilk.blog.csdn.net/article/details/160766389?spm=1001.2014.3001.5502

注意: jenkins中安装的Blue Ocean版本1.27及其以上版本的有问题,使用不了;因此若想要完整使用Blue Ocean就需要安装2.346版本的,对应的Blue Ocean版本是1.26.0。

bash 复制代码
#一在红帽系系统离线安装jenkins所需的jdk环境(openjdk17)
#1.1-解压openjdk17的二进制包
tar -xvf java-17-openjdk-17.0.8.0.7-1.portable.jdk.el.x86_64.tar.xz
mv java-17-openjdk-17.0.8.0.7-1.portable.jdk.el.x86_64 openjdk17
mv openjdk17 /data

#1.2-编辑环境配置文件并添加openjdk21的环境变量
vi /etc/profile
#【/etc/profile】文件末尾添加如下内容
#openjdk17 enviroment
export JAVA_HOME=/data/openjdk17
export CLASSPATH=.:$JAVA_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH

#1.3-让修改的环境变量生效
source /etc/profile
 
#1.4-查看java版本信息
echo $JAVA_HOME
echo $PATH
java -version

 
 
#二、离线安装jenkins
#2.1-下载jenkins的稳定版war包(如:2.346.3)【虽然Jenkins提供了Windows、Linux、OS X等各种安装程序,但是,这些安装程序都没有war包好用】
mkdir -p /data/jenkins/data
wget https://get.jenkins.io/war-stable/2.346.3/jenkins.war -c -P /data/jenkins
cd /data/jenkins/
 
#2.2-配置jenkins的程序运行目录【JENKINS_HOME用于设置JENKINS程序的运行目录,默认是运行JENKINS用户下的.jenkins目录下。这里指定到/data/jenkins/data目录下】
vi /etc/profile
#【/etc/profile】文件末尾添加jenkins程序运行目录配置
export JENKINS_HOME=/data/jenkins/data
#添加完成后让配置生效
source /etc/profile
 
#2.3-添加防火墙的放行端口(8081)
systemctl status firewalld
firewall-cmd --zone=public --add-port=8081/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-port
 
#2.4-运行jenkins的war包;然后在浏览器输入【http://ip:8081】
#2.4.1-配置jenkins为systemd服务,实现开机自启;根据web界面提示获取初始密码【cat /data/jenkins/data/secrets/initialAdminPassword】
vi /etc/systemd/system/jenkins.service
#【/etc/systemd/system/jenkins.service】文件的完整内容如下:
[Unit]
Description=Jenkins Service
After=network.target

[Service]
# 绝对路径Java + 正确指定JENKINS_HOME
ExecStart=/data/openjdk17/bin/java -jar -DJENKINS_HOME=/data/jenkins/data /data/jenkins/jenkins-2.346.3.war --httpPort=8081

# 重启策略
Restart=always
RestartSec=3

# 用户
User=root
Group=root

# 工作目录(和环境变量统一)
WorkingDirectory=/data/jenkins/data

[Install]
WantedBy=multi-user.target
 
#2.4.2设置开机自启
systemctl daemon-reload
systemctl enable jenkins
systemctl start jenkins

#2.4.3-在浏览器输入【http://ip:8081】即可访问到jenkins的web界面进行配置安装


#2.5-由于jenkins2.246.3是老版本的,因此在安装插件时会报错,因此需要将该版本的对应插件解压到自己目录中
cd /data/jenkins/data
mv plugins plugins.old
cp data/jenkins/plugins.tar.gz .
tar -zxvf plugins.tar.gz
systemctl restart jenkins

三、 在jenkins中使用Blue Ocean方式部署java项目jpress并制作docker镜像

Docker容器实践------docker的安装与加速器配置https://coffeemilk.blog.csdn.net/article/details/160057920?spm=1001.2014.3001.5502

3.1、使用蓝海(Blue Ocean)创建流水线

登录到jenkins的web管理后台,点击左边的【打开 Blue Ocean】-->【流水线】-->【创建流水线】进入到流水线界面进行如下操作:

操作步骤 操作内容
1 在远程仓库中创建一个名为【jenkinsfile】的空白项目,然后复制该项目的SSH链接
2 在jenkins的【创建流水线界面】根据项目源码所在仓库情况选择对应的类型(如:Git)
3 在jenkins的【创建流水线界面】粘贴从远程仓库复制的【jenkinsfile】项目的SSH链接
4 将【创建流水线界面】自动生成的rsa公钥内容复制一份,添加到可以操作【jenkinsfile】项目用户下【偏好设置-->SSH Keys-->添加新密钥】
5 点击【创建流水线界面】最底部的【创建流水线】按钮完成创建

解决使用Blue Ocean创建流水线,且输入了Git仓库地址后,已经将显示的【ssh-rsa xxx】公钥内容复制一份添加到gitlab的SSH keys中授权,但是最后点击【创建流水线】时报错"仓库URL-请输入一个有效的URL"问题,解决方法如下:

bash 复制代码
#点击【创建流水线】按钮时报错"仓库URL-请输入一个有效的URL"错误的解决方法
#1-进入jenkins所在服务器配置git对应域名的解析
cat >>/etc/hosts <<EOF
192.168.1.38 gitlab2.ck.com
EOF


#2-在jenkins所在服务器生成密钥对
#2.1-在指定路径新生成指定名称的密钥对
ssh-keygen -t ed25519
/root/.ssh/id_ed25519_gitlab
#由于没有使用默认的文件名称,因此需要配置SSH
vi ~/.ssh/config
#【~/.ssh/config】文件的内容
Host gitlab2.ck.com
  HostName gitlab2.ck.com
  User git
  Port 22
  IdentityFile ~/.ssh/id_ed25519_gitlab
  IdentitiesOnly yes
 
#2.2-查看密钥对的公钥信息
cat ~/.ssh/id_ed25519_gitlab.pub


#3-将查看到的公钥信息配置到【gitlab2.ck.com】的SSH Keys中

#4-测试 Git 仓库连接(若结果显示"Welcome to GitLab, @root!"则表示配置成功了)
ssh -T git@gitlab2.ck.com
#4.1-注意:若执行【ssh -T git@gitlab2.ck.com】命令提示"WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED"警告,则执行如下命令
#清除旧密钥
ssh-keygen -R gitlab2.ck.com
ssh -T git@gitlab2.ck.com

3.2、使用蓝海(Blue Ocean)创建部署jpress流水线

在蓝海创建好的流水线可视化流水线编辑器中:进行如下操作:

序号 蓝海编辑器的操作步骤 说明
1 点击【Start】配置全局变量 在蓝海编辑器中点击【Start】然后在右侧弹窗中点击加号(+)添加三个变量及其对应的值内容: 1. base_version v1 2. jpress_version v1.1 3. imagepasswd coffeemilk.blog.csdn.net
2 克隆源码并编译 点击【start】后的【加号(+)】创建对应的流程(如:git clone code),然后点击右侧的【添加步骤】按钮即可选择对应的步骤类型: 1. 先配置工作空间(Allocate workspace),然后指定Dir(如:/data/jenkins/work1); 2. 选择Git拉取项目源码配置url【git@gitlab2.ck.com:ops/jpress.git】Branch【master】; 3. 选择"Shell Script"编译项目,编译命令是【/usr/local/maven/bin/mvn clean install -D maven.test.skip=true】(注意:这里有可能会出现使用jenkins自带的jre环境,而不是我们全局配置的jdk环境导致报错,因此最稳妥的方法是,手动指定jdk环境) bash #解决编译项目报错'[ERROR] No compiler is provided in this environment. #Perhaps you are running on a JRE rather than a JDK?' #(本环境中未提供编译器。或许您运行的是JRE而非JDK?) #针对这个项目编译报错则可以直接指定JDK环境 export JAVA_HOME=/data/openjdk17 export PATH=$JAVA_HOME/bin:$PATH
3 创建dockerfile 点击【git clone code】后的【加号(+)】创建对应的流程(如:create dockerfile ),然后点击右侧的【添加步骤】按钮即可选择对应的步骤类型: 1. 先配置工作空间(Allocate workspace),然后指定Dir(如:/data/jenkins/work1); 2. 接着在工作空间下子流程点击【添加步骤】选择"Shell Script"实现创建dockerfile。 bash #【create dockerfile / Shell Script】内容如下 cd docker docker build . -t jpress-base:${base_version} -f ./Dockerfile.base cd .. cat > dockerfile_jpress << EOF FROM jpress-base:${base_version} LABEL maintainer="coffeemilk" WORKDIR /opt/jpress COPY ./starter/target/starter-4.0/ /opt/jpress/ COPY ./docker/files/jpress.sh /opt/jpress/jpress1.sh COPY ./docker/files/jboot.properties /opt/jpress/config/jboot.properties RUN chmod +x /opt/jpress/jpress1.sh && \ rm -rf /opt/jpress/jpress.bat && \ rm -rf /opt/jpress/config/undertow.txt && \ rm -rf /opt/jpress/config/install.lock EXPOSE 8080 CMD ["/opt/jpress/jpress1.sh", "start"] EOF export DOCKER_BUILDKIT=0 docker build -t gitlab2.ck.com:5050/ops/jpress:${jpress_version} -f dockerfile_jpress . 注意:在执行构建镜像前,若该镜像需上传到到gitlab的容器镜像仓库中,则需要【#强制关闭 OCI 格式,让镜像变成 GitLab 兼容格式 export DOCKER_BUILDKIT=0】
4 dockerfile检查 点击【create dockerfile】后的【加号(+)】创建对应的流程(如:dockerfile check ),然后点击右侧的【添加步骤】按钮即可选择对应的步骤类型: 选择"Shell Script"并输入内容 bash #【dockerfile check / Shell Script】内容 if [ $GIT_PREVIOUS_SUCCESSFUL_COMMIT == $GIT_COMMIT ];then echo "skip build" exit 0 fi
5 推送镜像 点击【dockerfile check】后的【加号(+)】创建对应的流程(如:push images ),然后点击右侧的【添加步骤】按钮即可选择对应的步骤类型: 1、首先要在jenkins所在服务器配置自签名证书 ```bash #在jenkins所属服务器上配置自签名证书 #1-下载 GitLab 证书到系统目录 openssl s_client -connect gitlab2.ck.com:443 </dev/null 2>/dev/null

四、使用ssh插件实现jpress的docker镜像部署

登录jenkins的web管理后台,然后点击右上角的【+ 新建Item】-->输入任务名称【deploy-dockerjpress】并选择【Freestyle project】后进入流程配置界面:

序号 流程内容 说明
1 General 在"通用"里面可进行: 描述:填写流程的说明(如:部署jpress的镜像到应用服务器中); 勾选【This project is parameterized】(参数化构建过程)-->【Muti-line String Parameter】(多行字符串参数)【名称:jpressversion】【默认值:v1.0】
2 构建 1. 先配置ssh远程主机(即:需要从jenkins直接使用ssh连接到应用服务器)【在jenkins所在服务器生成密钥对,且与需要部署应用的服务器上配置公钥】; 2. 就可以在jenkins的【Manage Jenkins】-->【系统配置】界面最底部的【Publish over SSH】模块下配置【先配置jenkins所在服务器上的私钥路径"Path to key"的值"/root/.ssh/id_ed25519"】-->【然后在SSH Servers】下面添加需要部署应用的服务器信息【Name表示创建的任务下构建环境时显示的名称(主要是为了方便识别,可随意取名)-->Hostname表示主机IP-->Username表示连接主机的用户名称(如:root)-->Remote Directory表示在需要部署服务器部署的路径(如:/usr/local)-->若需要部署应用服务器的SSH端口不是默认的22则需要在"高级"下配置对应的端口信息】如下图所示; 3. 在【构建】流程下选择"增加构建步骤"-->【Execute shell script on remote host using ssh】进行配置,如下图所示:
3 执行流程 在Jenkins的web管理后台上点击【deploy-dockerjpress】任务进入任务面板后,点击右侧的【Build with Parameters】-->输入jpressversion的版本(如:v1.0)-->点击【开始构建】等待构建完成即可,如下图所示

在jenkins的全局配置中配置ssh直连的应用主机(192.168.1.30):

bash 复制代码
#在jenkins所在的服务器上生成密钥对
#1-生成默认密钥对命令;密钥对的路径是【/root/.ssh/】,【id_ed25519】是私钥文件;【id_ed25519.pub】是公钥文件
ssh-keygen -t ed25519
 
#2-将公钥添加到需ssh免密登录的远程服务器上
#将公钥添加到需ssh免密登录的远程服务器上
ssh-copy-id -i /root/.ssh/id_rsa.pub user@remote-hostIP
 
#若远程Linux服务器的SSH端口不是默认的22则需要指定端口号【-p 端口】
ssh-copy-id -i /root/.ssh/id_rsa.pub -p 端口号 user@remote-hostIP
 
#如:我这里生成密钥对的服务器IP是【192.168.1.11】,还需要ssh免密登录的服务器IP有【192.168.1.30】(给root与ck用户都配置了公钥实现免密登录)
ssh-copy-id -i /root/.ssh/id_ed25519.pub -p 22222 root@192.168.1.30
 
ssh-copy-id -i /root/.ssh/id_ed25519.pub -p 22222 ck@192.168.1.30
 
bash 复制代码
#在需要安装jpress的docker镜像shell脚本内容如下:
cd /data1
test -d compose || mkdir compose
cd compose

cat > docker-compose.yml << EOF
version: '3.1'

services:
  db:
    image: mysql:5.7
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: jpress
      MYSQL_DATABASE: jpress
      MYSQL_USER: jpress
      MYSQL_PASSWORD: jpress
    volumes:
      - "./docker_volumes/mysql:/var/lib/mysql"

  jpress:
    depends_on:
      - db
    links:
      - db
    image: gitlab2.ck.com:5050/ops/jpress:$jpressversion
    ports:
      - "8000:8000"
    ulimits:
      nofile:
         soft: 65536
         hard: 65536
    restart: always
    environment:
      TZ: Asia/Shanghai
      JPRESS_DB_HOST: db
      JPRESS_DB_PORT: 3306
      JPRESS_DB_NAME: jpress
      JPRESS_DB_USER: jpress
      JPRESS_DB_PASSWORD: jpress
    volumes:
      - "./docker_volumes/webapp/attachment:/opt/jpress/webapp/attachment"
      - "./docker_volumes/webapp/addons:/opt/jpress/webapp/addons"
      - "./docker_volumes/webapp/WEB-INF/addons:/opt/jpress/webapp/WEB-INF/addons"
      - "./docker_volumes/webapp/wp-content:/opt/jpress/webapp/wp-content"
      - "./docker_volumes/webapp/templates/dockers:/opt/jpress/webapp/templates/dockers"
   
EOF

docker-compose  down
docker-compose  up -d

注意:当我们首次在jenkins中配置好使用ssh插件实现jpress的docker镜像部署流程并开始构建时,可能会报错"Image gitlab2.ck.com:5050/ops/jpress:v1.0 Pulling

Image mysql:5.7 Pulling

Image gitlab2.ck.com:5050/ops/jpress:v1.0 Error failed to resolve reference "gitlab2.ck.com:5050/ops/jpress:v1.0": failed to do request: Head "https://gitlab2.ck.com:5050/v2/ops/jpress/manifests/v1.0": tls: failed to verify certificate: x509: certificate signed by unknown authority

Image mysql:5.7 Interrupted

Error response from daemon: failed to resolve reference "gitlab2.ck.com:5050/ops/jpress:v1.0": failed to do request: Head "https://gitlab2.ck.com:5050/v2/ops/jpress/manifests/v1.0": tls: failed to verify certificate: x509: certificate signed by unknown authority"

这是由于我们从【gitlab2.ck.com:5050/ops/jpress:v1.0】拉取容器镜像的仓库使用了自签名的证书,被部署该镜像容器的服务器的docker不承认我们仓库的自签名证书,有两种方法可以解决:

《1》给被部署该镜像容器的服务器添加该仓库的证书支持(推荐);

《2》将远程仓库中该容器对应的项目公开(不建议);

bash 复制代码
#给被部署该镜像容器的服务器添加该仓库的证书支持
#1、下载 GitLab 证书到系统目录
openssl s_client -connect gitlab2.ck.com:443 </dev/null 2>/dev/null | openssl x509 > /etc/pki/ca-trust/source/anchors/gitlab2.ck.com.crt

#2、更新系统信任证书(核心!)
update-ca-trust

#3、同时信任 Docker 仓库
mkdir -p /etc/docker/certs.d/gitlab2.ck.com:5050
cp /etc/pki/ca-trust/source/anchors/gitlab2.ck.com.crt /etc/docker/certs.d/gitlab2.ck.com:5050/ca.crt

mkdir -p /etc/docker/certs.d/gitlab2.ck.com
cp /etc/pki/ca-trust/source/anchors/gitlab2.ck.com.crt /etc/docker/certs.d/gitlab2.ck.com/ca.crt

#4、重启 Docker
systemctl restart docker

到这里恭喜你,在jenkins使用ssh插件实现jpress的docker镜像自动化部署成功!

相关推荐
yulingfeng592 小时前
Elasticsearch 分词器安装(IK+拼音)
大数据·elasticsearch·jenkins
Cory.眼3 小时前
AI写CI/CD脚本:Gemini实战指南
ci/cd
海生南梦1 天前
jenkins的groovy沙盒配置
jenkins
GISer_Jing1 天前
全栈实战:分支管理到CI/CD全流程
运维·前端·ci/cd·github·devops
yulingfeng591 天前
Elasticsearch 7.x 新手指南
大数据·elasticsearch·jenkins
GISer_Jing1 天前
现代全栈工程化实战:Git+Docker+Vercel+CI/CD
git·ci/cd·docker
zfoo-framework1 天前
jenkins备份与还原
运维·jenkins
测试那点事儿1 天前
第8章 零基础接口自动化到 Jenkins 持续集成【云服务器安装 Docker 并部署 Jenkins】
ci/cd·自动化·jenkins
测试员周周2 天前
【免费福利】AI测试:测试技能包进阶:造数、压测、视觉回归、CI 全流程串联
开发语言·人工智能·python·功能测试·测试工具·ci/cd·测试用例