网络创始人 网站建设,无锡网络公司有哪些,wordpress用国外主题很卡,logo设计制作网文章目录 1.在Docker中创建桥接网络2.在宿主机上创建文件夹3.实现在Jenkins Docker节点内执行Docker命令4.定制官方Jenkins Docker 镜像创建一个Dockerfile文件构建docker镜像 5.运行定制镜像6.浏览器访问Jenkins7.获取管理员密码8.配置插件镜像加速9.新建Jenkins任务流水线任务… 文章目录 1.在Docker中创建桥接网络2.在宿主机上创建文件夹3.实现在Jenkins Docker节点内执行Docker命令4.定制官方Jenkins Docker 镜像创建一个Dockerfile文件构建docker镜像 5.运行定制镜像6.浏览器访问Jenkins7.获取管理员密码8.配置插件镜像加速9.新建Jenkins任务流水线任务 扩展用Docker Compose启动依赖的Mysql Redis在 Linux 上安装 Docker Composedocker-compose.yml 前提自己先安装好Docker CentOS安装Docker以及常用命令 官方文档https://www.jenkins.io/doc/book/installing/docker/
将之前的3篇内容来哦快速安装整合
Ubuntu上Jenkins自动化部署Gitee上SpringBoot项目Ubuntu上Jenkins自动化部署Gitee上VUE项目Jenkins自动化部署之流水线模式部署
使用Docker Hub 存储库中推荐的官方jenkins/jenkins镜像。此映像包含Jenkins 当前的长期支持 (LTS) 版本该版本已做好生产准备。但是该映像不包含 Docker CLI并且未与常用的 Blue Ocean 插件及其功能捆绑在一起。
1.在Docker中创建桥接网络
docker network create jenkinsDocker 网络是一种用于连接 Docker 容器的虚拟网络。这允许容器之间进行通信同时也能与外部网络进行交互。
应用场景
容器通信 当你有多个容器需要相互通信时可以将它们连接到同一个 Docker 网络。通过创建一个专用的网络容器可以使用容器名称进行通信而无需暴露真实的 IP 地址。
docker network create mynetwork
docker run --name container1 --network mynetwork myimage
docker run --name container2 --network mynetwork myimage外部访问控制 通过将容器连接到特定网络你可以更好地控制哪些容器可以与外部进行通信哪些容器被隔离在内部网络中。
docker network create internal
docker network create external# 内部容器
docker run --name internal-container --network internal internal-image# 外部容器
docker run --name external-container --network external -p 8080:80 external-image2.在宿主机上创建文件夹
# 创建Jenkins目录文件夹
mkdir -p /var/jenkins_home
# 设置权限
chmod 777 -R /var/jenkins_homemkdir -p /certs/client
chmod 777 -R /certs/client用于卷挂载在容器中保留 Jenkins 数据以便在容器重新启动时保留 Jenkins 的配置和状态。 通过将宿主机上的目录挂载到容器中容器内的数据可以持久化存储在主机上。 这种做法对于一些需要保存状态的应用程序比如数据库、持久化存储配置的应用程序等非常常见因为容器本身是临时的挂载卷可以确保数据的持久性和在容器之间的共享。 --volume /var/jenkins_home:/var/jenkins_home 选项在你的 Docker 命令中表示将主机上的 /var/jenkins_home 目录挂载到容器内部/var/jenkins_home 目录用于存储 Jenkins 的数据和配置。 3.实现在Jenkins Docker节点内执行Docker命令
# 拉取 Docker in Docker 镜像
docker image pull docker:dind
# 启动一个名为 jenkins-docker 的容器该容器包含 Docker in Docker。
# 该容器与 Jenkins 容器共享网络并设置了一些环境变量和卷以便在 Jenkins 中连接到 Docker。
docker run --name jenkins-docker --rm --detach \--privileged --network jenkins --network-alias docker \--env DOCKER_TLS_CERTDIR/certs \--volume /certs/client:/certs/client \--volume /var/jenkins_home:/var/jenkins_home \--publish 2376:2376 \docker:dind --storage-driver overlay2--name jenkins-docker给容器指定一个名称为 jenkins-docker。--rm当容器停止运行时自动删除容器。--detach在后台运行容器。--privileged授予容器特权允许它在其中运行 Docker 容器。--network jenkins将容器连接到名为 jenkins 的 Docker 网络。--network-alias docker为容器指定一个网络别名为 docker这样 Jenkins 容器可以使用这个别名连接到这个容器。--env DOCKER_TLS_CERTDIR/certs设置容器中 Docker 引擎 TLS 证书的目录。--volume /certs/client:/certs/client将主机上的目录 /certs/client 挂载到容器内部的 /certs/client用于存储 TLS 证书。--volume /var/jenkins_home:/var/jenkins_home将主机上的目录 /var/jenkins_home 挂载到容器内部的 /var/jenkins_home用于持久化存储 Jenkins 的数据和配置。--publish 2376:2376将容器的 2376 端口映射到主机的 2376 端口这是 Docker 守护进程的 TLS 端口。docker:dind使用的 Docker in Docker 镜像。--storage-driver overlay2指定 Docker 存储驱动为 overlay2。
docker:dind 是 Docker in DockerDinD的缩写它是一个特殊的 Docker 镜像设计用于在容器内运行 Docker 守护进程。这允许你在容器内部执行 Docker 命令并且该容器本身具有运行其他容器的能力实现了在容器中运行 Docker 的特性。
Docker in Docker 镜像通常用于 CI/CD持续集成/持续部署流水线中其中构建和测试需要在 Docker 容器中进行。通过在容器中运行 Docker 引擎你可以方便地创建、启动和管理其他容器实现更灵活的构建和测试环境。
4.定制官方Jenkins Docker 镜像
创建一个Dockerfile文件
更改了阿里云源的版本
# 使用了 jenkins/jenkins:2.440.1-jdk17 作为基础镜像
# 这是 Jenkins 官方提供的基于 OpenJDK 17 的 Jenkins 镜像。FROM 关键字用于指定基础镜像。
FROM jenkins/jenkins:2.440.1-jdk17
# 切换用户到 root
USER root# 安装 lsb-releaseDebian 系统中的包和 curl
# 使用 apt-get 更新包列表并安装 lsb-release。
RUN apt-get update apt-get install -y lsb-release curl# 下载 Docker GPG 密钥
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc https://mirrors.aliyun.com/docker-ce/linux/debian/gpg# 设置 Docker APT 源
# 使用阿里云的源可以根据需要选择其他镜像源
RUN echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/docker-archive-keyring.asc] https://mirrors.aliyun.com/docker-ce/linux/debian $(lsb_release -cs) stable /etc/apt/sources.list.d/docker.list# 安装 Docker CLI
RUN apt-get update apt-get install -y docker-ce-cli#将用户切换回 jenkins 用户
# USER jenkins
# 安装 Jenkins 插件
# 使用 jenkins-plugin-cli 工具安装 Jenkins 插件包括 blueocean 和 docker-workflow
# RUN jenkins-plugin-cli --plugins blueocean docker-workflowblueocean docker-workflow 这2个插件也可以启动jenkins后再安装。 这是官网命令
FROM jenkins/jenkins:2.440.1-jdk17
USER root
RUN apt-get update apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \https://download.docker.com/linux/debian/gpg
RUN echo deb [arch$(dpkg --print-architecture) \signed-by/usr/share/keyrings/docker-archive-keyring.asc] \https://download.docker.com/linux/debian \$(lsb_release -cs) stable /etc/apt/sources.list.d/docker.list
RUN apt-get update apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins blueocean docker-workflow构建docker镜像
从该 Dockerfile 构建一个新的 docker镜像镜像名称为“laker-jenkins”
docker build -t laker-jenkins .5.运行定制镜像
docker run --name jenkins-laker-docker --detach \--network jenkins --env DOCKER_HOSTtcp://docker:2376 \--env DOCKER_CERT_PATH/certs/client --env DOCKER_TLS_VERIFY1 \--publish 8080:8080 --publish 50000:50000 \--volume /var/jenkins_home:/var/jenkins_home \--volume /certs/client:/certs/client:ro \laker-jenkins--name jenkins-laker-docker
指定容器的名称为 jenkins-laker-docker。
--detach
让容器在后台运行detached 模式。
--network jenkins
将容器连接到名为 jenkins 的 Docker 网络。这是为了确保 Jenkins 容器和之前提到的 Docker in Docker 容器可以相互通信。
--env DOCKER_HOSTtcp://docker:2376
设置环境变量 DOCKER_HOST指定 Docker 客户端连接的 Docker 守护进程地址。这里使用了 Docker in Docker 容器的别名 docker 和端口 2376。
--env DOCKER_CERT_PATH/certs/client
设置环境变量 DOCKER_CERT_PATH指定 Docker TLS 证书的路径。
--env DOCKER_TLS_VERIFY1
设置环境变量 DOCKER_TLS_VERIFY启用 Docker 客户端的 TLS 验证。
--publish 8080:8080
将 Jenkins 容器的 8080 端口映射到主机的 8080 端口使得可以通过主机的 8080 端口访问 Jenkins Web UI。
--publish 50000:50000
将 Jenkins 容器的 50000 端口映射到主机的 50000 端口这是 Jenkins 使用的 Agent 的通信端口。
--volume /var/jenkins_home:/var/jenkins_home
将主机上的 /var/jenkins_home 目录挂载到容器内部的 /var/jenkins_home用于持久化存储 Jenkins 数据和配置。
--volume /certs/client:/certs/client:ro
将主机上的 /certs/client 目录挂载到容器内部的 /certs/client用于存储 Docker TLS 证书。:ro 表示挂载为只读以增加安全性。
laker-jenkins
指定要运行的镜像这里假设你之前使用 docker build 命令构建了一个名为 laker-jenkins 的 Jenkins 镜像。
查看docker容器日志看是否启动成功。
docker ps -a
docker logs jenkins-laker-docker6.浏览器访问Jenkins
在浏览器访问http://localhost:8080
7.获取管理员密码
查看initialAdminPassword文件把密码输入登录中的密码即可开始使用。
cat /var/jenkins_home/secrets/initialAdminPassword登录进去后安装插件这里先别选先配置插件镜像加速否则下载太慢。
8.配置插件镜像加速
vi /var/jenkins_home/hudson.model.UpdateCenter.xml将 url 修改为 清华大学官方镜像https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 保存后重启jenkins-laker-docker实例。
docker restart jenkins-laker-docker9.新建Jenkins任务
在企业环境中常见的 Jenkins 任务类型取决于具体的 CI/CD需求和项目特点请根据你的具体情况选择最适合的类型
自由风格项目Freestyle Project
适用场景 适用于灵活性较高的项目例如构建简单的代码库、运行测试、打包发布等。对于小型项目或需要手动触发的任务自由风格项目可能是更简单的选择。
流水线项目Pipeline
适用场景 复杂的 CI/CD 流程包括构建、测试、部署等多个阶段。需要可维护、可版本控制的构建脚本。 优势 可以将整个 CI/CD 流程定义为代码易于版本控制和维护。支持流程中断、并行执行等高级特性。
多分支流水线Multibranch Pipeline
适用场景 项目有多个分支每个分支可能有不同的构建和部署要求。自动化创建和管理分支对应的流水线。 优势 自动创建分支对应的流水线减少手动配置工作。
GitHub 分支源GitHub Branch Source
适用场景 项目使用 GitHub 作为版本控制并有多个分支。想要通过 GitHub 仓库中的事件自动触发 Jenkins 流水线。 优势 自动创建和管理 GitHub 仓库中的分支对应的流水线。
构建其他项目Build Other Projects
适用场景 有多个项目之间存在依赖关系构建完成一个项目后需要触发其他项目的构建。设置项目间的构建顺序和依赖关系。 优势 管理项目之间的依赖关系实现自动触发构建。
多配置项目Multi-configuration Project
适用场景 需要在不同的配置下进行构建和测试。例如支持多个操作系统、不同版本的依赖库等。 优势 支持并行构建多个配置提高构建效率。
构建 Maven 项目Maven Project
适用场景 项目使用 Maven 进行构建。 优势 集成 Maven 构建的相关功能方便 Maven 项目的构建和部署。
以上类型并非互斥可以根据实际需求组合使用。例如可以在主项目中使用多分支流水线同时使用构建其他项目触发子项目的构建。在选择时考虑项目结构、团队熟悉度、自动触发需求等方面。
流水线任务 先根据用Docker Compose启动依赖的Mysql Redis章节安装相关依赖中间件。 这里以比较常用的流水线任务举例。例子内容为部署https://gitee.com/lakernote/easy-admin开源项目。
pipeline {agent anystages {stage(Back-end) {agent {docker { image maven:3.9.6-eclipse-temurin-8-alpine args -v $HOME/.m2:/root/.m2}}steps {// 从Gitee仓库获取代码git https://gitee.com/lakernote/easy-admin.git sh mvn --versionsh mvn clean install// 将构建产物存储到一个命名为 backend-build 的存储区域stash name: backend-build, includes: target/*.jar,Dockerfile,web/**/*}}stage(Start) {// 定义并使用 JDK 工具// tools {// 前提在jenkins全局配置中 定义 JDK 工具的名称和版本// jdk jdk8// 或者使用默认的 JDK// jdk default//}steps {// 恢复构建产物路径相对于工作目录unstash backend-buildsh echo Running Java versionsh java -version// 执行 Java 项目的 JAR 文件sh nohup java -jar target/easyAdmin.jar } }stage(Front-end) {agent {docker { image node:20.11.1-alpine3.19 }}steps {sh node --version}}}
}镜像 maven:3.9.6-eclipse-temurin-17-alpine JDK17maven:3.9.6-eclipse-temurin-8-alpine JDK8
扩展用Docker Compose启动依赖的Mysql Redis
在 Linux 上安装 Docker Compose
下载 Docker Compose
sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose授予执行权限
sudo chmod x /usr/local/bin/docker-compose验证安装
docker-compose --version如果你已经安装好了 Docker Compose但在执行时遇到问题可能有一些原因导致。以下是一些建议 确认路径是否在系统的 PATH 中 确保 /usr/local/bin 在你的系统 PATH 环境变量中。这样系统才能找到 docker-compose 命令。你可以运行以下命令检查 echo $PATH如果没有包含 /usr/local/bin可以将其添加到 PATH 中。在你的 shell 配置文件例如 ~/.bashrc 或 ~/.zshrc中添加以下行 export PATH/usr/local/bin:$PATH然后重新加载配置文件或打开一个新的终端窗口。 docker-compose.yml
使用Docker Compose来定义和管理多个容器的服务包括MySQL、Redis等并确保它们在同一个网络中以便相互通信。
docker-compose.yml
version: 3services:mysql:image: mysql:5.7container_name: mysqlenvironment:MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: lakerMYSQL_USER: lakerMYSQL_PASSWORD: 123456ports:- 3306:3306networks:- jenkins # 上面定义的网络volumes:- /mysql-data:/var/lib/mysql # 持久化存储到宿主机redis:image: redis:latestcontainer_name: redisports:- 6379:6379networks:- jenkins # 上面定义的网络networks:jenkins:external: true # 声明了 jenkins 网络是一个外部网络也就是已经存在的mkdir -p /mysql-data chmod 777 -R /mysql-data 运行以下命令启动 Docker Compose 服务
docker-compose up -d