Docker 安装启动 Jenkins (docker-compose)
Jenkins 官网: https://www.jenkins.io
官方安装文档指导: https://www.jenkins.io/doc/book/installing/
dockerhub 官方镜像: https://hub.docker.com/_/jenkins/tags
个人码云共享(码云文字狱的原因,已经停止更新):https://gitee.com/chxlay/iserver-docker/tree/master/cicd
后续更新到 GitHub:https://github.com/chxlay/iserver-docker
需要系统支持 docker 和 docker-compose 环境的支持,如果不知道怎么安装,可跳转到此 提供了docker一键安装脚本 和 docker-compose一键安装脚本
安装:
1、装备环境变量文件 (两个,当然也可以二合一为一个 编写在 .env 文加下)
根路径下的 .env 环境变量文件
######################### 时区 ########################### TZ=Asia/Shanghai # 这里是我通过环境变量,动态的配置 挂在路径,/home/appdata/jenkins ( 请记住这个挂在路径,往下多处用到 ) DATA_PATH=/home/appdata ########################### Jenkins ########################### # 版本信息: https://www.jenkins.io/doc/book/installing/docker/ JENKINS_VERSION=2.375.3-lts-jdk11 JENKINS_PATH=${ROOT_VOLUME}/jenkins # 仓库地址 REPOSITORY=/opt/repository
env/jenkins.env 环境变量文件,由于 .env 通常用作主环境变量文件,每一个应用(一个compose下多个应用)又单独编写独立的环境变量文件,
# 不加一下配置下载插件时报错:(时区可选)Signature verification failed in update site 'default' JAVA_OPTS=-Xms128m -Xmx256m -Duser.timezone=${TZ} -Dhudson.model.DownloadService.noSignatureCheck=true
文件结构如下:
2、准备 docker-compose.yml 文件 (注意:这里实例中,docker-compose.yml 和 .env 文件在同一个路径下)(2023-02-16 进行更新)
version: '3.8' services: # 官网文档: https://www.jenkins.io/doc/book/installing/docker/ # duckerhub官方镜像: https://hub.docker.com/_/jenkins/tags iserver-jenkins: env_file: - 'env/jenkins.env' # 请注意镜像和版本问题:https://www.jenkins.io/download/,不建议使用 jenkins 这个镜像,官方推荐使用 jenkins/jenkins 这个镜像 image: jenkins/jenkins:${JENKINS_VERSION} container_name: iserver-jenkins restart: always privileged: true # 指定容器中运行应用的用户名root(避免容器内总是出现权限不足的问题,这里是测试使用,开发中不推荐使用 root) user: root volumes:
# 手动离线升级可采用https://www.jenkins.io/download下载 jenkins.war 进入容器中替换文件 /usr/share/jenkins/jenkins.war,如果容器内无权限,则通过宿主机直接去/docker/overlay2/...下替换 # Jenkins 工作目录,主要存储数据( /user/data/jenkins,安装后初始化密码也在此处 /usr/data/jenkins(这里是我挂在的路径)/secrets/initialAdminPassword )这里可能会有权限问题 - '${JENKINS_PATH}:/var/jenkins_home' # 让容器使用和服务器同样的时间设置(以上环境变量中已经设置了时区,这里可以不需要设置) - '/etc/localtime:/etc/localtime' # 将主机的Docker套接字装入容器中,这将允许Jenkins容器使用主机的Docker守护进程来构建映像并运行容器。 - '/var/run/docker.sock:/var/run/docker.sock' # 容器内可共享宿主机的 docker - '/usr/bin/docker:/usr/bin/docker' # 容器内享有 宿主机的docker-compose 环境 - '/usr/local/bin/docker-compose:/usr/local/bin/docker-compose' # Jenkins 中已经内置了 OpenJdk 无需设置 java 环境 # 将宿主机的Maven挂载共享给容器内使用,${MVN_HOME} 宿主机的环境变量 # 启动后进入容器执行 echo "export PATH=$MVN_HOME/bin:$PATH" >> /etc/profile && source /etc/profile(这里不执行,往下看有教学,多个环境变量可一起处理) - '${MVN_HOME}:${MVN_HOME}' # 同时宿主机的 Maven 仓库挂载给容器使用(settings.xml 文件中配置的仓库地址) - '${REPOSITORY}/maven/:${REPOSITORY}/maven/' # 将宿主机的node环境挂在到容器内部,分享给容器使用,${NODE_HOME} 宿主机的环境变量 # 启动后进入容器执行 echo "export PATH=$NODE_HOME/bin:$PATH" >> /etc/profile && source /etc/profile (这里不执行,往下看有教学,多个环境变量可一起处理) - '${NODE_HOME}:${NODE_HOME}' ports: # 管理系统访问的端口号 - '8980:8080' - '5000:5000' networks: - iserver-network # 自定义网桥 iserver-network networks: iserver-network: # 启动时不自动创建网桥,需要提前手动创建 网桥 docker network create -d bridge iserver-network external: true driver: bridge
3、启动
( 可选)如果使用了自定义网桥 ,需要先创建一个网桥 docker network create -d bridge 网桥名称(如 iserver-network)
docker network create -d bridge iserver-network
启动 Jenkins ( up -d 后台启动,如果需要查看启动时的信息,则 不要加 -d )
docker-compose up iserver-jenkins
启动日志信息:
************************************************************* ************************************************************* ************************************************************* Jenkins initial setup is required. An admin user has been created and a password generated. Please use the following password to proceed to installation: # 这个就是启动时生成的初始化密码 8d40c29a062144beb2a1ca0d0833fcdc # 安装后,初始化的管理员密码信,/user/data/jenkins(前半截是我挂载的路径)/secrets/initialAdminPassword This may also be found at: /var/jenkins_home/secrets/initialAdminPassword ************************************************************* ************************************************************* ************************************************************* INFO: Jenkins is fully up and running
启动的时候可能会遇到 挂在的路径没有权限,
touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
两个方案:
方案一
此时,只需要进入您的挂在路径下 - '${JENKINS_PATH}/jenkins:/var/jenkins_home' 如:我的是 /user/data/jenkins/ 给其授权即可
如:
cd /home/appdata/jenkins (您的挂在路径)
chmod +777 ./*
方案二: docker-compose.yml 文件中 填写, user: root (此方案方便)
大功告成 ...
访问: http://IP:PORT
首次登录需要查看初始化密码:( 挂载数据文件内可以查看 )
cat /home/appdata/jenkins(前是我挂在的路径,jenkins_home)/secrets/initialAdminPassword
环境变量(Java、Maven、Git, node )
Maven 环境变量配置,(Java 环境变量环境Jenkins已经内置,Git 环境变量 安装插件后就已经可以正常使用 ,唯独 Maven,Node 环境变量需要自行配置 )
上面的 docker-compose.yml 文件中 将 宿主机的 mavne 路径直接挂载分享给 容器使用 /usr/local/apache-maven-3.8.2:/usr/local/maven
所以启动完成之后只需要进入容器,按照常规 Linux 方式配置即可,将 /etc/profile 配置一下即可,熟悉 Linux 环境变量配置的朋友应该很熟悉了,如下:
# 进入容器内部 docker exec -it iserver-jenkins bash # 执行环境变量配置(Maven、Node 环境,其他环境根据需求自行处理) echo "export PATH=$MVN_HOME/bin:$NODE_HOME/bin:$PATH" >> /etc/profile && source /etc/profile
如果重启 Jenkins 后 环境变量不生效,则进入容器,source /etc/profile 即可
配置全局环境标量 :Dashboard > 系统管理 > 全局工具配置
需要注意的是: 这里设置了别名,脚本中调用的的时候也必须和此处保持一至,大小写相差一个字母都会报错:
比如上图配置的是 NODE_JS 而 流水线脚本中编写的是 Node_JS 然后就报错了
No installation Node_JS found. Please define one in manager Jenkins.
插件安装
插件源修改:1、登录 jenkins 后,进入插件管理页 ------>>>>> Advanced 最底下 ---->>>>> Update Site (URL 改为:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json )----->>>>> submit
国内插件源地址: https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
2、替换源 default.json 文件内的所有国外源的字符串: /home/appdata/jenkins(前面是挂载的路径)/updates/ --->> default.json 文件
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
必要插件:
1、中文汉化插件: Localization: Chinese (Simplified) 搜索 Chinese
2、角色权限插件:Role-based Authorization Strategy 搜索 Role-based
3、凭证管理插件: 搜索 Credentials Binding
4、远程部署 tomcat服务插件: 搜索 Deploy to container
5、Pipeline 流水线插件: 搜索 Pipeline
6、参数化构建多选参数 搜索 Extended Choice Parameter
7、发送邮件通知插件: 搜索 Email Extension
8、Git插件工具 搜索 Git
9、NodeJs 插件: 搜索 NodeJs
安装好Node插件后,将上面环境变量中配置的 NODE_HOME 路径配置到 Jenkins 的 全局工具配置 中
10、远程连接 SSH 插件: 搜索 Publish Over SSH
生成公私钥文件: /root/.ssh 路径下执行 ssh-keygen 可以不需要重命名,输入一个密码,记住这个密码,
ssh-copy-id -i 公钥文件 目标主机IP, -i 是制定公钥文件,如果不输入,则,默认是 id_rsa.pub 文件,如果重命名了则需要指定
执行 ssh-copy-id 192.168.1.188 后,被连接的主机的 /root/.ssh/ 路径下 会创建两个 文件 authorized_keys known_hosts
将私钥 is_rsa 路径 指向 Jenkins 配置中的 Path to key,以及ssh-keygen 时候设置的密码
需要将宿主机下的 /root/.ssh/{ id_rsa id_rsa.pub } 两个文件开到 容器挂载的路径内,否则 Path to key 指的是容器内地路径,将不认识宿主机下的 /root/.ssh/ 下的文件的路径
Dashboard > System Manage > Configure System 然后进行配置

离线升级:
进入容器内,注意需要使用 root 进入容器:docker exec -it -u root xtechcn-jenkins bash # 进入 war 存放路径 cd /usr/share/jenkins # 里边有两个文件,需要升级的文件是 jenkins.war 文件,先备份好,再下载新的版本 jenkins.war ref # 进行备份 mv jenkins.war jenkins.war_bac # 下载新的 war,需要先确定 jenkins.war 文件的下载地址,
# war 文件查找地址:https://www.jenkins.io/doc/book/installing/war-file curl -SLO https://jenkins.io/xxxxxxxxx
本文来自博客园,作者:Vermeer,转载请注明原文链接:https://www.cnblogs.com/chxlay/p/16706430.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步