• 持续集成Gitlab CICD Runner&Jenkins


    使用Gitlab Runner实现

    再要部署的服务器上安装 gitlab runner

    下载可执行文件

    # 按照架构自行选择 本文选择的是  Linux x86-64
    # Linux x86-64
    wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
    
    # Linux x86
    wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-386
    
    # Linux arm
    wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm
    

    设置可执行权限权限

    chmod +x /usr/local/bin/gitlab-runner
    

    创建用户

    useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
    

    运行服务

    gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
    gitlab-runner start
    

    注册 Runner

    gitlab上找到需要用的URL与token

    • 路径是:Project-> Settings -> CI/CD -> Runners -> Expand

    在浏览器中下载gitlab的ssl证书

    1. 点击浏览器链接的左边锁头可以下载证书。本文下载的格式是cer

    2. 将下载好的证书上传到要部署的服务器上。

    注册runner

    gitlab-runner register --tls-ca-file=/home/gitlab-runner/test.cer
    # 根据提示 依次输入如下内容
    Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
    https://example.com/
    Please enter the gitlab-ci token for this runner:
    2312132dfa2fdafeafdafewaf
    Please enter the gitlab-ci description for this runner:
    [centos.localdomain]: test
    Please enter the gitlab-ci tags for this runner (comma separated):
    test
    Registering runner... succeeded                     runner=nZsc7EsF
    Please enter the executor: docker-ssh+machine, parallels, shell, ssh, virtualbox, docker+machine, kubernetes, custom, docker, docker-ssh:
    shell
    Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 
    #——————————————————————————注——————————————————————————
    本文的executor选择的是shell
    # 注册成功后再次run一下gitlab-runner
    [root@centos target]# gitlab-runner start
    # 注册成功后生成 /etc/gitlab-runner/config.toml
    [root@centos target]# cat /etc/gitlab-runner/config.toml
    concurrent = 1
    check_interval = 0
    
    [session_server]
      session_timeout = 1800
    
    [[runners]]
      name = "test"
      url = "https://example.com/"
      token = "adsfasfdsafdsafdafdsfdafa"
      tls-ca-file = "/home/gitlab-runner/11111.cer"
      executor = "shell"
      [runners.custom_build_dir]
      [runners.cache]
        [runners.cache.s3]
        [runners.cache.gcs]
    

    在项目中配置.gitlab-ci.yml文件

    本文的.gitlab-ci.yml

    注: 只做了本次部署的配置,具体其他配置可以查看官网https://docs.gitlab.com/ee/ci/yaml/README.html

    stages:
      - build
    before_script:
      - export MVN_HOME  # export Envionment Variable
      - export JAVA_HOME
      - java -version
      - sh /home/gitlab-runner/kill.sh
    # 定义 job
    test:
      stage: build      # stage
      tags:
        - first         # runner tag you configured
      only:        
        - test          # branch support regex
      script:           #command
        - mvn clean
        - mvn package
        - cd ./target
        - nohup java -Xms3g -Xmx3g -jar  test-new-0.0.1-SNAPSHOT.jar --server.port=9999 > test.log 2>&1 &
    

    验证 .gitlab-ci.yml的正确性

    可以在gitlab上使用CI Lint验证上面yml文件的正确行。CI LintCI/CD里面。下面是我的验证结果。

    Status: syntax is correct
    Parameter 	Value
    Build Job - test 	
    
    export MVN_HOME
    export JAVA_HOME
    java -version
    sh /home/gitlab-runner/kill.sh
    mvn clean
    mvn package
    cd ./target
    nohup java -Xms3g -Xmx3g -jar  test-new-0.0.1-SNAPSHOT.jar --server.port=9999 > test.log 2>&1 &
    
    
    Tag list: first
    Only policy: refs, test
    Except policy:
    Environment:
    When: on_success 
    

    注意事项

    1. .gitlab-ci.yml文化中指定的 runner tag一定要存在[否则找不到runner会一直pending]
    2. 出现报错fatal: unable to access 'https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@gitlab.x.com/root/cmop.git/': Peer's Certificate issuer is not recognized.
    # 关闭ssl校验
    [root@gitlab-runner ~]# su - gitlab-runner
    [gitlab-runner@gitlab-runner ~]$ git config --global http."sslVerify" false
    # 查看
    [gitlab-runner@gitlab-runner ~]$ cat /home/gitlab-runner/.gitconfig 
    [http]
        sslVerify = false 
    

    使用 Jenkins 实现

    下载/使用jenkins

    1. 访问 : https://jenkins.io/download/。本文采用的使用是`war`包安装
    
    2. 下载: `wget http://ftp-chi.osuosl.org/pub/jenkins/war-stable/2.190.2/jenkins.war`
    
    3. 运行 :`nohup java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war --httpPort=8888 > jenkins.log 2>&1 &`
    注: `-Dhudson.util.ProcessTree.disable=true`参数很重要,为了不让jenkins杀掉job创建的进程。如果不加的话,即便是`nohup`执行的命令也会在job执行之后杀掉。
    

    访问 ip:8888进行初始化设置

    注:如果之前安装过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:
    # 使用下面的密码进入,实际是一个md5的串
    1111111111111111111111111
    

    选择plugins

    本文直接选择了 suggestions plugins,部分插件安装失败可以直接跳过。

    配置密码

    重新设置一个密码

    # 忘记秘密:
    到`/root/.jenkins/users` `admin`用户下找到config.xml,修改下面的内容
    <passwordHash>#jbcrypt:$2a$10$MiIVR0rr/UhQBqT.bBq0QehTiQVqgNpUGyWW2nJObaVAM/2xSQdSq</passwordHash>
    这个密码是`123456`
    

    jenkins中配置Gitlab实现自动部署

    安装gitlab插件

    1. 依次访问:`Manage Jenkins`->`Manage Plugins`
    2. 在:`Available`中搜索`Gitlab`,安装`Gitlab`插件
    3. 等待安装。
    

    配置gitlab连接[可不做]

    1. 依次访问:`Manage Jenkins`->`Configure System`
    2. 找到 Gitlab 标签页
    3. 依次填入`Connection name`,`Gitlab host URL`
    4. 添加一个`Credntials`,选择`Gitlab API token`
    5. 填入在gitlab上设置的`Personal Access Tokens`
    6. 点开`Advanced`,勾上`Ignore SSL Certificate Errors`
    注:如果不勾上步骤6的话,gitlab是https的将会不成功。
    7. 点击`Test Connnection`
    8. 保存
    

    创建一个Freestyle project的Jobtest

    此时可以先不做任何配置,直接保存。

    配置testjob gitlab仓库

    1. 在job`test`页面点击`Configure`
    2. 找到`Source Code Management`选择`Git`
    3. 配置`Repository URL`并添加一个`Credentials`
    注:此处想使用`Personal Access Tokens`添加不上,最后使用的账号密码
    4. 保存
    

    配置test job Triggers

    1. 在job`test`页面点击`Configure`
    2. 找到`Build Triggers`选择`Build when a change is pushed to GitLab`其他默认就行
    3. 保存
    

    配置webhook

    1. 到`Gitlab`项目页面->`Settings`->`Integrations`
    2. 输入上一步配置后面的`url`
    3. 返回错误`Url is blocked: Requests to the local network are not allowed`
    4. 上面的解决办法:
    管理员账号登录gitlab,在Admin area中,左侧Settings -> Network -> Outbound requests,勾选Allow requests to the local network from hooks and services
    但是没有gitlab管理员权限,我们将采取别的办法
    

    重新配置testjob Triggers改为Poll SCM

    1. 配置每分钟刷新一次
    */1 * * * *
    

    配置bulid执行命令

    export MVN_HOME # export Envionment Variable
    export JAVA_HOME
    java -version
    sh /home/gitlab-runner/kill.sh
    cd /root/.jenkins/workspace/test
    mvn clean
    mvn package
    cd ./target
    nohup java -Xms3g -Xmx3g -jar  test-new-0.0.1-SNAPSHOT.jar --server.port=9999 > test.log 2>&1 &
    # 这些也可以写到一个shell脚本中,jenkins调用脚本
    

    对比

    • gitlab-ci
    1. 上手简单
    2. gitlab完美兼容
    3. 没有web页面,但是gitlab有提供
    4. 需要自己配置编译环境
    • jenkins
    1. 上手简单
    2. 需要配置webhook,或者像本文一样轮询
    3. 有自己的web页面
    4. 有丰富的插件,功能强大
    5. 编译环境例如jdk mvn可以在设置中配置,不需要构建
  • 相关阅读:
    Mac 安装 mysqlclient
    Linux下切换Python版本的几种方法
    django执行python manage.py makemigrations 时报错AttributeError: 'str' object has no attribute 'decode'
    Linux下切换Python版本的几种方法
    django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).
    解决https网页无法加载http资源问题
    Git——本地仓库与远程仓库关联
    vue项目笔记(五)——vue不同环境配置不同的打包命令
    配置系统读取配置2
    依赖注入概要
  • 原文地址:https://www.cnblogs.com/primadonna/p/11843788.html
Copyright © 2020-2023  润新知