美文网首页
03-CentOS7下docker安装Jenkins准备工作

03-CentOS7下docker安装Jenkins准备工作

作者: wshsdm | 来源:发表于2022-09-29 16:11 被阅读0次

    1 安装jdk和maven,并配置环境变量 vi /etc/profile

    M2_HOME=/usr/local/maven3
    JAVA_HOME=/usr/local/jdk1.8
    JRE_HOME=/usr/local/jdk1.8/jre
    CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
    PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:/usr/local/git/bin:$M2_HOME/bin
    export JAVA_HOME JRE_HOME CLASS_PATH M2_HOME PATH
    

    2 安装git

    2.1 git本地安装

    # 下载git2.17.0到本地文件
    #安装依赖
    yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
    #删除yum安装git
    yum remove git
    #入解压后的文件夹,命令 cd git-2.17.0 ,然后执行编译,命令为 
    make prefix=/usr/local/git all
    #安装Git至/usr/local/git路径
    make prefix=/usr/local/git install
    #打开环境变量配置文件,命令 vim /etc/profile ,在底部加上Git相关配置信息
    PATH=/usr/local/git/bin:$PATH
    #查看安装的git版本
    git --version
    
    • git常用命令
    git config --global user.name "admin"
    git config --global user.email "admin@example.com"
    

    2.2 在线安装

    # 先将原本的git卸载了
    [root@node1 ~]# rpm -qa|grep git
    net-tools-2.0-0.25.20131004git.el7.x86_64
    crontabs-1.11-6.20121102git.el7.noarch
    linux-firmware-20200421-80.git78c0348.el7_9.noarch
    [root@node1 ~]# yum remove -y crontabs-1.11-6.20121102git.el7.noarch linux-firmware-20200421-80.git78c0348.el7_9.noarch
    
    [root@node1 ~]# rpm -qa|grep git
    net-tools-2.0-0.25.20131004git.el7.x86_64
    
    # 安装git
    [root@node1 ~]# yum -y install git
    
    [root@node1 ~]# rpm -qa|grep git
    net-tools-2.0-0.25.20131004git.el7.x86_64
    git-1.8.3.1-23.el7_8.x86_64
    
    # 创建Jenkins的映射目录
    [root@node1 ~]# mkdir -p /usr/local/jenkins/workspace
    
    # 创建Jenkins容器并运行
    docker run -uroot -d --restart=always -p 9001:8080 \
    -v /usr/local/jenkins/:/var/jenkins_home/ \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /usr/bin/git:/usr/bin/git \
    -v /usr/local/jdk1.8/:/usr/local/jdk1.8/ \
    -v /usr/local/maven3/:/usr/local/maven3/ --name jenkins jenkins/jenkins:2.356
    bf5659973f89a77dd6b3cefa6c250679437cc3f153a60d3042cf62ded0f7e2c5
    [root@node1 ~]# docker ps
    CONTAINER ID   IMAGE                 COMMAND                  CREATED              STATUS                       PORTS                                                                                                                   NAMES
    bf5659973f89   jenkins/jenkins:lts   "/sbin/tini -- /usr/…"   About a minute ago   Up About a minute            50000/tcp, 0.0.0.0:9001->8080/tcp, :::9001->8080/tcp                                                                    jenkins
    a8eac9ac773b   gitlab/gitlab-ce      "/assets/wrapper"        About an hour ago    Up About an hour (healthy)   0.0.0.0:7003->22/tcp, :::7003->22/tcp, 0.0.0.0:7002->80/tcp, :::7002->80/tcp, 0.0.0.0:7001->443/tcp, :::7001->443/tcp   gitlab
    
    # 配置libpcre.so.3的软连接并生成Jenkins的秘钥和公钥
    [root@node1 ~]# docker exec -it -uroot jenkins /bin/bash
    root@bf5659973f89:/# git
    git: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
    root@bf5659973f89:/# ldd $(which /usr/bin/git)
            linux-vdso.so.1 (0x00007ffd5c0b1000)
            libpcre.so.1 => not found
            libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f62ce68b000)
            libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f62ce669000)
            libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f62ce4a4000)
            /lib64/ld-linux-x86-64.so.2 (0x00007f62ce6ad000)
    root@bf5659973f89:/# cd /lib/x86_64-linux-gnu/
    root@bf5659973f89:/lib/x86_64-linux-gnu# ln -s libpcre.so.3 libpcre.so.1
    root@bf5659973f89:/lib/x86_64-linux-gnu# ssh-keygen -t rsa -C "root"
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa): 
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /root/.ssh/id_rsa
    Your public key has been saved in /root/.ssh/id_rsa.pub
    The key fingerprint is:
    SHA256:sNKM/ch97SBbKP8L/eCK3ip07qPQIVQWZ21Y737knAk root
    The key's randomart image is:
    +---[RSA 3072]----+
    |    +.o+.        |
    |   o o. o.       |
    |  .   ..  .      |
    | .   = o .       |
    |  . + = S E .    |
    |   o.+.+ + * o   |
    |  ...o+ * B B    |
    |   .. o= B *     |
    |    .==o=o+.o    |
    +----[SHA256]-----+
    root@bf5659973f89:/lib/x86_64-linux-gnu# cd
    root@bf5659973f89:~# cd /root/.ssh/
    root@bf5659973f89:~/.ssh# ls
    id_rsa  id_rsa.pub  known_hosts
    root@bf5659973f89:~/.ssh# cat id_rsa.pub 
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCtCOXBcIb6piqYG5o41eQkPwhsxr6Zu7/uZhopfKfleAL4/h9FdXNumLeVGzPUf6Zpub+Ei7AcMjX6jZvGuaWNwlHzFRIEOYk3HvDWkYxcsjA/j/NMANveEKPcK6j9W8PR5idJTN8AC1U6nDy2YYoioLsCMmJT/qydNdLe9nB+5k0i59J2l/eCXTVv3j2qpP1L9AvEFamlpHYEYhOtqeBlnANPl4sgcSmaBLpOh9XJcolZ64BVSAo6w36gvRMc48/dFUcbO3rY5K+aCbDhB6m2BkukmpHBkIpf5u/xKyuqrN6EryxHqVUpL3WBvvGfCnCRphfpm4LXwXzgAJuAIoTSi5SRU22y/oJ8rcbpXiYhqlUHIPdSV/xDei0q9+1fRABLNEadPVCetC2+UxRsQnFAXGxkcomj4BVht7jI6MNM+02h/nx1FkqxKYVVT7w8avMXky+A020FVNjhKMu9JQthZz21uguDIP4btHj0dr8arV6cHh07ItEh0EEnK23FMpE= root
    

    3 docker安装nexus

    Nexus([ˈneksəs]) 是一个强大的 Maven 仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。利用 Nexus 你可以只在一个地方就能够完全控制访问 和部署在你所维护仓库中的每个 Artifact

    • 创建映射目录
    mkdir -p -m 777 /home/nexus
    
    • docker安装
    docker run -d --name nexus --restart always  --net=host --privileged -v /home/nexus:/nexus-data sonatype/nexus3
    

    默认端口为8081

    • admin账号,初始化密码文件
    cat /home/nexus/admin.password
    
    • 增加aliyun代理仓库,创建一个仓库
      阿里云代理,从maven-public拉取依赖就可以走阿里云先拉提高速度


      1664519493024.jpg

      点击“create repsitory”按钮,弹出窗口


      image.png
    • 创建aliyun仓库信息


      image.png
    • 修改maven-public的一个顺序位置


      image.png
      image.png
      image.png
    • maven-release默认是不可以多次deploy的,为了方便,这里也可以修改配置为Allow redeploy


      image.png
      image.png
    • 修改maven的配置文件settings.xml
    <servers>
        <server>
          <!--根据id来取用账号密码,这里的账号密码就是可以登录nexus的-->
          <id>alimaven</id>
          <username>admin</username>
          <password>12345678</password>
        </server>
      </servers>
      <!--阿里云镜像-->
      <mirrors>
        <mirror>
          <id>alimaven</id>
          <name>aliyun maven</name>
          <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
          <mirrorOf>central</mirrorOf>
        </mirror>
      </mirrors>
    
    • 修改springcloud项目的pom.xml文件
    # 添加拉取仓库地址、插件地址和上传仓库地址
    <!--拉取仓库-->
        <repositories>
            <repository>
                <id>alimaven</id>
                <url>http://192.168.101.138:8081/repository/maven-public/</url>
                <releases>
                    <enabled>true</enabled>
                    <updatePolicy>always</updatePolicy>
                </releases>
                <snapshots>
                    <updatePolicy>always</updatePolicy>
                    <enabled>true</enabled>
                </snapshots>
            </repository>
        </repositories>
        <!--插件拉取仓库-->
        <pluginRepositories>
            <pluginRepository>
                <id>alimaven</id>
                <url>http://192.168.101.138:8081/repository/maven-public/</url>
                <releases>
                    <updatePolicy>always</updatePolicy>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <updatePolicy>always</updatePolicy>
                    <enabled>true</enabled>
                </snapshots>
            </pluginRepository>
        </pluginRepositories>
        <!--发布仓库-->
        <distributionManagement>
            <repository>
                <id>alimaven</id>
                <url>http://192.168.101.138:8081/repository/maven-releases/</url>
            </repository>
            <snapshotRepository>
                <id>alimaven</id>
                <url>http://192.168.101.138:8081/repository/maven-snapshots/</url>
            </snapshotRepository>
        </distributionManagement>
    

    4 创建方式maven jar仓库

    创建一个maven-repo仓库,类型为Mixed,Allow redeploy


    image.png
    image.png

    5 docker镜像私服仓库

    5.1 新建docker-central仓库阿里云代理
    image.png
    image.png
    image.png
    5.2 新建docker-repo仓库,用于上传镜像
    image.png
    image.png
    image.png

    这样就可以使用192.168.101.138:8082来进行镜像的上传或者拉取

    5.3 新建docker-public组,用于拉取镜像
    image.png
    image.png
    image.png
    image.png
    image.png
    5.4 设置docker的deamon.json文件
    • 打开docker配置文件
    vi /etc/docker/daemon.json
    
    • 添加内容
    "insecure-registries":["192.168.101.138:8082","192.168.101.138:8083"]
    
    • 重启docker
    systemctl restart docker
    
    • 测试8082和8083端口是否能够连通


      image.png

      docker登录之后,就可以进行相应的私服的拉取和上传操作了

    6 docker安装sonarqube8.9

    6.1 docker安装postgis12

    sonarqube:8.9.8-community版本postgreSQL数据的版本为:9–12。最高支持13版本。

    docker pull postgres:12.4-alpine
    # 安装postgresql数据库
    docker run --name postgresql -e POSTGRES_USER=root --restart always -e POSTGRES_PASSWORD=12345678 -p 5432:5432 -v /data/postgresql/data:/var/lib/postgresql/data -d postgres:12.4-alpine
    # 在root用户下创建sonar库
    
    5.5 Nexus手动添加jar
    • 选中maven-releases


      image.png
    • 点击“upload component”按钮准备上传本地jar


      image.png
    • 填写必填项,完成上传


      image.png
    6.2 docker安装sonarqube8.9.8
    • 拉取sonarqube8.9.8镜像
    docker pull sonarqube:8.9.8-community 
    
    • 创建sonarqube容器
    docker run -d --name sonarqube \
        --restart always \
        -p 9000:9000 \
        -v /data/sonarqube/data:/opt/sonarqube/data \
        -v /data/sonarqube/extensions:/opt/sonarqube/extensions \
        -v /data/sonarqube/bundled-plugins:/opt/sonarqube/lib/bundled-plugins \
        -e SONARQUBE_JDBC_URL=jdbc:postgresql://192.168.232.129:5432/sonar \
        -e SONARQUBE_JDBC_USERNAME=root \
        -e SONARQUBE_JDBC_PASSWORD=12345678 \
    sonarqube:8.9.8-community
    
    • 浏览器访问sonarqube
    访问地址:http://localhost:9000/
    默认账号:admin:admin
    

    7 docker安装registry

    registry能有效保护内部代码, 防止放到公网泄漏出去;

    • 拉取 registry 镜像
    docker pull registry:2
    
    • 创建registry容器
    docker run -d \
    --restart=always -p 5000:5000 \
    --name registry -v /usr/local/docker/data/registry:/var/lib/registry registry:2
    
    • 修改 daemon.json 文件
    # 编辑文件 /etc/docker/daemon.json
    # insecure-registries 表示私服的路径
    {
    "registry-mirrors": ["https://registry.docker-cn.com"],
    "insecure-registries":["192.168.1.235:5000"]
    }
    
    • 重新加载 daemon 文件&重启 docker
    systemctl daemon-reload
    systemctl restart docker
    
    • 浏览器验证是否成功
    http://192.168.101.145:5000/v2/
    http://192.168.101.145:5000/v2/_catalog
    

    8 docker安装gitlab

    • 获取 gitlab 镜像包
    docker pull gitlab/gitlab-ce
    
    • 准备 gitlab 工作目录
    # 创建 config 目录
    mkdir -p /usr/local/gitlab/config 
    # 创建 logs 目录
    mkdir -p /usr/local/gitlab/logs 
    # 创建 data 目录
    mkdir -p /usr/local/gitlab/data 
    
    • 启动 GitLab
    docker run --detach \
    --privileged=true \
    --hostname 192.168.101.145 \
    --publish 7001:443 --publish 7002:80 --publish 7003:22 \
    --name gitlab --restart always \
    --volume /usr/local/gitlab/config:/etc/gitlab \
    --volume /usr/local/gitlab/logs:/var/log/gitlab \
    --volume /usr/local/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
    
    参数名称 参数说明
    detach 指定容器运行于前台还是后台
    hostname 指定主机地址, 如果有域名可以指向域名
    publish 指定容器暴露的端口,左边的端口代表宿主机的端口, 右边的是代表容器的端口
    name 给容器起一个名字,
    restart always 重启, 只要 docker 自动重启, 容器就会自动重启.减少人工重启工作。
    volume 数据卷, 在 docker 中是最重要的一个知识点.
    --privileged=true 解 决 Docker 挂 载主 机目 录 Docker 访 问出 现 cannot open directory .:Permission denied
    • 修改 gitlab.rb 配置文件

    external_url 和 gitlab_rails 这两个 ip 参数, 建议固定操作系统的静态不变的 IP 或说是域名进行配置, 假设 IP 变得的话在 GitLab 新建项目的时候, 生成的 IP 还是原来的 IP, 此时就无法推送代码在 Gitlab里面。

    宿主机路径: /usr/local/gitlab/config/gitlab.rb

    external_url 'http://192.168.101.145'
    gitlab_rails['gitlab_ssh_host'] = '192.168.101.145'
    gitlab_rails['gitlab_shell_ssh_port'] = 7003
    
    • 去 gitlab 容器重启服务

    由于运行是使用数据卷参数进行运行的, 宿主机的 gitlab.rb 文件修改了, gitlab 容器里面的文件会跟着改, 但是容器的文件不会跟着生效, 必须要进去容器里面进行命令执行

    # 进去 gitlab 容器的命令
    docker exec -it gitlab /bin/bash 
    # 重置 gitlab 客户端的命令,执行命令后,按ctrl+p,ctrl+q退出
    gitlab-ctl reconfigure 
    
    • 在容器中修改gitlab密码
    # 出现这个界面说明安装成功,接下来需要进到容器里重置密码
    [root@node1 ~]# docker exec -it gitlab /bin/bash
    root@192:/# gitlab-rails console -e production
    --------------------------------------------------------------------------------
     Ruby:         ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x86_64-linux]
     GitLab:       14.4.1 (1a23d731c9f) FOSS
     GitLab Shell: 13.21.1
     PostgreSQL:   12.7
    --------------------------------------------------------------------------------
    Loading production environment (Rails 6.1.4.1)
    irb(main):001:0> user = User.where(id: 1).first
    => #<User id:1 @root>
    irb(main):002:0> user.password = '12345678'
    => "12345678"
    irb(main):003:0> user.password_confirmation = '12345678'
    => "12345678"
    irb(main):004:0> user.save!
    Enqueued ActionMailer::MailDeliveryJob (Job ID: 5f22b4b1-1534-482a-88c1-40b8a947cf2d) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", {:args=>[#<GlobalID:0x00007f6e42f74560 @uri=#<URI::GID gid://gitlab/User/1>>]}
    => true
    # 重置密码成功,密码为:12345678,接下来重新访问网址,用户:root;密码:12345678
    
    • 重启 gitlab 容器命令
    docker restart gitlab
    
    • 浏览器输入地址
    http://192.168.101.145:7002
    
    • 修改初始化密码
    # 用户名 root
    cat /usr/local/gitlab/config/initial_root_password
    

    9 docker安装Jenkins

    • 拉取jenkins镜像
    docker pull jenkins/jenkins:2.356
    
    • 创建jenkins容器
    1. docker 脚本安装, 指定 Jenkins 默认路径/root/.jenkins/workspace 拉取代码的路径同步到
      宿主机路径/usr/local/jenkins/workspace.
    2. 由于 jdk 和 maven,git 都在宿主机, 所以要 v(数据卷参数) 指定 jenkins 容器的路径把
      宿主机的软件同步到容器
    docker run -uroot -d --restart=always -p 9001:8080 \
    -v /usr/local/jenkins/:/var/jenkins_home/ \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /usr/bin/git:/usr/bin/git \
    -v /usr/local/jdk1.8/:/usr/local/jdk1.8/ \
    -v /usr/local/maven3/:/usr/local/maven3/ --name jenkins jenkins/jenkins:2.356
    
    命令 描述
    -d 后台运行容器,并返回容器ID
    -p 9001:8080 将容器内8080端口映射至宿主机9095端口,这个是访问jenkins的端口
    --name jenkins 设置容器名称为jenkins
    • 浏览器输入网址 http://192.168.101.145:9001
    • 设置密码
    # 进入 Jenkins 容器
    docker exec -it jenkins /bin/bash
    # 查看密码
    cat  /usr/local/jenkins/secrets/initialAdminPassword
    
    • 设置国内源
    升级站点网址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
    # 修改配置文件,/var/jenkins_home/updates目录
    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
    
    • 重启jenkins服务
    浏览器中输入: http://192.168.101.145:9001/restart
    
    • docker启动出现Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?错误
    # 检查/etc/docker/daemon.json 配置文件内容是否正确
    # 视图重启服务
    systemctl daemon-reload
    # 重启docker服务
    systemctl restart docker.service
    
    • 安装如下插件
    SSH 用于 SSH 连接服务器
    Publish Over SSH 用于 SSH 发布
    Maven Integration 用于maven集成
    git
    pipeline
    

    10 开发环境与gitlab实现免密登录

    • 在开发环境的git bash中输入命令
    # 使用ssh-keygen -t rsa -C "root" 生成Windows本机秘钥和公钥
    
    • 复制C:\Users\Administrator.ssh路径下公钥文件
    id_rsa.pub
    
    • 打开gitlab添加ssh


      image.png
    • 配置libpcre.so.3的软连接并生成Jenkins的秘钥和公钥
    docker exec -it -uroot jenkins /bin/bash
    # 容器内生成ssh key
    ssh-keygen -t rsa -C "root"
    cd /root/.ssh/
    # 目录下文件如下
    id_rsa  id_rsa.pub
    
    • 到这里就将这个SSH公钥添加到gitlab上,之后做项目拉取


      image.png

    11 配置jenkins全局凭证

    使用pipeline结合gitlab拉取代码时,需要在jenkins上配置gitlab的用户名密码,为全局ID,以便使用

    • 选择“Manage Credentials”项


      image.png
    • 在“全局”按钮处,点击并选中“添加凭证”按钮


      image.png
    • 输入用户名和密码


      image.png
    • 在“系统配置”中设置SSH远程主机


      image.png
    • 配置SSH远程主机信息


      image.png
    • 配置GitLab所在主机信息


      image.png

    12 全局工具配置

    • 配置maven


      image.png
    • 配置jdk


      image.png
    • 配置git


      image.png
    • 本地maven配置


      image.png

    13 添加dockerfile文件

    • 当前项目下创建docker目录,在docker目录下创建Dockerfile文件


      image.png
    • 项目打包


      image.png
    • 编写Dockerfile文件
    FROM java
    WORKDIR /home
    ADD /apptest1.jar //
    ENTRYPOINT ["java","-jar","/apptest1.jar"]
    CMD ["java","-version"]
    
    • 提交项目到gitlab
      出现错误:Push main to origin/main was rejected by remote
      默认 master 分支是处于被保护状态下的,develop 角色是没有权限提交到 master 分支的。这是全局配置的分支保护


      image.png

    14 项目在Jenkins自动化部署

    • 新建项目


      image.png
    • 创建maven构建项目


      image.png
    • 配置git源码管理


      image.png
    • post steps


      image.png
      image.png
    #/bin/bash
    echo "进入项目..."
    cd /usr/local/jenkins/workspace/hellospringboot
    echo "停止已有容器..."
    docker stop apptest1
    echo "删除已有容器..."
    docker rm apptest1
    echo "删除已有镜像..."
    docker rmi ping/apptest1
    echo "制作镜像..."
    docker build -f Dockerfile -t ping/apptest1 .
    echo "启动容器..."
    docker run -p 8001:8001 --name apptest1 -d ping/apptest1
    echo "自动部署完成..."
    

    相关文章

      网友评论

          本文标题:03-CentOS7下docker安装Jenkins准备工作

          本文链接:https://www.haomeiwen.com/subject/obnlartx.html