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账号中创建对应的目录和免密码登录配置
- 在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