2022-09-19 02:00阅读: 1694评论: 0推荐: 0

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
复制代码

 

posted @   Vermeer  阅读(1694)  评论(0编辑  收藏  举报

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起