質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

Q&A

解決済

2回答

2082閲覧

CircleCIでpythonのテストコードを通したい

oinari03

総合スコア59

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

0グッド

1クリップ

投稿2020/06/13 20:26

最終目的

pythonのコードをcircleciに自動テストしてもらいたい。
circleciもdockerも初めてなのですべてに自信がないです。

環境

python:3.8.0(env)
ubuntu lts:18.04
dockerは長いので下に示します。

Client: Docker Engine - Community Version: 19.03.8 API version: 1.40 Go version: go1.12.17 Git commit: afacb8b7f0 Built: Wed Mar 11 01:25:46 2020 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.8 API version: 1.40 (minimum version 1.12) Go version: go1.12.17 Git commit: afacb8b Built: Wed Mar 11 01:29:16 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: v1.2.13 GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429 runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683

実際に行った手順

・githubで目的のリポジトリを作る
circleciのアカウント作成
・ADD PROJECT
・目的のリポジトリでset up project
・以下の画面になる
イメージ説明

・start buildingを押す
すると、Add .circleci/config.ymlをしてくれと言われたのでこのリポジトリに
.circleci/config.ymlを追加しました。

以下が追加した内容です。

version: 2 jobs: setup_dependencies: docker: - image: circleci/python:3.8.0 steps: - checkout - restore_cache: key: deps-{{ checksum "requirements.lock" }} - run: command: | pip install --user -r requirements.lock - save_cache: key: deps-{{ checksum "requirements.lock" }} paths: - "~/.local" test: docker: - image: circleci/python:3.8.0 steps: - checkout - restore_cache: key: deps-{{ checksum "requirements.lock" }} - run: command: | python3.8 -m unittest -v workflows: version: 2 all: jobs: - setup_dependencies - test: requires: - setup_dependencies

その後、Add .configボタンを押すとエラーが出ました。

エラー文

・star buildingを押す
の後に表示される
Add .configボタンを押したときの画面です。

イメージ説明

その後、エラー詳細を見に行った時の画面です。

イメージ説明

このテストが通っていません。

試したこと

1,
こちらの記事を手順にしてcircleciコマンドを実行し.circleci/config.ymlが通るかどうか確認しました。

$ circleci config validate -c .circleci/config.yml Receiving latest version of circleci... INFO: We've built a brand new CLI for CircleCI! Please run 'circleci switch' to upgrade. Error: Error parsing config file: yaml: line 19: did not find expected key

config.ymlのライン19行目

test: docker: - image: circleci/python:3.8.0 steps:

ここのpython3.8.0のところがおかしいみたいです。
次に
2,
pythonがdocker上ではバージョンが違うのかと思いました。

$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE circleci/picard latest 09835951ebff 36 hours ago 101MB docker/getting-started latest 3c156928aeec 7 weeks ago 24.8MB hello-world latest bf756fb1ae65 5 months ago 13.3kB python 3.8.0 0a3a95c81a2b 6 months ago 932MB

python3.8.0が動いていそうです。

この時点でわからなくなりました。

お願いしたいこと

以上のことを踏まえたうえでtestが通るようにしてほしいです。
ymlはインデントが結構大切と聞いて確認しています。

何か不備があれば追記いたします。

どうぞご回答のほどよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

解決方法

・原因
1,ubuntuの仕様により、requirements.lockrequirements.lockで余計なものが入っていた
2,jobとworkflowsをトップレベルに編集しjobの中のtestを配置したこと
3,これはご指摘にあったことですが、インデントによるエラーもありました。

1について

わたしは外部パッケージを追加したときrequirements.txtを用意してその後requirements.lockを作成しました。

$ pip install -r requirements.txt
$ pip freeze > requirements.lock

ここで問題があります。

こちら
を参考にしてほしいのですが
pkg-resources==0.0.0
という余計なものが.lockの中に入ってしまうのでこちらを削除してください

2について

これは
こちら

にある通りjobとworkflowをトップレベルにしました

変更後を記します

version: 2 jobs: setup_dependencies: docker: - image: circleci/python:3.8.0 steps: - checkout - restore_cache: key: deps-{{ checksum "requirements.lock" }} - run: command: | pip install --user -r requirements.lock - save_cache: key: deps-{{ checksum "requirements.lock" }} paths: - "~/.local" test: docker: - image: circleci/python:3.8.0 steps: - checkout - restore_cache: key: deps-{{ checksum "requirements.lock" }} - run: command: | python3.8 -m unittest -v workflows: version: 2 all: jobs: - setup_dependencies - test: requires: - setup_dependencies

3について

・これは指摘していただいた通りのインデントによるミスです
・ymlはとてもインデントを気にします。

### まとめ
circlciは無料でgithubのpushからテストをしてくれるので試し放題です。

もうちょっと遊んでみようと思います。
有難うございました。

投稿2020/06/16 04:32

oinari03

総合スコア59

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

20行目にあるstepsの前のスペースを削除してインデントを揃えて下さい。
YAMLを正しくパースできていないことが原因です。

投稿2020/06/14 01:19

yymmt

総合スコア1615

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oinari03

2020/06/14 03:32 編集

stepsの前のインデントを揃えましたが、testのところの同様のエラーが消えません。 ``` #!/bin/bash -eo pipefail ./manage.py test /bin/bash: ./manage.py: No such file or directory Exited with code exit status 127 CircleCI received exit code 127 ``` そのほかの原因があるということでしょうか?
yymmt

2020/06/14 04:14

Unable to parse YAMLのエラーは解消したと思って良いでしょうか。manage.py test が動いているということは Django に関するアプリケーションでしょうか。requirements.txtにはdjangoが適切に含まれていますか?Dockerではミニマムな環境でのpythonがインストールされますので、必要なパッケージは全てrequirements.txtに含める必要があります。
oinari03

2020/06/14 05:02

Unable to parse YAMLのエラーは解消したと思います。ありがとうございます。 いえ、Djangoを動かしているわけではないです。 外部パッケージとしていくつかあって、requirements.txtの中身は以下のようになっています。 ``` Click==7.0 Pillow==6.2.1 requests==2.22.0 ```
yymmt

2020/06/14 05:44

念のための確認ですが、ローカル環境でユニットテストは動いているのでしょうか。 python3.8 -m unittest -v と記述されているので問題ないとは思いますが。 その際 manage.py は使われていますでしょうか。使われている場合、このファイルが見つけられていないというエラーになりますので、可能性としてはユニットテストを行う階層が異なるためかもしれません。
oinari03

2020/06/14 06:17

python3.8 -m unittest -v こちらのコマンドは正常にokで動いていると思います。 ただ、どこのファイルにもmanage.pyというものを使った覚えがないです。
yymmt

2020/06/14 10:13

config.ymlの17行目のtestのインデントを下げるとどうでしょうか。jobsの下のsetup_dependenciesとtestを同じ階層となるようにする必要があります。
oinari03

2020/06/16 04:18

返信が遅くなって申し訳ありません。 問題が解決しました。 manage.pyは最後までわかりませんしたが、原因はubuntuのrequirements.lockを作成したときに余計なものが入っていたことと、config.ymlの編集によって解決しました。 わたしの質問に付き合っていただき感謝しています。
yymmt

2020/06/16 04:29

解決してよかったです。
oinari03

2020/06/16 04:32

本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問