windows server2019环境下安装openssh进行jenkins代码golang发布

jenkins服务搭建在centos7中,golang代码需要部署到windows2019服务器中,需要在windows中安装 openssh服务,并配置能够免密码登录windows服务器,方便操作

 

1.安装好压软件,下载地址作为压缩包的解压和iso的虚拟光驱工具

http://haozip.2345.cc/

2.安装openssh,并配置 centos(jenkins) 免密码登录 操作windows 服务器

下载openssh

https://github.com/PowerShell/Win32-OpenSSH/releases

 

https://github.com/PowerShell/Win32-OpenSSH/releases/download/v8.1.0.0p1-Beta/OpenSSH-Win64.zip

 

本次是直接解压到c:\openssh目录

到C:\Windows\System32\WindowsPowerShell\v1.0目录下,管理员身份运行powershell.exe,然后切换到 c:\openssh 目录下执行以下命令进行安装openssh

powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1

sc config ssh start=auto

要在cmd下安装服务

把ssh安装成服务后,打开隐藏目录选项

可以看到在 C:\ProgramData\ssh 目录下生成了配置文件,如果想配置免秘钥登录windows的openssh下的administrator账号,需要在 administrator账号中创建对应的目录和免密码登录配置

  1. 在c:/users/administrator创建.ssh目录(命令行),并在其中把centos下的账号公钥拷贝到authorized_keys 这个文件中

b. 修改配置C:\ProgramData\ssh\sshd_config

注释掉:

#Match Group administrators

#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

jenkins配置部分

c.修改sshd_config的端口配置,并重新启动sshd服务 net stop sshd,net start sshd

# 修改ssh端口
Port 2008
# 开启公钥认证
PubkeyAuthentication yes
# 开启密码认证
PasswordAuthentication yes
# 添加如下这行,非常重要否则报错 Permission denied (publickey,keyboard-interactive)
StrictModes no

# 注释掉这行
# AuthorizedKeysFile  .ssh/authorized_keys

注释掉以下这两行

#Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

 

验证免密码登录是否正常
ssh -p2008 administrator@10.10.19.169

 

因为over ssh publish插件在新版本jenkins中已经作废,可以直接在jenkins中直接执行shell命令运行bat脚本

ssh -p2008 administrator@10.10.19.169 "C:\\Users\\Administrator\\wwwroot\\demoair.task\\restart.bat"

 

restart.bat

@echo off
cd /d %~dp0

::
set supervisorDir=C:\\projects\\bin

::
set user=admin
set password=pass

::
%supervisorDir%\\supervisord.exe ctl reload -u %user% -P %password%
%supervisorDir%\\supervisord.exe ctl stop demoair-task -u %user% -P %password%

ping -n 5 127.0.0.1>nul

%supervisorDir%\\supervisord.exe ctl start demoair-task -u %user% -P %password%

 

ftp下载传输的配置:

添加防火墙规则,对指定的ip ssh端口放行(主要是用来jenkins和windows之间进行代码传输)

查看端口是否开启成功

这是配置Jenkins服务器免秘钥登录windows2019后的效果

 

jenkins编译golang代码的配置

jenkins中配置golang环境

wget https://golang.org/dl/go1.15.2.linux-amd64.tar.gz
tar xf go1.15.2.linux-amd64.tar.gz -C /usr/local

vim /etc/profile

export PATH=$PATH:/usr/local/go/bin

[root@jenkins_server:/usr/local/go]# source /etc/profile
[root@jenkins_server:/usr/local/go]# go version
go version go1.15.2 linux/amd64


jenkins中编译golang的脚本

/data/jenkins_home/workspace/chinasoft.com.api.chinasoft.com_prod]# more init.sh 
#!/bin/bash -l

ENV=$1

# 复制环境变量
cp .env.$ENV .env

# 处理依赖
go mod tidy
go mod vendor

# 构建启动程序
GOARCH=amd64 GOOS=windows go build -o api.exe main.go

# 退出
exit 0


# golan g主配置文件
[root@jenkins_server:/data/jenkins_home/workspace/chinasoft.com.api.chinasoft.com_prod]# more main.go 
package main

import (
    "api-golang/cache"
    "api-golang/conf"
    "api-golang/lib/logger"
    "api-golang/model"
    "api-golang/router"
    "context"
    "log"
    "net/http"
    "os"
    "os/signal"
    "time"
)

func init() {
    // 配置初始化
    conf.Init()
    // 初始化日志
    logger.Init()
    // 初始化db
    model.Init()
    // 初始化缓存
    cache.Init()
}

func main() {
    // 装载路由
    r := router.Init()

    srv := &http.Server{
        Addr:    ":8700",
        Handler: r,
    }

    go func() {
        // 服务连接
        if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
            log.Fatalf("listen: %s\n", err)
        }
    }()

    // 等待中断信号以优雅地关闭服务器(设置 5 秒的超时时间)
    quit := make(chan os.Signal)
    signal.Notify(quit, os.Interrupt)
    <-quit
    log.Println("Shutdown Server ...")

    ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
    defer cancel()
    if err := srv.Shutdown(ctx); err != nil {
        log.Fatal("Server Shutdown:", err)
    }
    log.Println("Server exiting")
}

 

 

windows server2019下相关的bat脚本C:\Users\Administrator\wwwroot\go.chinasoft.com\bash

auto.bat

@echo off
cd /d %~dp0

echo 1 >Temp.txt
exit

automonitor.bat

@echo off
cd /d %~dp0

setlocal enabledelayedexpansion

for /f %%a in (Temp.txt) do (
set value=%%a
if "!value!"=="1" (
    call autorun.bat
    echo 0 >Temp.txt
)
)
exit


autorun.bat

@echo off
cd /d %~dp0

::
C:\wwwroot\go.chinasoft.com.exe\winapi.exe stop

ping 127.1 -n 3 >nul 2>nu

::
xcopy C:\wwwroot\go.chinasoft.com\conf\* C:\wwwroot\go.chinasoft.com.exe\conf\* /s /e /y /d
xcopy C:\wwwroot\go.chinasoft.com\api.exe C:\wwwroot\go.chinasoft.com.exe\api.exe /y /d
xcopy C:\wwwroot\go.chinasoft.com\.env C:\wwwroot\go.chinasoft.com.exe\.env /y /d
xcopy C:\wwwroot\go.chinasoft.com\winapi.xml C:\\wwwroot\go.chinasoft.com.exe\winapi.xml /y /d

::
C:\wwwroot\go.chinasoft.com.exe\winapi.exe start

 

posted @ 2020-09-16 19:51  reblue520  阅读(470)  评论(0编辑  收藏  举报