您好,登錄后才能下訂單哦!
dotnet restore "%WORKSPACE%\PreventFraudAPI.Server"
dotnet build "%WORKSPACE%\PreventFraudAPI.Server"
dotnet publish "%WORKSPACE%\PreventFraudAPI.Server\PreventFraudAPI.sln" -o "E:\Publish-web\PreventFraudAPI-test\PreventFraudAPI.Server"
dotnet restore :還原。主要是尋找當前目錄下的項目文件(project.json),利用NuGet庫還原整個項目的依賴庫,并且遍歷每個目錄,生成項目文件,繼續還原該項目文件中的依賴項。
dotnet build :編譯應用程序。該命令將項目及其依賴項生成為一組二進制文件。二進制文件包括擴展名為 .dll 的中間語言 (IL) 文件中的項目代碼。
dotnet publish:發布項目,使可跨平臺運行程序。Windows環境build完之后,可發布到Linux環境下運行。
dotnet run:運行應用程序。
Build構建完后,再新建“Exceute Windows batch command”,從gitlab中拉取項目文件配置項。gitlbab中進行集中存放。將集中配置項文件copy到項目構建后的目錄中。
配置文件操作完后,需將Jenkins平臺下已構建完后的項目文件打包、同步到.NET Core服務器端的CentOS7 Server上。Windows和Linux不同平臺文件操作,這里選擇Python實現,主要作了服務器端dotnet應用服務操作、應用程序備份、代碼同步等。
這里使用python下的paramiko模塊實現。paramiko模塊屬于第三方庫,實現了SSHv2協議,可以在Python代碼中直接使用SSH協議對遠程服務器執行操作,而無需通過ssh命令對遠程服務器進行操作,使用前需要使用如下命令先進行安裝:
pip install paramiko
paramiko包含兩個核心組件:SSHClient和SFTPClient。
SSHClient:類似于Linux的ssh命令,是對SSH會話的封裝,該類封裝了傳輸(Transport),通道(Channel)及SFTPClient建立的方法(open_sftp),常用于執行遠程命令。
SFTPClient:類似與Linux的sftp命令,是對SFTP客戶端的封裝,用以實現遠程文件操作,如文件上傳、下載、修改文件權限等操作。
這里根據實際需求,使用了SSHClient這個組件。
Python代碼細節如下:
import sys
import paramiko
class SSHconnection(object):
def __init__(self, host, port, username, password):
self._host = host
self._port = port
self._username = username
self._password = password
self._transport = None
self._client = None
self._connect()
#建立connect連接
def _connect(self):
transport = paramiko.Transport((self._host, self._port))
transport.connect(username=self._username, password=self._password)
self._transport = transport
def exec_command(self, command, step):
if self._client is None:
self._client = paramiko.SSHClient()
self._client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self._client._transport = self._transport
stdin, stdout, stderr = self._client.exec_command(command)
data = stdout.read()
print('%s 執行結果: ' % step)
print(data.decode('utf-8'))
# #輸出結果
# if len(data) > 0:
# print('執行結果:')
# print(data.decode('utf-8'))
err = stderr.read()
#輸出錯誤結果
if len(err) > 0:
print('%s 執行的錯誤輸出:' % step)
print(err.decode('utf-8'))
#關閉close連接
def close(self):
if self._transport:
self._transport.close()
if self._client:
self._client.close()
if __name__=="__main__":
host = "10.10.10.75"
port = 65089
username = "root"
password = "password"
cmd_stop = "systemctl stop supervisor"
cmd_backup = "cp -r /usr/soft/package/HiCore.PreventFraudAPI.Web/ /usr/soft/backup/HiCore.PreventFraudAPI.Web-`date +%Y-%m-%d-%H:%M`"
cmd_rsync = "rsync -vzrtopg --no-super --numeric-ids --progress --port=873 --password-file=/opt/scripts/passwd.sh rsync_user@10.10.10.69::PreventFraudAPI-test /usr/soft/package/HiCore.PreventFraudAPI.Web/"
cmd_start = "systemctl start supervisor"
conn = SSHconnection(host, port, username, password)
print('開始停supervisor服務...')
conn.exec_command(cmd_stop, 'supervisor_stop_service')
print('開始備份本地PreventFraudAPI程序...')
conn.exec_command(cmd_backup, 'backup_app')
print('開始同步PreventFraudAPI程序...')
conn.exec_command(cmd_rsync, 'rsync_app')
print('開始啟supervisor服務...')
conn.exec_command(cmd_start, 'supervisor_start_service')
print('PreventFraudAPI程序發布完成,請驗證!')
同理,Job-B操作跟Job-A一樣。主要是Job-C有差異,Job配置中有帶參數。
4) 新建Job-C
列出Job中主要設置項。
選擇“This project is parameterized”,添加參數選擇“Choice Parameter”,配置如下:
根據選擇的參數觸發遠程Job構建。如選擇選項"Web"觸發遠程Job-A構建,選擇選項"File"觸發遠程Job-B構建。
構建build:
build構建步驟選擇新建“Exceute Windows batch command”,如下圖:
import jenkins
jenkins_server_url = 'http://jenkins.hicore.local/'
user = 'yuhuanghui'
api_token= '11f6714b10b086b9165ed507dd2f5e161a'
#實例化jenkins對象,連接遠程的jenkins server
server = jenkins.Jenkins(jenkins_server_url,username=user,password=api_token)
print(server)
#構建job
server.build_job('PreventFraudAPI-test')
#查看某個job的構建信息
job_info=server.get_job_info('PreventFraudAPI-test')
print(job_info)
這里就不更換python版本了,其他Job用到的python都是Python3,所以用另一種API方式JenkinsApi 。
2) JenkinsApi
使用JenkinsApi方式需要導入from jenkinsapi.jenkins import Jenkins、from jenkinsapi.build import Build模塊。
上面Job-C中的python腳本:
import os,sys
from jenkinsapi.jenkins import Jenkins
from jenkinsapi.build import Build
def get_server_instance():
jenkins_url = 'http://10.10.10.69:8080/'
server = Jenkins(jenkins_url, username='xiaoming', password='password')
return server
server = get_server_instance()
#版本
print('Jenkins版本:',server.version)
#所有的job列表
#print('Jobs:', server.keys())
print('查看Jobs列表:',server.get_jobs_list())
#判斷job是否存在,存在返回true,不存在返回false。
Web_Job = server.has_job('PreventFraud-test')
File_Job = server.has_job('PreventFraudFile-test')
env = os.getenv("ENV")
print('選擇發布構建的應用是:', env)
if env == 'Web':
print('開始Build構建PreventFraud-Web項目!')
if Web_Job == True:
#獲取job名稱
job = server.get_job('PreventFraud-test')
print('要Build構建的job是:', job)
#構建,無參數的構建
#params = {'Branch': 'oriin/master', 'host': '192.168.1.1'}
res = server.build_job('PreventFraud-test')
print('開始觸發遠程Job的構建,請查看遠程Job:%s' % job)
print(res)
#print(job.__dict__['_data']['builds'])
url = job.__dict__['_data']['lastBuild']['url']
number = job.__dict__['_data']['lastBuild']['number']
obj = Build(url, number, job)
print('此次構建的Job名稱:%s,Job的URL是:%s, 是第 %d 次構建。' % (job, url, number))
print('構建的結果:', obj.get_status())
else:
print('要構建的Job不存在,請檢查!')
elif env == 'File':
print('開始Build構建PreventFraud-File項目!')
if File_Job == True:
#獲取job名稱
job = server.get_job('PreventFraudFile-test')
print('要遠程觸發Build構建的job是:', job)
#構建,無參數的構建
#params = {'Branch': 'oriin/master', 'host': '192.168.1.1'}
res = server.build_job('PreventFraudFile-test')
print('開始觸發遠程Job的構建,請查看遠程Job:%s' % job)
print(res)
#print(job.__dict__['_data']['builds'])
url = job.__dict__['_data']['lastBuild']['url']
number = job.__dict__['_data']['lastBuild']['number']
obj = Build(url, number, job)
print('此次構建的Job名稱:%s,Job的URL是:%s, 是第 %d 次構建。' % (job, url, number))
print('構建的結果:', obj.get_status())
else:
print('要構建的Job不存在,請檢查!')
else:
print('請選擇正確ENV環境項目!')
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。