docker 中安装Jenkins-Jenkins持续化集成(GIT/maven/钉钉机器人)详细步骤

  1. Dokcker 中jenkins容器配置发布连接应用服务器

docker安装jenkins

如:192.168.86.129服务器中docker 部署jenkins

>> 1. 拉取镜像 docker pull jenkins/jenkins:2.277.4-lts-centos7 
>> 2. 创建容器

    docker run -d --name jenkins277 \

        -u root \

        -v /usr/local/git:/usr/local/git \

        -v /var/run/docker.sock:/var/run/docker.sock \

        -v /home/xuzhi/softs/maven-3.6.3:/usr/local/maven \

        -v /home/xuzhi/softs/jenkins_home:/var/jenkins_home \

        -v /home/xuzhi/softs/jdk8u191:/usr/java/jdk1.8.0_191 \

        -v /home/xuzhi/softs/jdk8u191/bin/java:/usr/java/jdk1.8.0_191/bin/java \

        -p 18988:8080 -p 50000:50000 --restart=always 66b731b6aa3f

注:(1 docker run命令 --rm 命令选项,等价于在容器退出后,执行docker rm

2 root用户启动  -u root \

>> 3. 查看容器详细信息:

     docker inspect meJenkins

       curl -s --unix-socket /var/run/docker.sock http:/containers/json

>> 4. 开放端口

firewall-cmd --zone=public --add-port=18988/tcp --permanent

     firewall-cmd –reload

>> 5. 进入容器

docker exec -it containerId/name /bin/bash

>> 6. 查看初始密码:

    cat /var/lib/jenkins/secrets/initialAdminPassword

>> 7. 修改时区问题,则启动时添加:JAVA_OPTS=-Duser.timezone=Asia/Shanghai

        docker run -d --name jenkins \

         -v /jenkins_data/:/var/jenkins_home \

         -e JENKINS_OPTS="--prefix=/jenkins" JAVA_OPTS=-Duser.timezone=Asia/Shanghai \

         -p 8080:8080 -p 18000:8080 66b731b6aa3f

>> 8. systemctl start docker   ;  docker start containerid   ;   docker ps | grep Jenkins

>> 9. 查看日志   docker logs Jenkins

>> 10 说明 /var/run/docker.sock

> 等于docker image: curl -s --unix-socket /var/run/docker.sock http:/images/json

      > 等于docker ps:    curl -s --unix-socket /var/run/docker.sock http:/containers/json

2. 免密登录(登入到jenkins容器中操作

>> 1.  查看 sshd 是否开启            systemctl status sshd.service

>> 2.  使用 rsa算法加密生成公私钥   ssh-keygen -t rsa

    cat id_rsa        -> 查看私钥

    cat id_rsa.pub    -> 查看公钥可用 ssh-copy-id 方式

    注: ssh-keygen -t rsa 默认 >>公私钥<< 会保存在~/.ssh目录下

>> 3.  Jenkins服务器中的公钥发送到应用服务器命令:ssh-copy-id root@192.168.86.130

>> 4. 应用服务器下 .ssh目录的权限为700 authorized_keys和私钥的权限为600

     >  应用服务器(目标服务器)/root/.ssh/下 生成 authorized_keys

> Jenkins所在的服务器(docker容器)的/root/.ssh/下known_hosts文件生成。

         chmod 700 .ssh/

         chmod 600 authorized_keys

    注:否则会有权限问题

>>  5. 使用 ssh 登录远程服务器 如:ssh root@192.168.86.130

[root@localhost .ssh]# ssh root@192.168.86.130

         Last login: Wed May 26 16:21:38 2021 from 192.168.86.129

         [root@192 ~]#

            这样 129 jenkin所在服务器的(docker容器)/root/.ssh/konw_hosts 就会追加:

         192.168.86.130 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBH8tuFQJulVX7yBptfaFbIKY1DMzHRaXzhADqiE/LhRFMXsvFGxaAg/+o5vZ4sH0hOfcMlOQPuBGs/PkNTkDcig=

注:1dockerjenkins容器需要 docker exec –it 4d18efbae119 /bin/bash 进入到容器中,cd /root/.ssh/ 生成公私钥,以及查看 know_hosts

 2jenkins 使用的docker 则上述的免密操作需要在 进入到容器中后进行

注:[root@4d18efbae119 ~] Jenkins 容器内

>> 6. 查看SSH日志: ssh -vT git@localhost

3. 容器常用命令

            >>  1. 容器IP:  docker inspect 4d18efbae119 --format='{{.NetworkSettings.IPAddress}}'

                       如:结果: 172.17.0.2

查看所有IP  sudo docker inspect -f='{{.NetworkSettings.IPAddress}}' $(sudo docker ps -a -q)

            >>  2.  容器名称 sudo docker inspect -f='{{.Name}}' $(sudo docker ps -a -q)

                结果:/jenkins277  /newMysql

    >>  3.  容器详情 docker inspect 4d18efbae119

    >>  4.  暂停容器 docker stop 4d18efbae119

    >>  5.  删除镜像 docker rmi imageId

    >>  6.  删除容器 docker rm containerId

    >>  7.  查看容器的运行状态(不可用)

docker insdocker inspect --format '{{.Name}} {{.State.Running}}' 4d18efbae119

    >>  8.  查看进程信息 docker top 4d18efbae119

    >>  9.  查看端口号  docker port 4d18efbae119

    >>  10.  综合命令

docker inspect -f='{{.Name}} {{.NetworkSettings.IPAddress}} {{.HostConfig.PortBindings}}' $(docker ps -aq)

    >>  11.  查看日志   docker logs 容器ID

5. Jenkins 系统设置和全局工具配置

注:公钥是提供出去给 应用服务器的/Gitea/Gitee/GitHup网站中,私钥是jenkins所在服务器,以及jenkins中配置使用

>>  1. 系统配置 -> Publish Over SSH

Passphrase :有私钥并且私钥设置了密码 name填私钥的密码 (生成公钥私钥的时候会设置一个密码一般都是直接回车)

           Path to key:私钥的位置

           Key          :私钥的内容

          SSH Servers: 服务器的配置

name    :  用户自定义一个容易区分记忆的名字

            HostName:  服务器的地址 例如:192.168.86.129

            UserName:  root 上述服务的登录用户

            Remote Directory: / 设置远程服务器的基础目录、具体的目录由具体应用配置       

注意:在配置上述内容时,要首先在jenkins服务器上生成私钥,然后将公钥推送到服务器上

Jenkins 容器: docker exec -it 40966bea34c3 /bin/bash       ->   运行时  -u root \

这样测试 sucess

         注: 如果不成功 :检查用户是否为 root

    >> 2. 全局工具配置

主要是配置 git / jdk / maven ,这个需要jenkins 容器运行时,进行相应的挂载。

docker run -d --name jenkins277 \

        -u root \

        -v /usr/local/git:/usr/local/git \

        -v /var/run/docker.sock:/var/run/docker.sock \

        -v /home/xuzhi/softs/maven-3.6.3:/usr/local/maven \

        -v /home/xuzhi/softs/jenkins_home:/var/jenkins_home \

        -v /home/xuzhi/softs/jdk8u191:/usr/java/jdk1.8.0_191 \

        -v /home/xuzhi/softs/jdk8u191/bin/java:/usr/java/jdk1.8.0_191/bin/java \

        --rm -p 18988:8080 -p 50000:50000 66b731b6aa3f

    Maven 配置:

         > 文件系统中的 settings 文件 ->  /usr/local/maven/conf/settings.xml

         > 新增Maven   ->  挂载的 MAVEN_HOME -> /var/jenkins_home

         > 新增JDK     ->  挂载的 JAVA_HOME  -> /usr/java/jdk1.8.0_191

6. 项目配置

   

执行应用服务脚本:

方式(1)

#!/bin/bash
HOST=192.168.86.130
BUILD_ID=dontKillMe
ssh root@$HOST << EOF
cd /home/xuzhi/work_2021/docket_web/ 
chmod 777 *.sh 
chmod 777 *.jar 
sh start.sh
EOF

方式(2)

#!/bin/bash

HOST=192.168.86.130

BUILD_ID=dontKillMe

ssh root@$HOST "cd /work/ && chmod 777 *.sh && chmod 777 *.jar && sh start.sh"

注:这个是执行在 jenkins 所在服务器。

>> Git 仓库地址:git@192.168.86.129:/home/meGitRepo/docket/sx-docket.git

7. 问题

>>  1. jdk8u191 is not a directory on the Jenkins master (but perhaps it exists on some agents)   解决:需要将本地的maven 和 java <挂载> 到 <Jenkins容器>,重新启动安装jenkins:

>> 2.  /var/run/docker.sock参数 是什么?

    可以直接发http请求到Docker Daemon,获取本地镜像列表

    > 等同于docker image: curl -s --unix-socket /var/run/docker.sock http:/images/json

    > 等同于docker ps:     curl -s --unix-socket /var/run/docker.sock http:/containers/json

8.Docker下jenkins 全局工具配置:

>> 8.1 全局工具配置

注:Jenkins 全局配置GIT,配置服务器的git ,不要使用自动安装的内置的 ,全局工具配置:

Path to Git executable: -> /usr/local/git/bin/git

容器运行示例:

docker run -d --name jenkins277 \

        -u root \

        -v /usr/local/git:/usr/local/git \

        -v /var/run/docker.sock:/var/run/docker.sock \

        -v /home/xuzhi/softs/maven-3.6.3:/usr/local/maven \

        -v /home/xuzhi/softs/jenkins_home:/var/jenkins_home \

        -v /home/xuzhi/softs/jdk8u191:/usr/java/jdk1.8.0_191 \

        -v /home/xuzhi/softs/jdk8u191/bin/java:/usr/java/jdk1.8.0_191/bin/java \

        -p 18988:8080 -p 50000:50000 --restart=always 66b731b6aa3f

(1) mavensettings  ->  /usr/local/maven/conf/settings.xml (挂载对应容器中的目录)

(2) JDK Home目录    ->  /usr/java/jdk1.8.0_191 (挂载对应容器中的目录)

(3) GIT 的目录          ->  /usr/local/git/bin/git (挂载对应容器中的目录)

>> 8.2 系统配置主要是配置连接应用服务器的 SSH 免密或者账号信息 Publish Over SSH 模块、

 

(1)秘钥方式

(2)用户密码

注:分为两种方式:

  1. 通过配置公钥和私钥,将私钥粘贴到这里 需要配置jenkins(容器)服务器中的私钥的位置

一般:/root/.ssh/id_rsa

        

(2)通过用户名密码

    Passphrase/Password 填写 上面填写的账号(root)对应的密码。最好用root或者路径权限的用户。

>>  9. 具体项目配置

 

点击上图中的添加 –> 凭据: SSH Username with private key

 

  

这个私钥看的 jenkins(服务器)容器中的私钥,同时相应的公钥部署到GIT.ssh下的 authorized_keys 文件中。

如:Git证书的创建目录为 /home/git

cd /home/git/   - >   ll –a  ->  cd .ssh  -> cat authorized_keys  -> 粘贴进去即可

 

  

目标: clean package -Dmaven.test.skip=true -Pdocket-web

 

  install  -Dmaven.test.skip=true

 

 

 

执行应用服务脚本:

方式(1)

#!/bin/bash
HOST=192.168.86.130
BUILD_ID=dontKillMe
ssh root@$HOST << EOF
cd /home/xuzhi/work_2021/docket_web/
chmod 777 *.sh
chmod 777 *.jar
sh start.sh
EOF

方式(2)

#!/bin/bash
HOST=192.168.86.130
BUILD_ID=dontKillMe
ssh root@$HOST "cd /work/ && chmod 777 *.sh && chmod 777 *.jar && sh start.sh"

注:这个是执行在 jenkins 所在服务器。

 

执行shell: jenkins和应用服务同机器:

cd /home/xuzhi/work_2021/docket_web

chmod 777 *.sh

BUILD_ID=dontKillMe

bash start-web.sh

注:BUILD_ID=dontKillMe 不加 Jenkins 会关闭所有衍生创建的额进程,导致服务起不来 java –jar 不成功。

>> 10. Git 服务器搭建

>>11. Jenkins 添加钉钉通知

    首先安装钉钉插件 

    系统配置(Configure System)中添加 钉钉

    Id 空着 Jenkins会默认生成id ,然后就是 webhook 在钉钉中新增的机器人,

     安全策略推荐使用 加密方法 不推荐关键字、这里的 加密 对应 钉钉中的加签

          

 

         钉钉中机器人:

具体的项目中的配置 勾选 系统配置中的 配置的jenkins即可

 

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值