码迷,mamicode.com
首页 > 其他好文 > 详细

Jenkins

时间:2019-12-14 09:25:38      阅读:367      评论:0      收藏:0      [点我收藏+]

标签:公钥   验证   linux   安装jenkins   格式   locale   返回   国外   工具包   

  • 持续集成(Continuous integration)指的是,频繁地(一天多次)将代码集成到主干。
  • 持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。
  • 持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。
  • Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。
    Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序

    安装Jenkins

    安装可以参考下官方文档:
    https://jenkins.io/zh/doc/book/installing/

    yum 安装

    Jenkins 需要 Java 环境。所以处理Jenkins本身,还需要安装Java。

    安装jdk
    首先需要安装Java 8。无论是Java运行时环境(JRE)还是Java开发工具包(JDK)都可以。
    查看JDK软件包列表:

    $ yum search java | grep -i jdk

    过滤条件有点粗,列出的软件包中,有如下几个jdk:

    java-1.6.0-openjdk.x86_64 : OpenJDK Runtime Environment
    java-1.7.0-openjdk.x86_64 : OpenJDK Runtime Environment
    java-1.8.0-openjdk.x86_64 : OpenJDK Runtime Environment 8
    java-11-openjdk.x86_64 : OpenJDK Runtime Environment 11

    至少需要Java 8,所以1.6.0和1.7.0就太旧了。这里安装1.8.0。

    yum 安装 openjdk:

    # yum install java-1.8.0-openjdk

    验证一下:

    $ java -version
    openjdk version "1.8.0_222"
    OpenJDK Runtime Environment (build 1.8.0_222-b10)
    OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
    $ 

    安装Jenkins官方yum源
    官方yum源从这里找: https://pkg.jenkins.io/
    页面里有详细的说明,具体是执行如下命令完成安装:

    $ wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
    $ rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
    $ yum install jenkins

    不过访问国外的资源可能会有问题,可以使用国内的镜像源。

    清华大学开源软件镜像站,这里有jenkins的镜像资源,选择直接从镜像站点安装。这里选择安装一个稳定版:

    $ yum install https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.190.1-1.1.noarch.rpm

    启动服务
    安装完成后启动服务:

    $ systemctl start jenkins   

    这里用不了enable,不过执行后会有提示:

    $ systemctl enable jenkins
    jenkins.service is not a native service, redirecting to /sbin/chkconfig.
    Executing /sbin/chkconfig jenkins on
    $ 

    默认应该也已经是开机启动的了,所以只需要启动服务就好了。

    验证

    Jenkins是通过Web来管理的,默认的端口是8080。

    检查端口监听
    可以使用ss命令查看本地监听的端口:

    $ ss -tnl
    State      Recv-Q Send-Q Local Address:Port   Peer Address:Port              
    LISTEN     0      128             *:22              *:*                  
    LISTEN     0      100     127.0.0.1:25              *:*                  
    LISTEN     0      50             :::8080           :::*                  
    LISTEN     0      128            :::22             :::*                  
    LISTEN     0      100           ::1:25             :::*                  
    $ 

    开启防火墙策略
    如果要被别的主机访问,就需要开启防火墙:

    $ firewall-cmd --permanent --add-port=8080/tcp
    $ firewall-cmd --reload

    然后可以使用浏览器访问页面了。

    解决国外资源的问题

    安装完成后,就应该是进行“安装后设置向导”,也就是下一章的内容。不过在那之前,最好再修改2个配置文件,把里面引用的国外资源修改掉。

    无法下载update-center.json文件

    修改配置文件/var/lib/jenkins/hudson.model.UpdateCenter.xml,默认的设置如下:

    $ cat /var/lib/jenkins/hudson.model.UpdateCenter.xml
    <?xml version=‘1.1‘ encoding=‘UTF-8‘?>
    <sites>
      <site>
        <id>default</id>
        <url>https://updates.jenkins.io/update-center.json</url>
      </site>
    </sites>

    把https改成http有时候就能解决,不过这依然是一个国外资源。可以替换为一个国内的镜像资源,比如清华大学开源软件镜像站的资源:
    https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

    修改后,可以重启一下jenkins服务,这样会立刻去新的地址下载文件。
    执行这条命令就能完成文件的替换:

    $ sed -i ‘s@<url>https://updates.jenkins.io/update-center.json</url>@<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>@‘ /var/lib/jenkins/hudson.model.UpdateCenter.xml && systemctl restart jenkins

    下载完成后,jenkins目录下会多出一个updates目录:

    $ ll /var/lib/jenkins/updates/
    总用量 1752
    -rw-r--r--. 1 jenkins jenkins 1782472 10月  1 10:46 default.json
    -rw-r--r--. 1 jenkins jenkins    5212 10月  1 10:46 hudson.tasks.Maven.MavenInstaller
    $ 

    这里新下载的default.json文件是下一个需要修改的文件。

    通过Web进行修改
    另外,还可以直接在Web上进行修改。Web页面的操作要先完成解锁(下一章的内容),然后访问如下这个URL,修改页面下面的“Update Site”里的URL地址:
    http://localhost:8080/pluginManager/advanced

    修改实际下载插件的地址

    配置文件default.json是一个json格式的文件,内容非常多,而且文件的内容没有分行,都在一行里。

    解析JSON
    使用如下的方法可以解析:

    $ cat /var/lib/jenkins/updates/default.json  | python -m json.tool | wc -l
    72402
    $ 

    Linux下还有一个jq工具,不过需要安装。解析后统计了一下行数,非常多的内容,以后应该是可以在Web上修改的。
    显示前10行的内容:

    $ cat /var/lib/jenkins/updates/default.json  | python -m json.tool 2>/dev/null | head
    {
        "connectionCheckUrl": "http://www.google.com/",
        "core": {
            "buildDate": "Sep 29, 2019",
            "name": "core",
            "sha1": "KU7g2KwfsFq1iFyhbI527vtnN1k=",
            "sha256": "EBv1Xbf1yJNmGmi2ymEawZzaJlh8rQ1y6BV/HvqMpvM=",
            "url": "http://updates.jenkins-ci.org/download/war/2.198/jenkins.war",
            "version": "2.198"
        },
    $ 

    修改配置文件
    即使是从镜像站点下载的配置文件,文件的内容也是和官方一样的。下载插件的url指向的依然是官方的站点,而不是镜像站点。所以需要去配置文件中把所有的url都改掉,量比较大,可以使用sed来修改。
    下面是修改配置文件并验证修改后结果的过程:

    $ sed ‘s@"url":"http://updates.jenkins-ci.org/download/plugins@"url":"https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins@g‘ /var/lib/jenkins/updates/default.json | python -m json.tool 2>/dev/null | grep url -a1 | head -n 15
            "sha256": "EBv1Xbf1yJNmGmi2ymEawZzaJlh8rQ1y6BV/HvqMpvM=",
            "url": "http://updates.jenkins-ci.org/download/war/2.198/jenkins.war",
            "version": "2.198"
    --
                "title": "AnchorChain",
                "url": "https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/AnchorChain/1.0/AnchorChain.hpi",
                "version": "1.0",
    --
                "title": "Apica Loadtest",
                "url": "https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/ApicaLoadtest/1.10/ApicaLoadtest.hpi",
                "version": "1.10",
    --
                "title": "Blame Subversion",
                "url": "https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/BlameSubversion/1.200/BlameSubversion.hpi",
                "version": "1.200",
    $ sed -i ‘s@"url":"http://updates.jenkins-ci.org/download/plugins@"url":"https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins@g‘ /var/lib/jenkins/updates/default.json
    $ cat /var/lib/jenkins/updates/default.json  | python -m json.tool 2>/dev/null | grep url -a1 | head -n 15
            "sha256": "EBv1Xbf1yJNmGmi2ymEawZzaJlh8rQ1y6BV/HvqMpvM=",
            "url": "http://updates.jenkins-ci.org/download/war/2.198/jenkins.war",
            "version": "2.198"
    --
                "title": "AnchorChain",
                "url": "https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/AnchorChain/1.0/AnchorChain.hpi",
                "version": "1.0",
    --
                "title": "Apica Loadtest",
                "url": "https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/ApicaLoadtest/1.10/ApicaLoadtest.hpi",
                "version": "1.10",
    --
                "title": "Blame Subversion",
                "url": "https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/BlameSubversion/1.200/BlameSubversion.hpi",
                "version": "1.200",
    $ 

    这么做还会有问题,因为上一小节设置的“升级站点”的URL,Jenkins依然会去那里更新文件。更新后,这里做的修改又会被覆盖掉。

    修改检查网络连接的网址

    显示配置文件前10行的内容:

    $ cat /var/lib/jenkins/updates/default.json  | python -m json.tool 2>/dev/null | head
    {
        "connectionCheckUrl": "http://www.google.com/",
        "core": {
            "buildDate": "Sep 29, 2019",
            "name": "core",
            "sha1": "KU7g2KwfsFq1iFyhbI527vtnN1k=",
            "sha256": "EBv1Xbf1yJNmGmi2ymEawZzaJlh8rQ1y6BV/HvqMpvM=",
            "url": "http://updates.jenkins-ci.org/download/war/2.198/jenkins.war",
            "version": "2.198"
        },
    $ 

    这里要修改的就是connectionCheckUrl的值。这个值是用来检查网络连接的,换成一个可以正常访问的地址。在设置之前先用curl命令测试一下要设置的url地址:

    $ curl https://mirrors.tuna.tsinghua.edu.cn/jenkins/TIME
    1569891721
    $ curl https://mirrors.tuna.tsinghua.edu.cn/jenkins/TIME -I
    HTTP/1.1 200 OK
    Server: nginx/1.16.1
    Date: Tue, 01 Oct 2019 03:51:42 GMT
    Content-Type: application/octet-stream
    Content-Length: 11
    Last-Modified: Tue, 01 Oct 2019 01:02:01 GMT
    Connection: keep-alive
    ETag: "5d92a589-b"
    Strict-Transport-Security: max-age=31536000
    X-TUNA-MIRROR-ID: nanomirrors
    Accept-Ranges: bytes
    
    $ 

    虽然不清楚具体检查的逻辑,不过确保返回状态码200比较好。
    下面是修改配置文件并验证修改后结果的过程:

    [root@Jenkins ~]# sed ‘s@"connectionCheckUrl":"http://www.google.com/"@"connectionCheckUrl":"https://mirrors.tuna.tsinghua.edu.cn/jenkins/TIME"@‘ /var/lib/jenkins/updates/default.json | cut -f1-2 -d","
    {"connectionCheckUrl":"https://mirrors.tuna.tsinghua.edu.cn/jenkins/TIME","core":{"buildDate":"Sep 29
    [root@Jenkins ~]# sed -i ‘s@"connectionCheckUrl":"http://www.google.com/"@"connectionCheckUrl":"https://mirrors.tuna.tsinghua.edu.cn/jenkins/TIME"@‘ /var/lib/jenkins/updates/default.json
    [root@Jenkins ~]# cat /var/lib/jenkins/updates/default.json  | python -m json.tool 2>/dev/null | head
    {
        "connectionCheckUrl": "https://mirrors.tuna.tsinghua.edu.cn/jenkins/TIME",
        "core": {
            "buildDate": "Sep 29, 2019",
            "name": "core",
            "sha1": "KU7g2KwfsFq1iFyhbI527vtnN1k=",
            "sha256": "EBv1Xbf1yJNmGmi2ymEawZzaJlh8rQ1y6BV/HvqMpvM=",
            "url": "http://updates.jenkins-ci.org/download/war/2.198/jenkins.war",
            "version": "2.198"
        },
    [root@Jenkins ~]# 

    小结

    上面的3个步骤,整理后就是下面这1条命令:

    sed -i ‘s@<url>https://updates.jenkins.io/update-center.json</url>@<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>@‘ /var/lib/jenkins/hudson.model.UpdateCenter.xml && systemctl restart jenkins && until [ -f /var/lib/jenkins/updates/default.json ]; do echo "等待文件下载 ..." && sleep 1; done && echo "文件已下载,更新文件内容 ..." && sed -i ‘s@"url":"http://updates.jenkins-ci.org/download/plugins@"url":"https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins@g‘ /var/lib/jenkins/updates/default.json && sed -i ‘s@"connectionCheckUrl":"http://www.google.com/"@"connectionCheckUrl":"https://mirrors.tuna.tsinghua.edu.cn/jenkins/TIME"@‘ /var/lib/jenkins/updates/default.json && systemctl restart jenkins

    安装后设置向导

    下载安装并运行Jenkins后,即将开始进入安装向导。
    此安装向导会引导您完成几个快速“一次性”步骤来解锁Jenkins,使用插件对其进行自定义,并创建第一个可以继续访问Jenkins的管理员用户。

    解锁 Jenkins

    服务启动后,就可以使用网页来进行设置了。jenkins默认使用的端口是8080。
    第一次访问新的Jenkins时,系统会要求使用自动生成的密码对其进行解锁。
    密码保存在服务器上的一个文件中,页面上会有提示:

    $ cat /var/lib/jenkins/secrets/initialAdminPassword

    从服务器的文件中获取密码后,填入Web页面即可。
    这个页面相当于是一个登录页面。如果jenkins没有解锁,访问任何页面,应该都会跳转到这个页面要求解锁。

    自定义jenkins插件

    解锁之后,如果已经解决了上面的镜像站点的问题,就可以进到“自定义Jenkins”页面。这里可以安装任何数量的插件作为初始步骤的一部分。这里有2个选择:

    • 安装推荐的插件
    • 选择插件来安装

    不确定的话,就先按推荐的来。如果已经设置好了镜像站点,安装起来是很快的。

    创建第一个管理员用户

    这个页面就是一个简单的注册操作。
    完成后,可能跳转到了一个空白的页面,并且再访问主页仍然是空白。这时需要重启一下Jenkins。访问如下的URL通过Web来重启:
    http://localhost:8080/restart

    重启之后,就是使用用户名和密码的登录界面了。

    安装插件

    再介绍几个常用插件的安装和配置。
    安装插件的页面是这个URL:
    http://172.17.76.88:8080/pluginManager/available
    在页面上搜一下插件的名称,勾选之后直接安装(Install without restart)即可。
    另外立即获取(Check now)不要随便点,这会触发更新配置文件,那么之前对配置文件的修改就被覆盖了。

    Local

    这个插件可以强制浏览器上显示中文。
    Jenkins默认就支持中文了。使用google浏览器,并且把语言设置成中文就能看到效果。有的浏览器可能无法自动识别,就需要先安装Locale插件并进行设置。

    安装完成后,可以在配置界面中找到Local的配置项了。配置界面如下:
    http://172.17.76.88:8080/configure

    一共就2个配置:

    • "Default Language"设置默认的语言,这里填入“zh_CN”
    • "Ignore browser preference and force this language to all users",勾一下,强制使用中文忽略浏览器选项。

    最后点击最下面的 Apply 按钮是配置生效。再刷新下页面就都是中文了。

    Publish over SSH

    Jenkins需要远程控制主机,就需要通过SSH连接。这个插件就是完成SSH认证的。

    设置私钥
    设置密钥对,一般使用 ssh-keygen 命令,不展开了。
    配置界面提供3中方式指定认证的方式:

    • Passphrase: 生成密钥是填写的密语(passphrase),没有就空着。
    • Path to key: 添加私钥文件的路径
    • Key: 直接把私钥的内容贴在这里

    “Passphrase”是在生成密钥对的时候设置的,一般偷懒就直接回车,表示空。所以一般也都不用填。
    "Key"就是直接贴上私钥文件的内容。私钥文件应该是不公开的,这里明码贴出来,安全性上有点问题。这就需要配合passphrase生成加密的私钥文件,这样就可以把私钥的内容明码贴出来了,而Passphrase就和密码一样是不可见的。
    加密后的私钥文件和未加密的内容是有区别的,要使用加密的私钥文件,就必须提供密语。
    加密过的私钥文件:

    -----BEGIN RSA PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: AES-128-CBC,DFC1AE0AD622F86CAF7D4487A63342D4
    
    Ike/EilireXZs7cuhvyIEVipDvpI+nqa4iHrfAdEnQF3q7bI4KTh5pXHYigli/IA
    rgmxxlm4SbxSk60zECiAvuTX/4UQ3oJTBYWYW6zB5jg8ey28vHyWbDQXKvysvSvS
    ... 省略中间的内容
    sbvDSzj53kSWSoPWvN1woh1QSe8jOYQCoIEUDNaZZXM/kG6vFw2ykeiwL/+olKBl
    knIDLRthD2QH0lYFOBlhMBkPnA8/QXVFqaMSEzvDaL5mce6QbnDAbwvQW+HIkN5F
    -----END RSA PRIVATE KEY-----

    不加密的私钥文件:

    -----BEGIN RSA PRIVATE KEY-----
    MIIEowIBAAKCAQEA5wXZvKOMZgqWTG3QrIicRVF15ka5otSkU4XPnKFoFLKItGQZ
    7A3PTLsQ49RvP5GMe0aFAD7oH9tv03roPRGcAJUTdFeNFc66drdwLOS3zoXY1rDZ
    ... 省略中间的内容
    ymqEwX97zjQeXV/U2kzS9aSBZWjqeI73QhN+PUKYI31MV67yAjtQXyj02g7La4ef
    jFa06rFrs2HJj/HdHWoeeEPNHKL3Kht3y2JIBGOdMFtXR6ijN/ZI
    -----END RSA PRIVATE KEY-----

    粘贴私钥的时候把整个文件的内容都贴上就对了,包括第一行和最后一行。

    远程主机设置
    点新增就增加一台服务器,填写4个参数:

    • Name: 名字,随便取
    • Hostname: 登录的地址
    • Username: 登录的用户名
    • Remote Directory: 登录远程服务器的目录

    “Remote Directory”参数,省事就写根目录(/),填写用户的家目录应该更好的样子。基本不影响使用,影响的可能就是连接后使用相对路径的效果。

    验证测试
    设置完成,并且把公钥复制到远程主机上之后,就可以按“Test Configuration”来验证了。
    复制公钥一般使用 ssh-copy-id 命令,也可以直接用scp等命令放到远程主机正确的文件夹下。

    单机验证
    如果要验证插件功能,也不必再开别的主机,可以尝试ssh连接自己就好了。
    另外,把“Path to key”和“Key”都留空,而在“Passphrase”里填写ssh登录的密码似乎也可以的样子。至少本机的验证是通过了。

    Jenkins

    标签:公钥   验证   linux   安装jenkins   格式   locale   返回   国外   工具包   

    原文地址:https://blog.51cto.com/steed/2458385

    (0)
    (0)
       
    举报
    评论 一句话评论(0
    登录后才能评论!
    © 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
    迷上了代码!