felix-cao / Blog

A little progress a day makes you a big success!
31 stars 4 forks source link

搭建基于Jenkins的构建环境 #166

Open felix-cao opened 5 years ago

felix-cao commented 5 years ago

关于 Jenkins 的安装请阅读 Jenkins 安装配置及与 gitlab 集成(重点是端口修改和Jenkins系统用户配置)

一、场景介绍

192.168.1.200 Jenkins服务器,Linux 环境 192.168.1.201 Windows 主机,干活的, 账号为 admin

场景:我们要实现 Jenkins 服务器去指挥 Windows 主机去干脏活累活!

二、配置 Jenkins 全局 Credentials

2.1、生成 Jenkins 服务器的密钥对

登录 192.168.1.200 Jenkins 服务器,执行下面的命令

ssh-keygen -t rsa

三次回车 image

2.2、复制私钥

vi ~/.ssh/id_rsa

2.3、设置 Credentials 。

Manage JenkinsManage CredentialsglobalAdd Credentials 输入ID: Client, 请记住这个 ID 将在步骤 2.2 中复制的私钥填入Private Key 中, 点 OK 保存。 image

三、配置干活的机器

3.1、 配置能控制该机器的SSH环境

3.1.1、 安装 openSSH

点击左下角 WIN 图标, 设置(Settings) -> 应用(Apps) -> 应用和功能(Apps & features) -> 可选功能(Optional features) -> 添加功能(Add a feature)

安装后,在 Type here to search 中输入 service 找到 OpenSSH SSH Server 右键点 start

3.1.2、 下载安装 Git-bash

    下载 git GUI clent(https://git-scm.com/downloads), 安装略

3.1.3、Update the window's default shell

     以管理员的的身份启动 Powershell, 输入如下命令:

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\Git\bin\bash.exe" -PropertyType String -Force

上面的代码表示更改 Window 的默认 Shellgitbash

3.1.4、更改OpenSSH的配置文件

    打开 C:\ProgramData\ssh\sshd_config , 把最后两行注释掉

# Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

3.1.5、配置 authorized_keys

Jenkins 服务器上的公钥 copyWindow 主机上 ~/.ssh/authorized_keys

ssh-copy-id -i ~/.ssh/id_rsa.pub admin@192.168.1.201

3.2、安装配置干活依赖的工具

3.2.1、安装 nodejs

Nodejs 官网,下载安装略。

3.2.2、安装 Yarn

npm install -g yarn 
# npm install -g yarn --registry=https://registry.npm.taobao.org

3.2.3、安装 SVN 命令行工具和 SVN 图形界面工具

下载SVN命令行工具 Subversion for Windows, 安装(略)

下载 SVN 图形界面工具,TortoiseSVN, 安装(略), 安装这个是为了解决第一次使用命令行工具时出现的权限问题

四、创建和配置 Jenkins Pipeline Job

4.1、创建 Pipeline Job

进入 Jenkins 管理界面,左侧 New Item → 输入Job Item名称 → 点击Pipeline → 点击 OK

4.2、配置

Pipeline code 

pipeline {
    agent any
    options {
        ansiColor('xterm')
    }
    parameters {
        string(name: 'name', defaultValue: 'czf', description: 'czf')
        string(name: 'ID', defaultValue: '1', description: '')
        string(name: 'level', defaultValue: '2', description: '2-Simple; 4-Full')
        // choice(name: 'siteID', choices: ['THC CN', 'THC Production', 'Predeploy'], description: 'Pick the siteID')
        // choice(name: 'modulePath', choices: [0,1,2,3, 4], description: '0-All; 1-loanCentral; 2-riskreports/reports/MQReports; 3-riskreports/reports/RevisionReports; 4-asset/budgeting/InvestmentIncome')
    }
    stages {
        stage('Parameters') {
            steps {
                sh "printenv"
                sh "echo 'name:' ${params.name}"
                sh "echo 'ID:' ${params.ID}"
                sh "echo 'level:' ${params.level}"
            }
        }
        stage('Build on 192.168.1.201') {
            steps {
                sshagent(credentials: ['Client-Win']) {
                    sh """#!/bin/bash
                          date
                          ssh zfcao@192.168.1.201 "cd /c/code/Web-vue &&
                          svn info &&
                          svn update &&
                          yarn test --ID='${params.ID}' --name='${params.name}' --level='${params.level}'
                          "
                    """
                }
            }
        }
    }
}

上面的代码 Client-Win 为 步骤2.3中设置的 ID, 192.168.1.201 为干脏活累活的 Window 主机

五、配置 Jenkins Token

5.1、配置当前用户的 API Token

右上角用户IconConfigureAPI TokenAdd new Token, 请记住这个 API Token

image

5.2、配置当前 job 的 Authentication Token

请记住这里设置的 Authertication Token image

5.3、安装插件

5.3.1 安装AnsiColor插件

Manage Jenkins -> Manage plugins -> Available -> 输入 ansicolor;

5.3.2 安装 SSH Agent 插件

Manage Jenkins -> Manage plugins -> Available -> 输入 SSH Agent

安装后重启

5.4、测试通信是否成功

curl -X POST http://192.168.200:8090/job/trigger/buildWithParameters?token=token \
--user hsxue:APIToken

上面的代码中的 tokenAPIToken 分别是 5.2 和 5.1 设置的参数 或使用 postMan 测试 image image